September website changes - Pre-registration (#66)
* Factors rendering of external links into its own template. Automagical! * Adds wagtail templates for keynotes on the front page * Migrates to Wagtail 1.6 * Migrates content pages to be a streamfield. Flexibility++. * Fixes editing of ContentPage bodies * Adds floating images to content pages * Fixes the layout of floating images * Adds anchor links to content pages. * Adds presentation link to the keynote speaker block model * LCA-ifies the schedule list * Refactors cms_pages/content_page into a new base template * cms_pages/content_page now derives from abstract_content_page * news_index_page now derives from abstract_content_page * news_page now derives from abstract_content_page.html * utility_page now uses the content_page base template * Factors out _right_floating_image.html * Themes the presentation detail page * Themes the speaker profile page. * Themes the schedule list page. * Minor work on schedule_conference.html * Themes schedule_detail.html * Replaces cradle.svg * Adds a background image to the schedule pages * Adds libravatar fallback for speaker profile images * Adds new background images (must update colophon) * Adds some magic so that we can have slightly different presentation backgrounds for different pages. * Adds the sponsor block to the bottom of the page. * Adds sponsor logos to footer. * All migrations are now in this tree * Fixes wagtail migrations * Adjusts presentation_detail to allow for miniconfs (i.e. no target audience) * Adds unpublishing to presentation detail * Adds ScheduleHeaderParagraph, which allows us to add some text to the header of schedule pages. * Adds NamedHeaderParagraph. It allows us to store header paragraphs in the CMS. * Date formatting in the schedule * First step for fixing images * Allows us to automagically load the colophon * Adds “publish changes” button. * Can login with email address
24
cms_pages/migrations/0006_auto_20160916_0317.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.7 on 2016-09-16 03:17
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import cms_pages.models
|
||||
from django.db import migrations
|
||||
import wagtail.wagtailcore.blocks
|
||||
import wagtail.wagtailcore.fields
|
||||
import wagtail.wagtailimages.blocks
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cms_pages', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='homepage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('basic_content', wagtail.wagtailcore.blocks.StructBlock([(b'panel_type', wagtail.wagtailcore.blocks.ChoiceBlock(choices=[('blue_left', 'Left-aligned image, blue-filtered image BG'), ('white_right', 'Right-aligned image, white background')])), (b'heading', wagtail.wagtailcore.blocks.CharBlock(required=True)), (b'inset_illustration', wagtail.wagtailcore.blocks.ChoiceBlock(choices=[('antarctica.svg', 'Antarctica'), ('bridge.svg', 'Bridge'), ('casino.svg', 'Casino'), ('cradle.svg', 'Cradle Mountain'), ('devil.svg', 'Tasmanian Devil'), ('falls.svg', 'Waterfall'), ('hobart.svg', 'Hobart'), ('lavender.svg', 'Lavender'), ('tuz.svg', 'Tuz'), ('wineglass.svg', 'Wineglass')])), (b'background_image', wagtail.wagtailimages.blocks.ImageChooserBlock(help_text="This is used as the background image of a blue-left block. It's not used for white-right.", required=False)), (b'body', wagtail.wagtailcore.blocks.RichTextBlock(required=True)), (b'link', wagtail.wagtailcore.blocks.StructBlock([('page', wagtail.wagtailcore.blocks.PageChooserBlock()), ('title', wagtail.wagtailcore.blocks.CharBlock(required=True))])), (b'external_links', wagtail.wagtailcore.blocks.ListBlock(cms_pages.models.ExternalLinksBlock))])), ('keynotes', wagtail.wagtailcore.blocks.StructBlock([(b'heading', wagtail.wagtailcore.blocks.CharBlock(required=True)), (b'speakers', wagtail.wagtailcore.blocks.ListBlock(cms_pages.models.KeynoteSpeakerBlock))]))]),
|
||||
),
|
||||
]
|
32
cms_pages/migrations/0007_auto_20160916_0417.py
Normal file
|
@ -0,0 +1,32 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.7 on 2016-09-16 04:17
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
import wagtail.wagtailcore.blocks
|
||||
import wagtail.wagtailcore.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cms_pages', '0006_auto_20160916_0317'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='contentpage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('rich_text', wagtail.wagtailcore.blocks.RichTextBlock(required=False))]),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='newsindexpage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('rich_text', wagtail.wagtailcore.blocks.RichTextBlock(required=False))]),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='newspage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('rich_text', wagtail.wagtailcore.blocks.RichTextBlock(required=False))]),
|
||||
),
|
||||
]
|
52
cms_pages/migrations/0008_auto_20160916_0417.py
Normal file
|
@ -0,0 +1,52 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
from wagtail.wagtailcore.rich_text import RichText
|
||||
|
||||
|
||||
models = ["ContentPage", "NewsIndexPage", "NewsPage", ]
|
||||
|
||||
|
||||
def convert_to_streamfield(apps, schema_editor):
|
||||
for model_name in models:
|
||||
_convert_to_streamfield(apps, model_name)
|
||||
|
||||
|
||||
def _convert_to_streamfield(apps, model_name):
|
||||
Model = apps.get_model("cms_pages", model_name)
|
||||
for page in Model.objects.all():
|
||||
if page.body.raw_text and not page.body:
|
||||
page.body = [('rich_text', RichText(page.body.raw_text))]
|
||||
page.save()
|
||||
|
||||
|
||||
def convert_to_richtext(apps, schema_editor):
|
||||
for model_name in models:
|
||||
_convert_to_richtext(apps, model_name)
|
||||
|
||||
|
||||
def _convert_to_richtext(apps, model_name):
|
||||
Model = apps.get_model("cms_pages", model_name)
|
||||
for page in Model.objects.all():
|
||||
if page.body.raw_text is None:
|
||||
raw_text = ''.join([
|
||||
child.value.source for child in page.body
|
||||
if child.block_type == 'rich_text'
|
||||
])
|
||||
page.body = raw_text
|
||||
page.save()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cms_pages', '0007_auto_20160916_0417'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(
|
||||
convert_to_streamfield,
|
||||
convert_to_richtext,
|
||||
),
|
||||
]
|
32
cms_pages/migrations/0009_auto_20160916_0503.py
Normal file
|
@ -0,0 +1,32 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.7 on 2016-09-16 05:03
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
import wagtail.wagtailcore.blocks
|
||||
import wagtail.wagtailcore.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cms_pages', '0008_auto_20160916_0417'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='contentpage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('rich_text', wagtail.wagtailcore.blocks.RichTextBlock(required=False)), ('raw_html', wagtail.wagtailcore.blocks.RawHTMLBlock(required=False))]),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='newsindexpage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('rich_text', wagtail.wagtailcore.blocks.RichTextBlock(required=False)), ('raw_html', wagtail.wagtailcore.blocks.RawHTMLBlock(required=False))]),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='newspage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('rich_text', wagtail.wagtailcore.blocks.RichTextBlock(required=False)), ('raw_html', wagtail.wagtailcore.blocks.RawHTMLBlock(required=False))]),
|
||||
),
|
||||
]
|
33
cms_pages/migrations/0010_auto_20160916_0729.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.7 on 2016-09-16 07:29
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import cms_pages.models
|
||||
from django.db import migrations
|
||||
import wagtail.wagtailcore.blocks
|
||||
import wagtail.wagtailcore.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cms_pages', '0009_auto_20160916_0503'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='contentpage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('rich_text', wagtail.wagtailcore.blocks.RichTextBlock(required=False)), ('raw_html', wagtail.wagtailcore.blocks.RawHTMLBlock(required=False)), ('floating_image', cms_pages.models.FloatingImageBlock()), ('anchor', cms_pages.models.AnchorBlock(help_text='Add a named anchor to this point in the page'))]),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='newsindexpage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('rich_text', wagtail.wagtailcore.blocks.RichTextBlock(required=False)), ('raw_html', wagtail.wagtailcore.blocks.RawHTMLBlock(required=False)), ('floating_image', cms_pages.models.FloatingImageBlock()), ('anchor', cms_pages.models.AnchorBlock(help_text='Add a named anchor to this point in the page'))]),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='newspage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('rich_text', wagtail.wagtailcore.blocks.RichTextBlock(required=False)), ('raw_html', wagtail.wagtailcore.blocks.RawHTMLBlock(required=False)), ('floating_image', cms_pages.models.FloatingImageBlock()), ('anchor', cms_pages.models.AnchorBlock(help_text='Add a named anchor to this point in the page'))]),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,27 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.7 on 2016-09-18 01:56
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
replaces = [(b'cms_pages', '0011_scheduleheaderparagraph'), (b'cms_pages', '0012_auto_20160918_0141')]
|
||||
|
||||
dependencies = [
|
||||
('cms_pages', '0010_auto_20160916_0729'),
|
||||
('symposion_schedule', '0002_presentation_unpublish'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ScheduleHeaderParagraph',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('text', models.TextField()),
|
||||
('schedule', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='header_paragraph', to='symposion_schedule.Schedule')),
|
||||
],
|
||||
),
|
||||
]
|
23
cms_pages/migrations/0012_namedheaderparagraph.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.7 on 2016-09-18 02:09
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cms_pages', '0011_scheduleheaderparagraph_squashed_0012_auto_20160918_0141'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='NamedHeaderParagraph',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(help_text='Pass this name to header_paragraph tag.', max_length=64)),
|
||||
('text', models.TextField()),
|
||||
],
|
||||
),
|
||||
]
|
108
cms_pages/migrations/0013_auto_20160918_0358.py
Normal file
|
@ -0,0 +1,108 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.7 on 2016-09-18 03:58
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import taggit.managers
|
||||
import wagtail.wagtailcore.models
|
||||
import wagtail.wagtailimages.models
|
||||
import wagtail.wagtailsearch.index
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wagtailcore', '0029_unicode_slugfield_dj19'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('wagtailimages', '0013_make_rendition_upload_callable'),
|
||||
('taggit', '0002_auto_20150616_2121'),
|
||||
('cms_pages', '0012_namedheaderparagraph'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CustomImage',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=255, verbose_name='title')),
|
||||
('file', models.ImageField(height_field='height', upload_to=wagtail.wagtailimages.models.get_upload_to, verbose_name='file', width_field='width')),
|
||||
('width', models.IntegerField(editable=False, verbose_name='width')),
|
||||
('height', models.IntegerField(editable=False, verbose_name='height')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='created at')),
|
||||
('focal_point_x', models.PositiveIntegerField(blank=True, null=True)),
|
||||
('focal_point_y', models.PositiveIntegerField(blank=True, null=True)),
|
||||
('focal_point_width', models.PositiveIntegerField(blank=True, null=True)),
|
||||
('focal_point_height', models.PositiveIntegerField(blank=True, null=True)),
|
||||
('file_size', models.PositiveIntegerField(editable=False, null=True)),
|
||||
('collection', models.ForeignKey(default=wagtail.wagtailcore.models.get_root_collection_id, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Collection', verbose_name='collection')),
|
||||
('tags', taggit.managers.TaggableManager(blank=True, help_text=None, through='taggit.TaggedItem', to='taggit.Tag', verbose_name='tags')),
|
||||
('uploaded_by_user', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='uploaded by user')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
bases=(wagtail.wagtailsearch.index.Indexed, models.Model),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='customimage',
|
||||
name='author',
|
||||
field=models.CharField(default='', help_text='The name of the author of the work', max_length=255),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='customimage',
|
||||
name='copyright_year',
|
||||
field=models.CharField(default='', help_text='The year the image was taken', max_length=64),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='customimage',
|
||||
name='licence',
|
||||
field=models.CharField(default='', help_text='The short-form code for the licence (e.g. CC-BY)', max_length=64),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='customimage',
|
||||
name='source_url',
|
||||
field=models.URLField(default='', help_text='The URL where you can find the original of this image'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CustomRendition',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('file', models.ImageField(height_field='height', upload_to=wagtail.wagtailimages.models.get_rendition_upload_to, width_field='width')),
|
||||
('width', models.IntegerField(editable=False)),
|
||||
('height', models.IntegerField(editable=False)),
|
||||
('focal_point_key', models.CharField(blank=True, default='', editable=False, max_length=255)),
|
||||
('filter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailimages.Filter')),
|
||||
('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='renditions', to='cms_pages.CustomImage')),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='contentpage',
|
||||
name='background_image_CUSTOM',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='cms_pages.CustomImage'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='newsindexpage',
|
||||
name='background_image_CUSTOM',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='cms_pages.CustomImage'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='newspage',
|
||||
name='background_image_CUSTOM',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='cms_pages.CustomImage'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='newspage',
|
||||
name='portrait_image_CUSTOM',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='cms_pages.CustomImage'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='customrendition',
|
||||
unique_together=set([('image', 'filter', 'focal_point_key')]),
|
||||
),
|
||||
]
|
76
cms_pages/migrations/0014_auto_20160918_0358.py
Normal file
|
@ -0,0 +1,76 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.7 on 2016-09-18 03:58
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
def image_to_custom_image(apps, schema_editor):
|
||||
Image = apps.get_model("wagtailimages","Image")
|
||||
CustomImage = apps.get_model("cms_pages", "CustomImage")
|
||||
HomePage = apps.get_model("cms_pages", "HomePage")
|
||||
#tags = TaggableManager(help_text=None, blank=True, verbose_name=_('tags'))
|
||||
|
||||
keys = (
|
||||
"title", "file", "width", "height", "created_at", "uploaded_by_user",
|
||||
"focal_point_y", "focal_point_x", "focal_point_width",
|
||||
"focal_point_height", "file_size",
|
||||
)
|
||||
|
||||
customs = {}
|
||||
|
||||
for image in Image.objects.all():
|
||||
kwargs = dict((key, getattr(image, key)) for key in keys)
|
||||
custom_image = CustomImage(**kwargs)
|
||||
|
||||
# Does this actually work?!
|
||||
custom_image.tags = image.tags
|
||||
|
||||
custom_image.save()
|
||||
|
||||
customs[image.id] = custom_image
|
||||
|
||||
def swap(customs, block, key):
|
||||
im = (block.value[key])
|
||||
if im is not None:
|
||||
block.value[key] = customs[im.id]
|
||||
|
||||
# Go through the links.
|
||||
for page in HomePage.objects.all():
|
||||
for block in page.body:
|
||||
if block.block_type == "basic_content":
|
||||
swap(customs, block, "background_image")
|
||||
elif block.block_type == "keynotes":
|
||||
for keynote in block.value:
|
||||
swap(customs, keynote, "profile_image")
|
||||
page.save()
|
||||
|
||||
abstract_content_page_models = ["ContentPage", "NewsIndexPage", "NewsPage"]
|
||||
|
||||
for model in abstract_content_page_models:
|
||||
Model = apps.get_model("cms_pages", model)
|
||||
|
||||
for page in Model.objects.all():
|
||||
for block in page.body:
|
||||
if block.block_type == "floating_image" and block.value:
|
||||
block.value = customs[block.value.id]
|
||||
|
||||
if page.background_image:
|
||||
page.background_image_CUSTOM = customs[page.background_image.id]
|
||||
|
||||
if model == "NewsPage" and page.portrait_image:
|
||||
page.portrait_image_CUSTOM = customs[page.portrait_image.id]
|
||||
|
||||
page.save()
|
||||
|
||||
Image.objects.all().delete()
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cms_pages', '0013_auto_20160918_0358'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(image_to_custom_image),
|
||||
]
|
|
@ -0,0 +1,53 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.7 on 2016-09-18 04:05
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
replaces = [(b'cms_pages', '0015_auto_20160918_0402'), (b'cms_pages', '0016_auto_20160918_0403')]
|
||||
|
||||
dependencies = [
|
||||
('cms_pages', '0014_auto_20160918_0358'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='contentpage',
|
||||
name='background_image',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='newsindexpage',
|
||||
name='background_image',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='newspage',
|
||||
name='background_image',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='newspage',
|
||||
name='portrait_image',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='contentpage',
|
||||
old_name='background_image_CUSTOM',
|
||||
new_name='background_image',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='newsindexpage',
|
||||
old_name='background_image_CUSTOM',
|
||||
new_name='background_image',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='newspage',
|
||||
old_name='background_image_CUSTOM',
|
||||
new_name='background_image',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='newspage',
|
||||
old_name='portrait_image_CUSTOM',
|
||||
new_name='portrait_image',
|
||||
),
|
||||
]
|
33
cms_pages/migrations/0016_auto_20160918_0517.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.7 on 2016-09-18 05:17
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import cms_pages.models
|
||||
from django.db import migrations
|
||||
import wagtail.wagtailcore.blocks
|
||||
import wagtail.wagtailcore.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cms_pages', '0015_auto_20160918_0402_squashed_0016_auto_20160918_0403'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='contentpage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('rich_text', wagtail.wagtailcore.blocks.RichTextBlock(required=False)), ('raw_html', wagtail.wagtailcore.blocks.RawHTMLBlock(required=False)), ('floating_image', cms_pages.models.FloatingImageBlock()), ('anchor', cms_pages.models.AnchorBlock(help_text='Add a named anchor to this point in the page')), ('colophon_image_list', wagtail.wagtailcore.blocks.StructBlock([(b'do_nothing', wagtail.wagtailcore.blocks.BooleanBlock())]))]),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='newsindexpage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('rich_text', wagtail.wagtailcore.blocks.RichTextBlock(required=False)), ('raw_html', wagtail.wagtailcore.blocks.RawHTMLBlock(required=False)), ('floating_image', cms_pages.models.FloatingImageBlock()), ('anchor', cms_pages.models.AnchorBlock(help_text='Add a named anchor to this point in the page')), ('colophon_image_list', wagtail.wagtailcore.blocks.StructBlock([(b'do_nothing', wagtail.wagtailcore.blocks.BooleanBlock())]))]),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='newspage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('rich_text', wagtail.wagtailcore.blocks.RichTextBlock(required=False)), ('raw_html', wagtail.wagtailcore.blocks.RawHTMLBlock(required=False)), ('floating_image', cms_pages.models.FloatingImageBlock()), ('anchor', cms_pages.models.AnchorBlock(help_text='Add a named anchor to this point in the page')), ('colophon_image_list', wagtail.wagtailcore.blocks.StructBlock([(b'do_nothing', wagtail.wagtailcore.blocks.BooleanBlock())]))]),
|
||||
),
|
||||
]
|
|
@ -1,24 +1,40 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django import forms
|
||||
from django.http import Http404
|
||||
|
||||
from django.db import models
|
||||
from django.db.models.signals import pre_delete
|
||||
from django.dispatch import receiver
|
||||
|
||||
from django.shortcuts import render
|
||||
from django.utils.encoding import python_2_unicode_compatible
|
||||
|
||||
from modelcluster.fields import ParentalKey
|
||||
|
||||
from wagtail.wagtailadmin.edit_handlers import InlinePanel
|
||||
from wagtail.wagtailadmin.edit_handlers import FieldPanel
|
||||
from wagtail.wagtailadmin.edit_handlers import PageChooserPanel
|
||||
from wagtail.wagtailadmin.edit_handlers import StreamFieldPanel
|
||||
|
||||
from wagtail.wagtailcore import blocks
|
||||
from wagtail.wagtailimages import blocks as imageblocks
|
||||
from wagtail.wagtailcore.models import Page
|
||||
from wagtail.wagtailcore.models import Orderable
|
||||
from wagtail.wagtailcore.fields import RichTextField
|
||||
from wagtail.wagtailcore.fields import StreamField
|
||||
from wagtail.wagtailcore.url_routing import RouteResult
|
||||
|
||||
from wagtail.wagtailimages import blocks as imageblocks
|
||||
from wagtail.wagtailimages.edit_handlers import ImageChooserPanel
|
||||
from wagtail.wagtailadmin.edit_handlers import InlinePanel
|
||||
from wagtail.wagtailadmin.edit_handlers import FieldPanel
|
||||
from wagtail.wagtailadmin.edit_handlers import PageChooserPanel
|
||||
from wagtail.wagtailadmin.edit_handlers import StreamFieldPanel
|
||||
from wagtail.wagtailimages.models import AbstractImage
|
||||
from wagtail.wagtailimages.models import AbstractRendition
|
||||
from wagtail.wagtailimages.models import Image
|
||||
|
||||
from wagtail.wagtailsearch import index
|
||||
from wagtail.wagtailsnippets.models import register_snippet
|
||||
|
||||
|
||||
from symposion import schedule
|
||||
|
||||
ILLUSTRATION_ANTARCTICA = "antarctica.svg"
|
||||
ILLUSTRATION_BRIDGE = "bridge.svg"
|
||||
|
@ -45,6 +61,29 @@ ILLUSTRATION_TYPES = (
|
|||
)
|
||||
|
||||
|
||||
class ExternalLinksBlock(blocks.StructBlock):
|
||||
|
||||
class Meta:
|
||||
template = "cms_pages/home_page_blocks/external_link.html"
|
||||
|
||||
EXTERNAL_LINK_TWITTER = "twitter"
|
||||
EXTERNAL_LINK_FACEBOOK = "facebook"
|
||||
EXTERNAL_LINK_GENERIC = "generic"
|
||||
|
||||
EXTERNAL_LINK_TYPES = (
|
||||
(EXTERNAL_LINK_TWITTER, "Twitter"),
|
||||
(EXTERNAL_LINK_FACEBOOK, "Facebook"),
|
||||
(EXTERNAL_LINK_GENERIC, "Generic URL"),
|
||||
)
|
||||
|
||||
alt = blocks.CharBlock(required=True)
|
||||
icon = blocks.ChoiceBlock(
|
||||
choices=EXTERNAL_LINK_TYPES,
|
||||
required=True,
|
||||
)
|
||||
url = blocks.URLBlock(required=True)
|
||||
|
||||
|
||||
class BasicContentBlock(blocks.StructBlock):
|
||||
|
||||
class Meta:
|
||||
|
@ -57,16 +96,6 @@ class BasicContentBlock(blocks.StructBlock):
|
|||
(PANEL_WHITE_RIGHT, "Right-aligned image, white background"),
|
||||
)
|
||||
|
||||
EXTERNAL_LINK_TWITTER = "twitter"
|
||||
EXTERNAL_LINK_FACEBOOK = "facebook"
|
||||
EXTERNAL_LINK_GENERIC = "generic"
|
||||
|
||||
EXTERNAL_LINK_TYPES = (
|
||||
(EXTERNAL_LINK_TWITTER, "Twitter"),
|
||||
(EXTERNAL_LINK_FACEBOOK, "Facebook"),
|
||||
(EXTERNAL_LINK_GENERIC, "Generic URL"),
|
||||
)
|
||||
|
||||
panel_type = blocks.ChoiceBlock(
|
||||
choices=PANEL_TYPES,
|
||||
required=True,
|
||||
|
@ -86,22 +115,45 @@ class BasicContentBlock(blocks.StructBlock):
|
|||
("page", blocks.PageChooserBlock()),
|
||||
("title", blocks.CharBlock(required=True)),
|
||||
])
|
||||
external_links = blocks.ListBlock(
|
||||
blocks.StructBlock([
|
||||
("alt", blocks.CharBlock(required=True)),
|
||||
("icon", blocks.ChoiceBlock(
|
||||
choices=EXTERNAL_LINK_TYPES,
|
||||
required=True,
|
||||
)),
|
||||
("url", blocks.URLBlock(required=True)
|
||||
)])
|
||||
external_links = blocks.ListBlock(ExternalLinksBlock)
|
||||
|
||||
|
||||
class PresentationChooserBlock(blocks.ChooserBlock):
|
||||
target_model = schedule.models.Presentation
|
||||
widget = forms.Select
|
||||
|
||||
|
||||
class KeynoteSpeakerBlock(blocks.StructBlock):
|
||||
|
||||
class Meta:
|
||||
template = "cms_pages/home_page_blocks/keynote_speaker.html"
|
||||
|
||||
name = blocks.CharBlock(required=True)
|
||||
body = blocks.RichTextBlock(required=True)
|
||||
links = blocks.ListBlock(ExternalLinksBlock)
|
||||
profile_image = imageblocks.ImageChooserBlock(
|
||||
required=False,
|
||||
help_text="Profile image for the speaker",
|
||||
)
|
||||
presentation = PresentationChooserBlock(
|
||||
help_text="This speaker's presentation",
|
||||
)
|
||||
|
||||
|
||||
class KeynotesBlock(blocks.StructBlock):
|
||||
|
||||
class Meta:
|
||||
template = "cms_pages/home_page_blocks/keynotes.html"
|
||||
|
||||
heading = blocks.CharBlock(required=True)
|
||||
speakers = blocks.ListBlock(KeynoteSpeakerBlock)
|
||||
|
||||
|
||||
class HomePage(Page):
|
||||
|
||||
body = StreamField([
|
||||
("basic_content", BasicContentBlock()),
|
||||
# TODO: keynotes
|
||||
("keynotes", KeynotesBlock()),
|
||||
# TODO: other bits
|
||||
])
|
||||
|
||||
|
@ -111,15 +163,46 @@ class HomePage(Page):
|
|||
|
||||
|
||||
# Content pages
|
||||
|
||||
class FloatingImageBlock(imageblocks.ImageChooserBlock):
|
||||
|
||||
class Meta:
|
||||
template = "cms_pages/content_page_blocks/floating_image.html"
|
||||
|
||||
|
||||
class AnchorBlock(blocks.CharBlock):
|
||||
|
||||
class Meta:
|
||||
template = "cms_pages/content_page_blocks/anchor.html"
|
||||
|
||||
|
||||
class ColophonImageListBlock(blocks.StructBlock):
|
||||
|
||||
class Meta:
|
||||
template = "cms_pages/content_page_blocks/colophon.html"
|
||||
|
||||
do_nothing = blocks.BooleanBlock(required=False)
|
||||
|
||||
|
||||
class AbstractContentPage(Page):
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
intro = models.CharField(max_length=250)
|
||||
body = RichTextField(blank=True)
|
||||
|
||||
body = StreamField([
|
||||
("rich_text", blocks.RichTextBlock(required=False)),
|
||||
("raw_html", blocks.RawHTMLBlock(required=False)),
|
||||
("floating_image", FloatingImageBlock()),
|
||||
("anchor", AnchorBlock(
|
||||
help_text="Add a named anchor to this point in the page"
|
||||
)),
|
||||
("colophon_image_list", ColophonImageListBlock()),
|
||||
])
|
||||
|
||||
background_image = models.ForeignKey(
|
||||
'wagtailimages.Image',
|
||||
'CustomImage',
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.SET_NULL,
|
||||
|
@ -134,7 +217,7 @@ class AbstractContentPage(Page):
|
|||
content_panels = Page.content_panels + [
|
||||
ImageChooserPanel('background_image'),
|
||||
FieldPanel('intro'),
|
||||
FieldPanel('body', classname="full")
|
||||
StreamFieldPanel('body')
|
||||
]
|
||||
|
||||
|
||||
|
@ -195,7 +278,7 @@ class NewsPage(AbstractContentPage):
|
|||
date = models.DateField("Post date")
|
||||
|
||||
portrait_image = models.ForeignKey(
|
||||
'wagtailimages.Image',
|
||||
'CustomImage',
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.SET_NULL,
|
||||
|
@ -210,3 +293,93 @@ class NewsPage(AbstractContentPage):
|
|||
FieldPanel('date'),
|
||||
ImageChooserPanel('portrait_image'),
|
||||
]
|
||||
|
||||
|
||||
@register_snippet
|
||||
@python_2_unicode_compatible
|
||||
class ScheduleHeaderParagraph(models.Model):
|
||||
''' Used to show the paragraph in the header for a schedule page. '''
|
||||
schedule = models.OneToOneField(
|
||||
schedule.models.Schedule,
|
||||
related_name="header_paragraph",
|
||||
)
|
||||
text = models.TextField()
|
||||
|
||||
panels = [
|
||||
FieldPanel('schedule'),
|
||||
FieldPanel('text'),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return str(self.schedule)
|
||||
|
||||
|
||||
@register_snippet
|
||||
@python_2_unicode_compatible
|
||||
class NamedHeaderParagraph(models.Model):
|
||||
''' Used to show the paragraph in the header for a schedule page. '''
|
||||
name = models.CharField(
|
||||
max_length=64,
|
||||
help_text="Pass this name to header_paragraph tag.",
|
||||
)
|
||||
text = models.TextField()
|
||||
|
||||
panels = [
|
||||
FieldPanel('name'),
|
||||
FieldPanel('text'),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return str(self.name)
|
||||
|
||||
|
||||
# Image models -- copied from wagtail docs
|
||||
|
||||
|
||||
class CustomImage(AbstractImage):
|
||||
# Add any extra fields to image here
|
||||
|
||||
# eg. To add a caption field:
|
||||
copyright_year = models.CharField(
|
||||
max_length=64,
|
||||
help_text="The year the image was taken",
|
||||
)
|
||||
licence = models.CharField(
|
||||
max_length=64,
|
||||
help_text="The short-form code for the licence (e.g. CC-BY)",
|
||||
)
|
||||
author = models.CharField(
|
||||
max_length=255,
|
||||
help_text="The name of the author of the work",
|
||||
)
|
||||
source_url = models.URLField(
|
||||
help_text="The URL where you can find the original of this image",
|
||||
)
|
||||
|
||||
admin_form_fields = Image.admin_form_fields + (
|
||||
"copyright_year",
|
||||
"licence",
|
||||
"author",
|
||||
"source_url",
|
||||
)
|
||||
|
||||
|
||||
class CustomRendition(AbstractRendition):
|
||||
image = models.ForeignKey(CustomImage, related_name='renditions')
|
||||
|
||||
class Meta:
|
||||
unique_together = (
|
||||
('image', 'filter', 'focal_point_key'),
|
||||
)
|
||||
|
||||
|
||||
# Delete the source image file when an image is deleted
|
||||
@receiver(pre_delete, sender=CustomImage)
|
||||
def image_delete(sender, instance, **kwargs):
|
||||
instance.file.delete(False)
|
||||
|
||||
|
||||
# Delete the rendition image file when a rendition is deleted
|
||||
@receiver(pre_delete, sender=CustomRendition)
|
||||
def rendition_delete(sender, instance, **kwargs):
|
||||
instance.file.delete(False)
|
||||
|
|
|
@ -15,6 +15,13 @@ DATABASES = {
|
|||
}
|
||||
}
|
||||
|
||||
CACHES = {
|
||||
'default': {
|
||||
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ALLOWED_HOSTS = []
|
||||
|
||||
# Local time zone for this installation. Choices can be found here:
|
||||
|
@ -26,9 +33,12 @@ ALLOWED_HOSTS = []
|
|||
# system time zone.
|
||||
TIME_ZONE = "UTC"
|
||||
|
||||
# The date format for this installation
|
||||
DATE_FORMAT = "j F Y"
|
||||
|
||||
# Language code for this installation. All choices can be found here:
|
||||
# http://www.i18nguy.com/unicode/language-identifiers.html
|
||||
LANGUAGE_CODE = "en-us"
|
||||
LANGUAGE_CODE = "en-au"
|
||||
|
||||
SITE_ID = int(os.environ.get("SITE_ID", 1))
|
||||
|
||||
|
@ -235,6 +245,7 @@ THEME_CONTACT_EMAIL = "team@hobart.lca2017.org"
|
|||
AUTHENTICATION_BACKENDS = [
|
||||
"symposion.teams.backends.TeamPermissionsBackend",
|
||||
"account.auth_backends.UsernameAuthenticationBackend",
|
||||
"account.auth_backends.EmailAuthenticationBackend",
|
||||
]
|
||||
|
||||
CONFERENCE_ID = 1
|
||||
|
@ -249,6 +260,7 @@ PROPOSAL_FORMS = {
|
|||
# Wagtail config
|
||||
WAGTAIL_SITE_NAME = 'linux.conf.au 2017'
|
||||
WAGTAIL_APPEND_SLASH = True
|
||||
WAGTAILIMAGES_IMAGE_MODEL = 'cms_pages.CustomImage'
|
||||
|
||||
ATTENDEE_PROFILE_FORM = "pinaxcon.registrasion.forms.ProfileForm"
|
||||
|
||||
|
|
23
pinaxcon/templates/cms_pages/abstract_content_page.html
Normal file
|
@ -0,0 +1,23 @@
|
|||
{% extends "lca2017/content_page.html" %}
|
||||
{% load staticfiles %}
|
||||
{% load wagtailcore_tags %}
|
||||
{% load wagtailimages_tags %}
|
||||
{% load lca2017_tags %}
|
||||
|
||||
{% load sitetree %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block body_class %}template-content-page{% endblock %}
|
||||
|
||||
{% block head_title %}{{ page.title }}{% endblock %}
|
||||
|
||||
{% if page.background_image %}
|
||||
{% block header_background_image %}{% image page.background_image width-2000 as background_image %}{{ background_image.url }}{% endblock %}
|
||||
{% endif %}
|
||||
{% block header_title %}{{ page.title }}{% endblock %}
|
||||
{% block header_paragraph %}{{ page.intro }}{% endblock %}
|
||||
{% block header_inset_image %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{{ page.body }}
|
||||
{% endblock %}
|
|
@ -1,21 +1,9 @@
|
|||
{% extends "site_base_wagtail.html" %}
|
||||
{% load staticfiles %}
|
||||
{% load wagtailcore_tags %}
|
||||
{% extends "cms_pages/abstract_content_page.html" %}
|
||||
{% load lca2017_tags %}
|
||||
|
||||
{% load sitetree %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block body_class %}template-blogpage{% endblock %}
|
||||
{% block body_class %}template-content-page{% endblock %}
|
||||
|
||||
{% block head_title %}{{ page.title }}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% block content %}
|
||||
{% include "cms_pages/content_page_header_panel.html" %}
|
||||
<div class="l-content-page">
|
||||
<div class="l-content-page--richtext">
|
||||
{{ page.body|richtext }}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
{% block header_inset_image %}{% illustration page.inset_illustration %}{% endblock %}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
<a name="{{ value }}"></a>
|
|
@ -0,0 +1,10 @@
|
|||
{% load lca2017_tags %}
|
||||
|
||||
<ul>
|
||||
{% all_images as images %}
|
||||
{% for image in images %}
|
||||
<li>
|
||||
<a href="{{ image.source_url }}">{{ image.title }}</a> – ©{{ image.copyright_year }} {{ image.licence }} by {{ image.author }}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
|
@ -0,0 +1,4 @@
|
|||
{% load wagtailimages_tags %}
|
||||
|
||||
{% image value width-800 as img %}
|
||||
{% include "lca2017/_right_floating_image.html" with image_url=img.url %}
|
|
@ -1,33 +0,0 @@
|
|||
{% load staticfiles %}
|
||||
{% load wagtailimages_tags %}
|
||||
|
||||
<div class="panel panel__compact panel__bg">
|
||||
{% if page.background_image %}
|
||||
{% image page.background_image width-2000 as background_image %}
|
||||
<div style="background-image: url('{{ background_image.url }}');" class="panel--bg"></div>
|
||||
{% else %}
|
||||
<div class="panel--bg"></div>
|
||||
{% endif %}
|
||||
<div class="panel--content">
|
||||
<div class="panel--2-3">
|
||||
<h2>{{ page.title }}</h2>
|
||||
<p class="lede">{{ page.intro }}</p>
|
||||
</div>
|
||||
{% if page.inset_illustration or page.portrait_image %}
|
||||
<div class="panel--1-3">
|
||||
{% if page.inset_illustration %}
|
||||
<div class="illustration">
|
||||
<img
|
||||
src="{% static 'lca2017/images/svgs/illustrations/' %}{{ page.inset_illustration }}"
|
||||
/>
|
||||
</div>
|
||||
{% elif page.portrait_image %}
|
||||
<div class="portrait">
|
||||
{% image page.portrait_image width-640 as portrait_image %}
|
||||
<div style="background-image: url('{{ portrait_image.url }}');" class="portrait--img"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
|
@ -8,9 +8,7 @@
|
|||
<a href="{{ value.link.page.url }}" class="btn">{{ value.link.title }}</a>
|
||||
{% endif %}
|
||||
{% for link in value.external_links %}
|
||||
<a href="{{ link.url }}" title="{{ link.alt }}" class="btn-svg">
|
||||
{% include "cms_pages/home_page_blocks/btn_svg.html" %}
|
||||
</a>
|
||||
{{ link }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
<a href="{{ value.url }}" title="{{ value.alt }}" class="btn-svg">
|
||||
{% include "cms_pages/home_page_blocks/btn_svg.html" with link=value %}
|
||||
</a>
|
|
@ -0,0 +1,25 @@
|
|||
{% load wagtailcore_tags %}
|
||||
{% load wagtailimages_tags %}
|
||||
|
||||
{% image value.profile_image width-800 as profile_image %}
|
||||
<div class="panel panel__compact">
|
||||
<div class="panel--content">
|
||||
<div class="panel--1-3">
|
||||
<div class="portrait">
|
||||
<div style="background-image: url('{{ profile_image.url }}');" class="portrait--img"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel--2-3">
|
||||
<h3>{{ value.name }}</h3>
|
||||
|
||||
{{ value.body }}
|
||||
|
||||
<div class="btn-group">
|
||||
<a href="{% url "schedule_presentation_detail" value.presentation.id %}" class="btn">Read more</a>
|
||||
{% for link in value.links %}
|
||||
{{ link }}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
12
pinaxcon/templates/cms_pages/home_page_blocks/keynotes.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
<div class="panel panel__compact">
|
||||
<div class="panel--content">
|
||||
<div class="panel--1-3"></div>
|
||||
<div class="panel--2-3">
|
||||
<h2 class="panel--section-title">{{ value.heading }}</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% for speaker in value.speakers %}
|
||||
{{ speaker }}
|
||||
{% endfor %}
|
|
@ -1,47 +1,45 @@
|
|||
{% extends "site_base_wagtail.html" %}
|
||||
{% extends "cms_pages/abstract_content_page.html" %}
|
||||
|
||||
{% load staticfiles %}
|
||||
{% load wagtailcore_tags %}
|
||||
{% load wagtailimages_tags %}
|
||||
{% load lca2017_tags %}
|
||||
|
||||
{% load sitetree %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block body_class %}template-blogpage{% endblock %}
|
||||
|
||||
{% block head_title %}{{ page.title }}{% endblock %}
|
||||
{% block body_class %}template-news-index{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% block content %}
|
||||
{% include "cms_pages/content_page_header_panel.html" %}
|
||||
{% block inset_image_base %}{% endblock %}
|
||||
|
||||
{% if page.child_pages %}
|
||||
{% for item in page.child_pages %}
|
||||
<div class="panel panel__compact">
|
||||
<div class="panel--content">
|
||||
<div class="panel--1-3">
|
||||
<div class="portrait">
|
||||
{% image item.portrait_image width-640 as portrait_image %}
|
||||
<div style="background-image: url('{{ portrait_image.url }}');" class="portrait--img"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel--2-3">
|
||||
<h2>{{ item.title }}</h2>
|
||||
<p class="lede"><em>{{ item.date|date:"j F Y" }}</em> – {{ item.intro }}</p>
|
||||
<a href="{{ item.url }}" class="btn">Read more</a>
|
||||
{% comment %}We use panels here, so don't need to wrap in a text block{% endcomment %}
|
||||
{% block content_base %}
|
||||
{% if page.child_pages %}
|
||||
{% for item in page.child_pages %}
|
||||
<div class="panel panel__compact">
|
||||
<div class="panel--content">
|
||||
<div class="panel--1-3">
|
||||
<div class="portrait">
|
||||
{% image item.portrait_image width-640 as portrait_image %}
|
||||
<div style="background-image: url('{{ portrait_image.url }}');" class="portrait--img"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel--2-3">
|
||||
<h2>{{ item.title }}</h2>
|
||||
<p class="lede"><em>{{ item.date|date:"j F Y" }}</em> – {{ item.intro }}</p>
|
||||
<a href="{{ item.url }}" class="btn">Read more</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<div class="panel panel__compact"></div>
|
||||
{% endif %}
|
||||
|
||||
<div class="panel panel__compact">
|
||||
<div class="panel--content">
|
||||
<h3>Subscribe</h3>
|
||||
<p><a class="btn" href="rss">View as RSS</a></p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<div class="panel panel__compact"></div>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
<div class="panel panel__compact">
|
||||
<div class="panel--content">
|
||||
<h3>Subscribe</h3>
|
||||
<p><a class="btn" href="rss">View as RSS</a></p>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
{{ item.intro|richtext|force_escape }}
|
||||
</p>
|
||||
<p>
|
||||
{{ item.body|richtext|force_escape }}
|
||||
{{ item.body|force_escape }}
|
||||
</p>
|
||||
|
||||
</description>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{% extends "site_base_wagtail.html" %}
|
||||
{% extends "cms_pages/abstract_content_page.html" %}
|
||||
|
||||
{% load wagtailcore_tags %}
|
||||
{% load wagtailimages_tags %}
|
||||
|
@ -6,18 +6,15 @@
|
|||
{% load sitetree %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block body_class %}template-blogpage{% endblock %}
|
||||
{% block body_class %}template-newspage{% endblock %}
|
||||
|
||||
{% block head_title %}{{ page.title }}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% block content %}
|
||||
{% include "cms_pages/content_page_header_panel.html" %}
|
||||
<div class="l-content-page">
|
||||
<div class="l-content-page--richtext">
|
||||
<p><em>{{ page.date|date:"j F Y" }}</em></p>
|
||||
{{ page.body|richtext }}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% if page.portrait_image %}
|
||||
{% block header_inset_image %}{% image page.portrait_image width-640 as portrait_image %}{{ portrait_image.url }}{% endblock %}
|
||||
{% endif %}
|
||||
|
||||
{% block content %}
|
||||
<p><em>{{ page.date|date:"j F Y" }}</em></p>
|
||||
{{ page.body }}
|
||||
{% endblock %}
|
||||
|
|
5
pinaxcon/templates/lca2017/_right_floating_image.html
Normal file
|
@ -0,0 +1,5 @@
|
|||
<div class="right-floating-image" >
|
||||
<div class="portrait">
|
||||
<div style="background-image: url('{{ image_url }}');" class="portrait--img"></div>
|
||||
</div>
|
||||
</div>
|
50
pinaxcon/templates/lca2017/content_page.html
Normal file
|
@ -0,0 +1,50 @@
|
|||
{% extends "site_base_wagtail.html" %}
|
||||
{% load staticfiles %}
|
||||
{% load wagtailcore_tags %}
|
||||
|
||||
{% load lca2017_tags %}
|
||||
|
||||
|
||||
{% load sitetree %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block body_class %}template-content-page{% endblock %}
|
||||
|
||||
{% block head_title %}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% block heading_panel %}
|
||||
<div class="panel panel__compact panel__bg">
|
||||
|
||||
<div style="background-image: url('{% block header_background_image %}{% endblock %}');" class="panel--bg"></div>
|
||||
|
||||
<div class="panel--content">
|
||||
<div class="panel--2-3">
|
||||
<h2>{% block header_title %}{% endblock %}</h2>
|
||||
<p class="lede">{% block header_paragraph %}{% endblock %}</p>
|
||||
</div>
|
||||
{% block header_inset_image_base %}
|
||||
<div class="panel--1-3">
|
||||
<div class="portrait">
|
||||
<div style="background-image: url('{% block header_inset_image %}{% endblock %}');" class="portrait--img"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content_base %}
|
||||
<div class="l-content-page">
|
||||
<div class="l-content-page--richtext">
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_script %}
|
||||
<script src="{% static 'js/site-92ae8d0d6c.js' %}" type="text/javascript"></script>
|
||||
{% endblock %}
|
|
@ -92,25 +92,26 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block footer_base %}
|
||||
<!-- https://gist.github.com/geedmo/5682742-->
|
||||
<footer class="l-footer l-footer__alt">
|
||||
{% block footer %}
|
||||
{% comment %}
|
||||
<div class="l-footer--text">
|
||||
<h3>Sponsors</h3>
|
||||
<p class="lede">Magna morbi aliquet commodo arcu odio dui imperdiet blandit est.
|
||||
</p><a href="#" class="btn">See sponsors</a>
|
||||
</div>
|
||||
<div class="l-footer--logos">
|
||||
<img src="{% static 'lca2017/images/HPE.jpg' %}" role="presentation">
|
||||
<img src="{% static 'lca2017/images/IBM.jpg' %}" role="presentation">
|
||||
</div>
|
||||
{% endcomment %}
|
||||
<!-- https://gist.github.com/geedmo/5682742-->
|
||||
<footer class="l-footer l-footer__alt">
|
||||
{% block footer %}
|
||||
<div class="l-footer--text">
|
||||
<h3>Sponsors</h3>
|
||||
<p class="lede">We thank our Emperor Penguin sponsors for their
|
||||
generous contribution to linux.conf.au 2017.</p>
|
||||
<a href="#" class="btn btn__white">Other Sponsors</a>
|
||||
</div>
|
||||
<div class="l-footer--logos">
|
||||
<img src="{% static 'lca2017/images/HPE.svg' %}" class="sponsor-logo" role="presentation">
|
||||
<br />
|
||||
<img src="{% static 'lca2017/images/IBM.svg' %}" class="sponsor-logo" role="presentation">
|
||||
<br />
|
||||
</div>
|
||||
|
||||
<p class="lede">©2016 Linux Australia and linux.conf.au 2017. Linux is a registered trademark of Linus Torvalds. Site design by <a href="http://takeflight.com.au" >Takeflight</a>. Image credits can be found on our <a href="/about/colophon">Colophon</a>.</p>
|
||||
<p class="lede">©2016 Linux Australia and linux.conf.au 2017. Linux is a registered trademark of Linus Torvalds. Site design by <a href="http://takeflight.com.au" >Takeflight</a>. Image credits can be found on our <a href="/about/colophon">Colophon</a>.</p>
|
||||
|
||||
{% endblock %}
|
||||
</footer>
|
||||
{% endblock %}
|
||||
</footer>
|
||||
{% endblock %}
|
||||
</main>
|
||||
{% block scripts %}
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
<input type="submit" name="result_submit" value="undecide" class="btn btn-default btn-xs" />
|
||||
</div>
|
||||
</div>
|
||||
<input type="submit" name="publish_changes" value="Publish Changes" class="btn btn-success" />
|
||||
{% else %}
|
||||
{% if proposal.result.status == "rejected" %}
|
||||
<a class="btn dropdown-toggle btn-danger" data-toggle="dropdown" href="#">Rejected <span class="caret"></span></a>
|
||||
|
|
|
@ -1,41 +1,41 @@
|
|||
<table class="calendar table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="time"> </th>
|
||||
{% for room in timetable.rooms %}
|
||||
<th>{{ room.name }}</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for row in timetable %}
|
||||
<tr>
|
||||
<td class="time">{{ row.time|date:"h:iA" }}</td>
|
||||
{% for slot in row.slots %}
|
||||
<td class="slot slot-{{ slot.kind.label }}" colspan="{{ slot.colspan }}" rowspan="{{ slot.rowspan }}">
|
||||
{% if slot.kind.label == "talk" or slot.kind.label == "tutorial" %}
|
||||
{% if not slot.content %}
|
||||
{% else %}
|
||||
<span class="title">
|
||||
<a href="{% url "schedule_presentation_detail" slot.content.pk %}">{{ slot.content.title }}</a>
|
||||
</span>
|
||||
<span class="speaker">
|
||||
{{ slot.content.speakers|join:", " }}
|
||||
</span>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if slot.content_override.raw %}
|
||||
{{ slot.content_override.rendered|safe }}
|
||||
{% else %}
|
||||
{{ slot.kind.label }}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
{% endfor %}
|
||||
{% if forloop.last %}
|
||||
<td colspan="{{ timetable.rooms|length }}"></td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="time"> </th>
|
||||
{% for room in timetable.rooms %}
|
||||
<th>{{ room.name }}</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for row in timetable %}
|
||||
<tr>
|
||||
<td class="time">{{ row.time|date:"h:iA" }}</td>
|
||||
{% for slot in row.slots %}
|
||||
<td class="slot slot-{{ slot.kind.label }}" colspan="{{ slot.colspan }}" rowspan="{{ slot.rowspan }}">
|
||||
{% if slot.kind.label == "talk" or slot.kind.label == "tutorial" %}
|
||||
{% if not slot.content %}
|
||||
{% else %}
|
||||
<span class="title">
|
||||
<a href="{% url "schedule_presentation_detail" slot.content.pk %}">{{ slot.content.title }}</a>
|
||||
</span>
|
||||
<span class="speaker">
|
||||
{{ slot.content.speakers|join:", " }}
|
||||
</span>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if slot.content_override.raw %}
|
||||
{{ slot.content_override.rendered|safe }}
|
||||
{% else %}
|
||||
{{ slot.kind.label }}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
{% if forloop.last %}
|
||||
<td colspan="{{ timetable.rooms|length }}"></td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
@ -1,31 +1,56 @@
|
|||
{% extends "site_base.html" %}
|
||||
{% extends "symposion/schedule/public_base.html" %}
|
||||
|
||||
{% load lca2017_tags %}
|
||||
{% load sitetree %}
|
||||
{% load staticfiles %}
|
||||
{% load thumbnail %}
|
||||
|
||||
{% block head_title %}Presentation: {{ presentation.title }}{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{% sitetree_breadcrumbs from "main" %}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% if presentation.slot %}
|
||||
<h4>
|
||||
{{ presentation.slot.day.date|date:"l" }}
|
||||
{{ presentation.slot.start}}–{{ presentation.slot.end }}
|
||||
</h4>
|
||||
{% endif %}
|
||||
<h2>{{ presentation.title }}</h2>
|
||||
{% block header_inset_image %}{% with audience=presentation.proposal.get_target_audience_display %}{% if audience == "Business" %}{% illustration "falls.svg" %}{% elif audience == "Community" %}{% illustration "bridge.svg" %}{% elif audience == "Developer"%}{% illustration "hobart.svg" %}{% elif audience == "User" %}{% illustration "antarctica.svg" %}{% else %}{% illustration "casino.svg" %}{% endif %}{% endwith %}{% endblock %}
|
||||
|
||||
<h4>
|
||||
{% for speaker in presentation.speakers %}
|
||||
<a href="{% url "speaker_profile" speaker.pk %}">{{ speaker }}</a>{% if not forloop.last %}, {% endif %}{% endfor %}
|
||||
</h4>
|
||||
{% block header_background_image %}{% presentation_bg_number presentation 4 as bg_number %}{% if bg_number == 0 %}{% static "lca2017/images/mt_anne_bg_optimised.jpg" %}{% elif bg_number == 1 %}{% static "lca2017/images/the_neck_bg_optimised.jpg" %}{% elif bg_number == 2 %}{% static "lca2017/images/snug_falls_bg_optimised.jpg" %}{% elif bg_number == 3 %}{% static "lca2017/images/sleepy_bay_bg_optimised.jpg" %}{% endif %}{% endblock %}
|
||||
|
||||
<dl class="dl-horizontal">
|
||||
<dt>Audience level:</dt>
|
||||
<dd style="margin-bottom: 0;">{{ presentation.proposal.get_audience_level_display }}</dd>
|
||||
</dl>
|
||||
{% block header_title %}{{ presentation.title }}{% endblock %}
|
||||
|
||||
{% block header_paragraph %}
|
||||
<p>
|
||||
Presented by
|
||||
{% for speaker in presentation.speakers %}
|
||||
<a href="{% url "speaker_profile" speaker.pk %}">{{ speaker }}</a>{% if not forloop.last %}, {% endif %}
|
||||
{% endfor %}
|
||||
<br />
|
||||
{% if presentation.slot %}
|
||||
{{ presentation.slot.day.date|date:"l" }}
|
||||
{{ presentation.slot.start}}–{{ presentation.slot.end }}
|
||||
<br />
|
||||
{% endif %}
|
||||
{% if presentation.proposal.get_target_audience_display %}
|
||||
<strong>Target audience:</strong>
|
||||
{{ presentation.proposal.get_target_audience_display }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% if presentation.unpublish %}
|
||||
<p><strong>Presentation not published.</strong></p>
|
||||
{% endif %}
|
||||
|
||||
<h2>Abstract</h2>
|
||||
|
||||
<div class="abstract">{{ presentation.abstract_html|safe }}</div>
|
||||
|
||||
<h2>Presented by</h2>
|
||||
{% for speaker in presentation.speakers %}
|
||||
{% speaker_photo speaker 512 as speaker_photo_url %}
|
||||
{% include "lca2017/_right_floating_image.html" with image_url=speaker_photo_url %}
|
||||
|
||||
<h3><a href="{% url "speaker_profile" speaker.pk %}">{{ speaker }}</a></h3>
|
||||
{{ speaker.biography_html|safe}}
|
||||
|
||||
{% endfor %}
|
||||
|
||||
<h3>Abstract</h3>
|
||||
|
||||
<div class="abstract">{{ presentation.abstract_html|safe }}</div>
|
||||
{% endblock %}
|
||||
|
|
5
pinaxcon/templates/symposion/schedule/public_base.html
Normal file
|
@ -0,0 +1,5 @@
|
|||
{% extends "lca2017/content_page.html" %}
|
||||
|
||||
{% load staticfiles %}
|
||||
|
||||
{% block header_background_image %}{% static "lca2017/images/hobart_bg_optimised.jpg" %}{% endblock %}
|
|
@ -1,34 +1,35 @@
|
|||
{% extends "site_base_wagtail.html" %}
|
||||
{% extends "symposion/schedule/public_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
{% load pinax_boxes_tags %}
|
||||
{% load cache %}
|
||||
{% load lca2017_tags %}
|
||||
|
||||
{% block head_title %}Conference Schedule{% endblock %}
|
||||
{% block header_title %}Conference Schedule{% endblock %}
|
||||
{% block header_paragraph %}{% header_paragraph "conference_schedule" %}{% endblock %}
|
||||
{% block header_inset_image %}{% illustration "cradle.svg" %}{% endblock %}
|
||||
|
||||
{% block body_class %}full{% endblock %}
|
||||
|
||||
{% block right %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div class="l-content-page">
|
||||
<div class="l-content-page--richtext">
|
||||
<div class="rich-text">
|
||||
{% block content %}
|
||||
|
||||
<div class="page-head">
|
||||
<h1>Conference Schedule</h1>
|
||||
{% block breadcrumbs %}{% endblock %}
|
||||
</div>
|
||||
<div class="page-head">
|
||||
{% block breadcrumbs %}{% endblock %}
|
||||
</div>
|
||||
|
||||
{% for section in sections %}
|
||||
{% cache 600 "schedule-table" section.schedule.section %}
|
||||
{% for timetable in section.days %}
|
||||
<h3>{{ section.schedule.section.name }} — {{ timetable.day.date }}</h3>
|
||||
{% include "symposion/schedule/_grid.html" %}
|
||||
{% endfor %}
|
||||
{% endcache %}
|
||||
{% endfor %}
|
||||
{% for section in sections %}
|
||||
{% cache 600 "schedule-table" section.schedule.section %}
|
||||
{% for timetable in section.days %}
|
||||
<h3>{{ section.schedule.section.name }} — {{ timetable.day.date|date:"l" }}, {{ timetable.day.date }}</h3>
|
||||
<br />
|
||||
{% include "symposion/schedule/_grid.html" %}
|
||||
<br />
|
||||
{% endfor %}
|
||||
{% endcache %}
|
||||
{% endfor %}
|
||||
|
||||
</div></div></div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,35 +1,29 @@
|
|||
{% extends "symposion/schedule/base.html" %}
|
||||
{% extends "symposion/schedule/public_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
{% load pinax_boxes_tags %}
|
||||
{% load cache %}
|
||||
{% load lca2017_tags %}
|
||||
{% load sitetree %}
|
||||
|
||||
{% block head_title %}Conference Schedule{% endblock %}
|
||||
{% block head_title %}{{ schedule.section }} Schedule{% endblock %}
|
||||
{% block header_title %}{{ schedule.section }} Schedule{% endblock%}
|
||||
{% block header_paragraph %}{{ schedule.header_paragraph.text }}{% endblock%}
|
||||
{% block header_inset_image %}{% illustration "devil.svg" %}{% endblock %}
|
||||
|
||||
{% block body_class %}full{% endblock %}
|
||||
|
||||
{% block right %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="l-content-page">
|
||||
<div class="l-content-page--richtext">
|
||||
<div class="rich-text">
|
||||
<div class="page-head">
|
||||
{% block breadcrumbs %}{% sitetree_breadcrumbs from "main" %}{% endblock %}
|
||||
</div>
|
||||
|
||||
<div class="page-head">
|
||||
<h1>{{ schedule.section }} Schedule</h1>
|
||||
{% block breadcrumbs %}{% sitetree_breadcrumbs from "main" %}{% endblock %}
|
||||
</div>
|
||||
{% box "schedule_top_"|add:schedule.section.name|slugify %}
|
||||
|
||||
{% cache 600 "schedule-table" schedule.section %}
|
||||
{% for timetable in days %}
|
||||
<h3>{{ timetable.day.date }}</h3>
|
||||
{% include "symposion/schedule/_grid.html" %}
|
||||
{% endfor %}
|
||||
{% endcache %}
|
||||
|
||||
{% box "schedule_bottom" %}
|
||||
</div></div></div>
|
||||
{% cache 600 "schedule-table" schedule.section %}
|
||||
{% for timetable in days %}
|
||||
<h3>{{ timetable.day.date|date:"l" }}, {{ timetable.day.date }}</h3>
|
||||
<br />
|
||||
{% include "symposion/schedule/_grid.html" %}
|
||||
<br />
|
||||
{% endfor %}
|
||||
{% endcache %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,56 +1,33 @@
|
|||
{% extends "site_base_wagtail.html" %}
|
||||
{% extends "symposion/schedule/public_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
{% load cache %}
|
||||
{% load lca2017_tags %}
|
||||
{% load sitetree %}
|
||||
|
||||
{% block head_title %}Presentation Listing{% endblock %}
|
||||
|
||||
{% block extra_head %}
|
||||
<style>
|
||||
.presentation {
|
||||
|
||||
}
|
||||
.presentation h3 {
|
||||
line-height: 1.1em;
|
||||
font-weight: bold;
|
||||
}
|
||||
.presentation h4 {
|
||||
|
||||
}
|
||||
.presentation p {
|
||||
margin-bottom: 0.5em;
|
||||
line-height: 1.2em;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
{% block header_title %}{{ schedule.section.name }} List{% endblock %}
|
||||
{% block header_paragraph %}{{ schedule.header_paragraph.text }}{% endblock%}
|
||||
{% block header_inset_image %}{% illustration "lavender.svg" %}{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}{% sitetree_breadcrumbs from "main" %}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div class="l-content-page">
|
||||
<div class="l-content-page--richtext">
|
||||
<div class="rich-text">
|
||||
|
||||
<h2>Accepted {{ schedule.section.name }}</h2>
|
||||
{% cache 600 "schedule-list" schedule.section.name %}
|
||||
{% for presentation in presentations %}
|
||||
<div class="row">
|
||||
<div class="col-md-8 presentation well">
|
||||
<h3><a href="{% url "schedule_presentation_detail" presentation.pk %}">{{ presentation.title }}</a></h3>
|
||||
<h4>{{ presentation.speakers|join:", " }}</h4>
|
||||
{{ presentation.description }}
|
||||
{% if presentation.slot %}
|
||||
<h4>
|
||||
{{ presentation.slot.day.date|date:"l" }}
|
||||
{{ presentation.slot.start}}–{{ presentation.slot.end }}
|
||||
in
|
||||
{{ presentation.slot.rooms|join:", " }}
|
||||
</h4>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endcache %}
|
||||
</div></div></div>
|
||||
{% block content %}
|
||||
{% cache 600 "schedule-list" schedule.section.name %}
|
||||
<ul>
|
||||
{% for presentation in presentations %}
|
||||
<li>
|
||||
<a href="{% url "schedule_presentation_detail" presentation.pk %}">{{ presentation.title }}</a> {{ presentation.proposal.kind }} <em>by</em>
|
||||
{{ presentation.speakers|join:", " }}
|
||||
{% if presentation.slot %}
|
||||
({{ presentation.slot.day.date|date:"l" }}
|
||||
{{ presentation.slot.start}}–{{ presentation.slot.end }}
|
||||
in
|
||||
{{ presentation.slot.rooms|join:", " }})
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endcache %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,41 +1,47 @@
|
|||
{% extends "site_base.html" %}
|
||||
{% extends "symposion/schedule/public_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
{% load lca2017_tags %}
|
||||
{% load thumbnail %}
|
||||
|
||||
{% if speaker.photo %}
|
||||
{% block header_inset_image %}{% speaker_photo speaker 512 as speaker_photo %}{{ speaker_photo }}{% endblock %}
|
||||
{% endif %}
|
||||
|
||||
{% block header_title %}{{ speaker.name }}{% endblock %}
|
||||
|
||||
{% block header_paragraph %}
|
||||
{% endblock %}
|
||||
|
||||
{% block head_title %}{{ speaker.name }}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
{% if speaker.photo %}
|
||||
<img src="{% thumbnail speaker.photo '128x128' %}" alt="{{ speaker.name }}" />
|
||||
{% else %}
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
{% if speaker.user == request.user or request.user.is_staff %}
|
||||
<a class="btn btn-default pull-right" href="{% url "speaker_edit" speaker.pk %}">Edit</a>
|
||||
{% endif %}
|
||||
<h1>{{ speaker.name }}</h1>
|
||||
<div class="bio">{{ speaker.biography|safe }}</div>
|
||||
{% block content %}
|
||||
{% if speaker.user == request.user or request.user.is_staff %}
|
||||
<p>
|
||||
<a class="btn btn-default pull-right" href="{% url "speaker_edit" speaker.pk %}">Edit</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<h2>Presentations</h2>
|
||||
{% for presentation in presentations %}
|
||||
<h3><a href="{% url "schedule_presentation_detail" presentation.pk %}">{{ presentation.title }}</a></h3>
|
||||
{% if presentation.slot %}
|
||||
<p>
|
||||
{{ presentation.slot.day.date|date:"l" }}
|
||||
{{ presentation.slot.start}}–{{ presentation.slot.end }}
|
||||
in
|
||||
{{ presentation.slot.rooms|join:", " }}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% empty %}
|
||||
<p>No presentations. This page is only visible to staff until there is a presentation.<p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<h3>Biography</h3>
|
||||
|
||||
<div class="bio">{{ speaker.biography_html|safe }}</div>
|
||||
|
||||
<h3>Presentations</h3>
|
||||
|
||||
<ul>
|
||||
{% for presentation in presentations %}
|
||||
<li>
|
||||
<a href="{% url "schedule_presentation_detail" presentation.pk %}">{{ presentation.title }}</a>
|
||||
{% if presentation.slot %}
|
||||
–
|
||||
{{ presentation.slot.day.date|date:"l" }}
|
||||
{{ presentation.slot.start}}–{{ presentation.slot.end }}
|
||||
in
|
||||
{{ presentation.slot.rooms|join:", " }}
|
||||
{% endif %}
|
||||
</li>
|
||||
{% empty %}
|
||||
<p>No presentations. This page is only visible to staff until there is a presentation.</p>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,26 +1,19 @@
|
|||
{% extends "site_base_wagtail.html" %}
|
||||
{% extends "lca2017/content_page.html" %}
|
||||
{% load staticfiles %}
|
||||
|
||||
{% block body %}
|
||||
<div class="panel panel__compact panel__bg">
|
||||
<div style="background-image: url('{% static 'lca2017/images/wineglass_bg_optimised.jpg' %}');" class="panel--bg"></div>
|
||||
<div class="panel--content">
|
||||
<h2>{% block page_title %}{% endblock %}</h2>
|
||||
<br />
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
{% block header_background_image %}{% static 'lca2017/images/wineglass_bg_optimised.jpg' %}{% endblock %}
|
||||
{% block header_title %}{% block page_title %}{% endblock %}{% endblock %}
|
||||
{% block header_inset_image_base %}{% endblock %}
|
||||
|
||||
{% block content_base %}
|
||||
{% block utility_body_outer %}
|
||||
<div class="l-content-page">
|
||||
<div class="l-content-page--richtext">
|
||||
{% block utility_body %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
{% block utility_body %}
|
||||
{% endblock %}
|
||||
{% endblock content %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_script %}
|
||||
<script src="{% static 'js/site-92ae8d0d6c.js' %}" type="text/javascript"></script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,19 +1,74 @@
|
|||
import cms_pages
|
||||
import hashlib
|
||||
import urllib
|
||||
|
||||
from django import template
|
||||
from django.contrib.staticfiles.templatetags import staticfiles
|
||||
from easy_thumbnails.files import get_thumbnailer
|
||||
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.assignment_tag()
|
||||
def classname(ob):
|
||||
return ob.__class__.__name__
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def can_manage(context, proposal):
|
||||
return proposal_permission(context, "manage", proposal)
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def can_review(context, proposal):
|
||||
return proposal_permission(context, "review", proposal)
|
||||
|
||||
|
||||
def proposal_permission(context, permname, proposal):
|
||||
slug = proposal.kind.section.slug
|
||||
perm = "reviews.can_%s_%s" % (permname, slug)
|
||||
return context.request.user.has_perm(perm)
|
||||
|
||||
|
||||
# {% load statictags %}{% static 'lca2017/images/svgs/illustrations/' %}{{ illustration }}
|
||||
|
||||
@register.simple_tag(takes_context=False)
|
||||
def illustration(name):
|
||||
return staticfiles.static('lca2017/images/svgs/illustrations/') + name
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def speaker_photo(context, speaker, size):
|
||||
''' Provides the speaker profile, or else fall back to libravatar or gravatar. '''
|
||||
|
||||
if speaker.photo:
|
||||
thumbnailer = get_thumbnailer(speaker.photo)
|
||||
thumbnail_options = {'crop': True, 'size': (size, size)}
|
||||
thumbnail = thumbnailer.get_thumbnail(thumbnail_options)
|
||||
return thumbnail.url
|
||||
else:
|
||||
email = speaker.user.email.encode("utf-8")
|
||||
md5sum = hashlib.md5(email.strip().lower()).hexdigest()
|
||||
url = "https://secure.gravatar.com/avatar/%s?s=%d&d=%s" % (md5sum, size, "https://linux.conf.au/site_media/static/lca2017/images/speaker-fallback-devil.jpg")
|
||||
|
||||
return url
|
||||
|
||||
|
||||
@register.simple_tag()
|
||||
def presentation_bg_number(presentation, count):
|
||||
return sum(ord(i) for i in presentation.title) % count
|
||||
|
||||
|
||||
@register.simple_tag()
|
||||
def header_paragraph(name):
|
||||
model = cms_pages.models.NamedHeaderParagraph
|
||||
try:
|
||||
return model.objects.get(name=name).text
|
||||
except model.DoesNotExist:
|
||||
return ""
|
||||
|
||||
|
||||
@register.simple_tag()
|
||||
def all_images():
|
||||
return cms_pages.models.CustomImage.objects.all().order_by("title")
|
||||
|
|
|
@ -8,7 +8,7 @@ dj-static==0.0.6
|
|||
dj-database-url==0.4.0
|
||||
#pinax-pages==0.4.2
|
||||
pinax-boxes==2.1.2
|
||||
wagtail==1.5.2
|
||||
wagtail==1.6.2
|
||||
pylibmc==1.5.1
|
||||
raven==5.27.0
|
||||
|
||||
|
|
|
@ -117,14 +117,14 @@
|
|||
}
|
||||
}
|
||||
|
||||
.panel--1-3, .l-speaker-page--portrait, .l-footer--text {
|
||||
.panel--1-3, .l-speaker-page--portrait, .l-footer--logos {
|
||||
-ms-flex-order: 1;
|
||||
order: 1;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@media (min-width: 48em) {
|
||||
.panel--1-3, .l-speaker-page--portrait, .l-footer--text {
|
||||
.panel--1-3, .l-speaker-page--portrait, .l-footer--logos {
|
||||
-ms-flex-order: 0;
|
||||
order: 0;
|
||||
width: auto;
|
||||
|
@ -133,14 +133,14 @@
|
|||
}
|
||||
}
|
||||
|
||||
.panel--2-3, .l-speaker-page--content, .l-footer--logos {
|
||||
.panel--2-3, .l-speaker-page--content, .l-footer--text {
|
||||
-ms-flex-order: 2;
|
||||
order: 2;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@media (min-width: 48em) {
|
||||
.panel--2-3, .l-speaker-page--content, .l-footer--logos {
|
||||
.panel--2-3, .l-speaker-page--content, .l-footer--text {
|
||||
-ms-flex-order: 0;
|
||||
order: 0;
|
||||
width: auto;
|
||||
|
@ -1127,6 +1127,19 @@ table.alt tr:not(:last-of-type) {
|
|||
}
|
||||
}
|
||||
|
||||
.right-floating-image {
|
||||
width: 30%;
|
||||
float: right;
|
||||
margin: 4rem;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.sponsor-logo {
|
||||
width: 8em;
|
||||
height: 4em;
|
||||
margin: 0.5em;
|
||||
}
|
||||
|
||||
.portrait {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
|
276
static/src/lca2017/images/HPE.svg
Normal file
|
@ -0,0 +1,276 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="svg3538"
|
||||
viewBox="0 0 1372.9464 573.37965"
|
||||
height="161.82048mm"
|
||||
width="387.47598mm"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="Hewlett_Packard_Enterprise_logo.svg">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="640"
|
||||
inkscape:window-height="480"
|
||||
id="namedview5372"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.23890226"
|
||||
inkscape:cx="686.47321"
|
||||
inkscape:cy="286.68982"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg3538" />
|
||||
<defs
|
||||
id="defs3540" />
|
||||
<metadata
|
||||
id="metadata3543">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(435.04467,-285.29078)"
|
||||
id="layer1"
|
||||
style="fill:#ffffff">
|
||||
<g
|
||||
transform="matrix(7.4464891,0,0,7.4464891,2804.5105,-1839.1239)"
|
||||
id="g3646"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m -375.89589,299.46828 -55.205,0 0,-10.23425 55.205,0 0,10.23425 z m 3.94375,-14.1775 -63.0925,0 0,18.11875 63.0925,0 0,-18.11875 z"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3346" />
|
||||
<g
|
||||
id="g3348"
|
||||
transform="matrix(1.25,0,0,-1.25,-431.10089,333.35578)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 -3.155,0 0,14.495 3.155,0 0,-5.728 5.637,0 0,5.728 3.155,0 0,-14.495 -3.155,0 0,6.007 L 0,6.007 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3350" />
|
||||
</g>
|
||||
<g
|
||||
id="g3352"
|
||||
transform="matrix(1.25,0,0,-1.25,-414.13839,325.41203)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="M 0,0 3.758,0 C 3.688,1.066 3.248,1.809 2.018,1.809 1.09,1.809 0.278,1.414 0,0 Z m 2.389,-6.587 c -3.201,0 -5.381,2.018 -5.381,5.333 0,3.225 2.134,5.451 4.964,5.451 3.085,0 4.616,-2.064 4.616,-5.149 l 0,-1.16 -6.588,0 c 0.372,-1.599 1.624,-2.016 2.877,-2.016 1.09,0 1.878,0.231 2.852,0.835 l 0.117,0 0,-2.389 C 5.011,-6.286 3.827,-6.587 2.389,-6.587"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3354" />
|
||||
</g>
|
||||
<g
|
||||
id="g3356"
|
||||
transform="matrix(1.25,0,0,-1.25,-395.61089,325.76078)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 -1.624,-6.076 -2.76,0 -3.155,10.205 0,0.116 3.016,0 1.716,-6.1 1.624,6.1 2.459,0 1.647,-6.1 1.74,6.1 2.9,0 0,-0.116 -3.155,-10.205 -2.761,0 L 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3358" />
|
||||
</g>
|
||||
<g
|
||||
id="g3360"
|
||||
transform="matrix(1.25,0,0,-1.25,-379.75089,333.64578)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 c -2.505,0 -3.526,0.997 -3.526,3.339 l 0,11.387 3.062,0 0,-11.178 c 0,-0.719 0.278,-0.974 0.881,-0.974 0.209,0 0.511,0.069 0.696,0.139 l 0.047,0 0,-2.528 C 0.905,0.093 0.464,0 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3362" />
|
||||
</g>
|
||||
<g
|
||||
id="g3364"
|
||||
transform="matrix(1.25,0,0,-1.25,-373.48714,325.41203)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="M 0,0 3.758,0 C 3.688,1.066 3.248,1.809 2.018,1.809 1.091,1.809 0.278,1.414 0,0 Z m 2.389,-6.587 c -3.201,0 -5.381,2.018 -5.381,5.333 0,3.225 2.134,5.451 4.964,5.451 3.085,0 4.616,-2.064 4.616,-5.149 l 0,-1.16 -6.588,0 c 0.371,-1.599 1.624,-2.016 2.876,-2.016 1.091,0 1.879,0.231 2.854,0.835 l 0.116,0 0,-2.389 C 5.011,-6.286 3.828,-6.587 2.389,-6.587"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3366" />
|
||||
</g>
|
||||
<g
|
||||
id="g3368"
|
||||
transform="matrix(1.25,0,0,-1.25,-349.53714,320.45453)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 2.273,0 0,-2.458 -2.273,0 0,-4.198 c 0,-0.905 0.348,-1.323 1.276,-1.323 0.255,0 0.58,0.024 0.928,0.14 l 0.069,0 0,-2.412 c -0.394,-0.14 -0.997,-0.301 -1.878,-0.301 -2.483,0 -3.457,1.136 -3.457,3.757 l 0,4.337 -3.92,0 0,-4.198 c 0,-0.905 0.348,-1.323 1.275,-1.323 0.256,0 0.581,0.024 0.929,0.14 l 0.069,0 0,-2.412 c -0.394,-0.14 -0.998,-0.301 -1.878,-0.301 -2.483,0 -3.457,1.136 -3.457,3.757 l 0,4.337 -1.578,0 0,2.458 1.578,0 0,2.829 3.062,0 0,-2.829 3.92,0 0,2.829 L 0,2.829 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3370" />
|
||||
</g>
|
||||
<g
|
||||
id="g3372"
|
||||
transform="matrix(1.25,0,0,-1.25,-333.79964,324.13703)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 c 1.602,0 2.366,0.904 2.366,2.203 0,1.346 -0.764,2.25 -2.366,2.25 l -1.995,0 L -1.995,0 0,0 Z m 5.568,2.203 c 0,-3.155 -2.111,-4.87 -5.313,-4.87 l -2.25,0 0,-4.708 -3.153,0 0,14.495 5.403,0 c 3.202,0 5.313,-1.716 5.313,-4.917"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3374" />
|
||||
</g>
|
||||
<g
|
||||
id="g3376"
|
||||
transform="matrix(1.25,0,0,-1.25,-318.43214,329.29703)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 0,0.881 c -0.464,0.254 -1.066,0.347 -1.693,0.347 -0.997,0 -1.6,-0.37 -1.6,-1.205 0,-0.859 0.603,-1.23 1.507,-1.23 0.858,0 1.508,0.441 1.786,1.207 z m 0.093,-2.227 c -0.673,-0.812 -1.669,-1.206 -2.738,-1.206 -2.017,0 -3.665,1.228 -3.665,3.41 0,2.017 1.648,3.362 4.013,3.362 0.742,0 1.509,-0.116 2.297,-0.347 l 0,0.184 c 0,1.114 -0.626,1.6 -2.272,1.6 -1.045,0 -2.042,-0.3 -2.901,-0.788 l -0.115,0 0,2.459 c 0.788,0.463 2.181,0.858 3.548,0.858 3.109,0 4.802,-1.484 4.802,-4.082 l 0,-6.47 -2.969,0 0,1.02"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3378" />
|
||||
</g>
|
||||
<g
|
||||
id="g3380"
|
||||
transform="matrix(1.25,0,0,-1.25,-312.66214,326.92078)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 c 0,3.317 2.344,5.404 5.406,5.404 1.09,0 2.11,-0.232 2.876,-0.788 l 0,-2.621 -0.117,0 C 7.492,2.505 6.704,2.807 5.8,2.807 4.269,2.807 3.109,1.762 3.109,0 c 0,-1.762 1.16,-2.783 2.691,-2.783 0.904,0 1.692,0.302 2.365,0.813 l 0.117,0 0,-2.621 C 7.516,-5.148 6.496,-5.38 5.406,-5.38 2.344,-5.38 0,-3.317 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3382" />
|
||||
</g>
|
||||
<g
|
||||
id="g3384"
|
||||
transform="matrix(1.25,0,0,-1.25,-296.07714,327.50078)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 0,-4.684 -3.061,0 0,14.495 3.061,0 0,-8.256 3.086,4.082 3.479,0 0,-0.116 -3.711,-4.685 3.711,-5.404 0,-0.116 -3.503,0 L 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3386" />
|
||||
</g>
|
||||
<g
|
||||
id="g3388"
|
||||
transform="matrix(1.25,0,0,-1.25,-279.28839,329.29703)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 0,0.881 c -0.463,0.254 -1.067,0.347 -1.693,0.347 -0.997,0 -1.6,-0.37 -1.6,-1.205 0,-0.859 0.603,-1.23 1.506,-1.23 0.86,0 1.509,0.441 1.787,1.207 z m 0.093,-2.227 c -0.673,-0.812 -1.671,-1.206 -2.737,-1.206 -2.019,0 -3.665,1.228 -3.665,3.41 0,2.017 1.646,3.362 4.014,3.362 0.742,0 1.506,-0.116 2.295,-0.347 l 0,0.184 c 0,1.114 -0.626,1.6 -2.273,1.6 -1.043,0 -2.042,-0.3 -2.9,-0.788 l -0.116,0 0,2.459 c 0.789,0.463 2.181,0.858 3.549,0.858 3.11,0 4.803,-1.484 4.803,-4.082 l 0,-6.47 -2.97,0 0,1.02"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3390" />
|
||||
</g>
|
||||
<g
|
||||
id="g3392"
|
||||
transform="matrix(1.25,0,0,-1.25,-269.02339,322.54203)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="M 0,0 C 0.556,1.137 1.369,1.786 2.506,1.786 2.923,1.786 3.34,1.693 3.501,1.6 l 0,-2.922 -0.115,0 C 3.038,-1.182 2.621,-1.09 2.041,-1.09 1.09,-1.09 0.348,-1.647 0.092,-2.713 l 0,-5.938 -3.061,0 0,10.321 L 0,1.67 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3394" />
|
||||
</g>
|
||||
<g
|
||||
id="g3396"
|
||||
transform="matrix(1.25,0,0,-1.25,-254.49714,328.97828)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 0,3.317 c -0.51,0.742 -1.182,1.066 -1.949,1.066 -1.344,0 -2.249,-0.975 -2.249,-2.737 0,-1.762 0.905,-2.713 2.249,-2.713 0.767,0 1.439,0.325 1.949,1.067 z m 0.092,-2.436 c -0.649,-0.835 -1.67,-1.298 -3.061,-1.298 -2.645,0 -4.338,2.411 -4.338,5.38 0,2.969 1.693,5.404 4.338,5.404 1.345,0 2.319,-0.418 2.969,-1.183 l 0,5.125 3.062,0 0,-14.494 -2.97,0 0,1.066"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3398" />
|
||||
</g>
|
||||
<g
|
||||
id="g3400"
|
||||
transform="matrix(1.25,0,0,-1.25,-435.04464,339.27328)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 8.954,0 0,-1.762 -6.936,0 0,-4.429 6.286,0 0,-1.717 -6.286,0 0,-4.824 6.936,0 0,-1.762 -8.954,0 L 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3402" />
|
||||
</g>
|
||||
<g
|
||||
id="g3404"
|
||||
transform="matrix(1.25,0,0,-1.25,-414.60339,344.37453)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 c 2.296,0 3.572,-1.508 3.572,-3.988 l 0,-6.425 -1.925,0 0,6.378 c 0,1.322 -0.673,2.273 -2.134,2.273 -1.206,0 -2.227,-0.766 -2.575,-1.855 l 0,-6.796 -1.925,0 0,10.204 1.925,0 0,-1.484 C -2.459,-0.742 -1.438,0 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3406" />
|
||||
</g>
|
||||
<g
|
||||
id="g3408"
|
||||
transform="matrix(1.25,0,0,-1.25,-403.67089,344.63578)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 2.621,0 0,-1.647 -2.621,0 0,-5.496 c 0,-1.159 0.603,-1.554 1.693,-1.554 0.301,0 0.626,0.046 0.858,0.139 l 0.07,0 0,-1.646 c -0.278,-0.116 -0.673,-0.209 -1.206,-0.209 -2.39,0 -3.34,1.091 -3.34,3.084 l 0,5.682 -1.763,0 0,1.647 1.763,0 0,2.712 L 0,2.712 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3410" />
|
||||
</g>
|
||||
<g
|
||||
id="g3412"
|
||||
transform="matrix(1.25,0,0,-1.25,-396.36464,349.76578)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="M 0,0 5.08,0 C 5.011,1.507 4.268,2.666 2.691,2.666 1.23,2.666 0.278,1.576 0,0 Z m 3.039,-6.309 c -2.993,0 -5.034,1.995 -5.034,5.195 0,3.201 1.902,5.427 4.663,5.427 2.807,0 4.268,-2.018 4.268,-5.009 l 0,-0.882 -7.006,0 c 0.209,-2.064 1.532,-3.061 3.364,-3.061 1.137,0 1.948,0.255 2.853,0.928 l 0.07,0 0,-1.694 C 5.382,-6.054 4.291,-6.309 3.039,-6.309"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3414" />
|
||||
</g>
|
||||
<g
|
||||
id="g3416"
|
||||
transform="matrix(1.25,0,0,-1.25,-382.44714,346.60703)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 c 0.441,1.09 1.416,1.739 2.528,1.739 0.442,0 0.836,-0.069 0.998,-0.162 l 0,-1.901 -0.069,0 C 3.178,-0.186 2.714,-0.116 2.25,-0.116 1.207,-0.116 0.325,-0.811 0,-1.971 l 0,-6.656 -1.925,0 0,10.204 L 0,1.577 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3418" />
|
||||
</g>
|
||||
<g
|
||||
id="g3420"
|
||||
transform="matrix(1.25,0,0,-1.25,-370.26964,355.47703)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 c 1.902,0 3.016,1.507 3.016,3.572 0,2.04 -1.114,3.57 -3.016,3.57 -1.044,0 -2.018,-0.626 -2.528,-1.622 l 0,-3.921 C -2.018,0.603 -1.044,0 0,0 Z m 0.325,8.882 c 3.038,0 4.662,-2.482 4.662,-5.31 0,-2.831 -1.624,-5.312 -4.662,-5.312 -1.253,0 -2.32,0.649 -2.853,1.346 l 0,-5.057 -1.926,0 0,14.124 1.926,0 0,-1.159 c 0.533,0.719 1.6,1.368 2.853,1.368"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3422" />
|
||||
</g>
|
||||
<g
|
||||
id="g3424"
|
||||
transform="matrix(1.25,0,0,-1.25,-358.78714,346.60703)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 c 0.44,1.09 1.415,1.739 2.528,1.739 0.441,0 0.835,-0.069 0.997,-0.162 l 0,-1.901 -0.069,0 C 3.178,-0.186 2.714,-0.116 2.25,-0.116 1.206,-0.116 0.325,-0.811 0,-1.971 l 0,-6.656 -1.925,0 0,10.204 L 0,1.577 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3426" />
|
||||
</g>
|
||||
<g
|
||||
id="g3428"
|
||||
transform="matrix(1.25,0,0,-1.25,-350.90089,339.47578)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 c 0.673,0 1.229,-0.533 1.229,-1.206 0,-0.673 -0.556,-1.206 -1.229,-1.206 -0.649,0 -1.23,0.533 -1.23,1.206 C -1.23,-0.533 -0.649,0 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3430" />
|
||||
</g>
|
||||
<path
|
||||
d="m -352.08964,357.39078 2.4075,0 0,-12.755 -2.4075,0 0,12.755 z"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3432" />
|
||||
<g
|
||||
id="g3434"
|
||||
transform="matrix(1.25,0,0,-1.25,-341.09964,349.94078)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 0,0 c 1.461,-0.463 3.084,-1.066 3.084,-3.014 0,-2.088 -1.716,-3.155 -3.919,-3.155 -1.346,0 -2.691,0.325 -3.457,0.928 l 0,1.832 0.093,0 c 0.859,-0.788 2.134,-1.136 3.34,-1.136 1.09,0 2.065,0.418 2.065,1.299 0,0.904 -0.811,1.113 -2.413,1.646 -1.438,0.464 -3.038,0.998 -3.038,2.922 0,1.972 1.623,3.131 3.688,3.131 1.206,0 2.273,-0.255 3.131,-0.835 l 0,-1.856 -0.069,0 C 1.671,2.435 0.695,2.83 -0.511,2.83 -1.717,2.83 -2.39,2.296 -2.39,1.577 -2.39,0.765 -1.648,0.534 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3436" />
|
||||
</g>
|
||||
<g
|
||||
id="g3438"
|
||||
transform="matrix(1.25,0,0,-1.25,-332.66214,349.76578)"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="M 0,0 5.079,0 C 5.01,1.507 4.268,2.666 2.69,2.666 1.229,2.666 0.278,1.576 0,0 Z m 3.038,-6.309 c -2.992,0 -5.033,1.995 -5.033,5.195 0,3.201 1.902,5.427 4.662,5.427 2.808,0 4.268,-2.018 4.268,-5.009 l 0,-0.882 -7.005,0 c 0.209,-2.064 1.531,-3.061 3.363,-3.061 1.138,0 1.949,0.255 2.853,0.928 l 0.07,0 0,-1.694 C 5.382,-6.054 4.291,-6.309 3.038,-6.309"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3440" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 15 KiB |
54
static/src/lca2017/images/IBM.svg
Normal file
|
@ -0,0 +1,54 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="1000"
|
||||
height="400"
|
||||
id="svg4448"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="IBM_logo.svg">
|
||||
<metadata
|
||||
id="metadata4456">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs4454" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1126"
|
||||
inkscape:window-height="635"
|
||||
id="namedview4452"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.328"
|
||||
inkscape:cx="-39.634146"
|
||||
inkscape:cy="200"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg4448" />
|
||||
<path
|
||||
d="M 0,0 0,27.367 194.64844,27.367 194.64844,0 0,0 z M 222.22657,0 222.22657,27.367 499.60937,27.367 C 499.60936,27.367 471.27625,0 433.75,0 L 222.22657,0 z M 554.02344,0 554.02344,27.367 721.83594,27.367 711.875,0 554.02344,0 z M 842.14844,0 832.1875,27.367 998.47656,27.367 998.47656,0 842.14844,0 z M 0,53.22221 0,80.589202 194.64844,80.589202 194.64844,53.22221 0,53.22221 z M 222.22657,53.260975 222.22657,80.589202 531.79688,80.589202 C 531.79688,80.589214 528.18125,59.526386 521.875,53.260975 L 222.22657,53.260975 z M 554.02344,53.260975 554.02344,80.589202 740.23438,80.589202 731.01562,53.260975 554.02344,53.260975 z M 822.22656,53.260975 813.00781,80.589202 998.47656,80.589202 998.47656,53.260975 822.22656,53.260975 z M 55.937496,106.44442 55.937496,133.85017 140.23437,133.85017 140.23437,106.44442 55.937496,106.44442 z M 278.16407,106.44442 278.16407,133.85017 362.46093,133.85017 362.46093,106.44442 278.16407,106.44442 z M 444.45313,106.44442 444.45313,133.85017 528.75,133.85017 C 528.75001,133.85017 534.10156,119.37715 534.10156,106.44442 L 444.45313,106.44442 z M 609.96094,106.44442 609.96094,133.85017 759.41407,133.85017 749.45313,106.44442 609.96094,106.44442 z M 803.86719,106.44442 793.86719,133.85017 944.0625,133.85017 944.0625,106.44442 803.86719,106.44442 z M 55.937496,159.7054 55.937496,187.07238 140.23437,187.07238 140.23437,159.7054 55.937496,159.7054 z M 278.16407,159.7054 278.16407,187.07238 493.47657,187.07238 C 493.47658,187.07237 511.48781,173.0301 517.22656,159.7054 L 278.16407,159.7054 z M 609.96094,159.7054 609.96094,187.07238 694.25781,187.07238 694.25781,171.83835 699.60937,187.07238 854.02344,187.07238 859.76563,171.83835 859.76563,187.07238 944.0625,187.07238 944.0625,159.7054 785.82031,159.7054 777.42187,182.88593 768.98438,159.7054 609.96094,159.7054 z M 55.937496,212.92761 55.937496,240.29459 140.23437,240.29459 140.23437,212.92761 55.937496,212.92761 z M 278.16407,212.92761 278.16407,240.29459 517.22656,240.29459 C 511.48657,227.01331 493.47657,212.92761 493.47657,212.92761 L 278.16407,212.92761 z M 609.96094,212.92761 609.96094,240.29459 694.25781,240.29459 694.25781,212.92761 609.96094,212.92761 z M 709.57031,212.92761 719.76563,240.29459 835.54688,240.29459 845.23438,212.92761 709.57031,212.92761 z M 859.76563,212.92761 859.76563,240.29459 944.0625,240.29459 944.0625,212.92761 859.76563,212.92761 z M 55.937496,266.14982 55.937496,293.5168 140.23437,293.5168 140.23437,266.14982 55.937496,266.14982 z M 278.16407,266.14982 278.16407,293.5168 362.46093,293.5168 362.46093,266.14982 278.16407,266.14982 z M 444.45313,266.14982 444.45313,293.5168 534.10156,293.5168 C 534.10158,280.60147 528.75,266.14982 528.75,266.14982 L 444.45313,266.14982 z M 609.96094,266.14982 609.96094,293.5168 694.25781,293.5168 694.25781,266.14982 609.96094,266.14982 z M 728.71093,266.14982 738.59375,293.5168 816.21093,293.5168 826.17187,266.14982 728.71093,266.14982 z M 859.76563,266.14982 859.76563,293.5168 944.0625,293.5168 944.0625,266.14982 859.76563,266.14982 z M 1.52343,319.37203 1.52343,346.77778 196.17187,346.77778 196.17187,319.37203 1.52343,319.37203 z M 222.22657,319.37203 222.22657,346.77778 521.875,346.77778 C 528.18125,340.50245 531.79688,319.37203 531.79688,319.37203 L 222.22657,319.37203 z M 555.54687,319.37203 555.54687,346.77778 694.25781,346.77778 694.25781,319.37203 555.54687,319.37203 z M 747.89062,319.37203 758.04687,346.77778 797.53906,346.77778 807.07031,319.37203 747.89062,319.37203 z M 859.76563,319.37203 859.76563,346.77778 1000,346.77778 1000,319.37203 859.76563,319.37203 z M 1.52343,372.633 1.52343,400 196.17187,400 196.17187,372.633 1.52343,372.633 z M 222.22657,372.633 222.22657,399.96124 433.75,399.96124 C 471.27624,399.96122 499.60937,372.633 499.60937,372.633 L 222.22657,372.633 z M 555.54687,372.633 555.54687,400 694.25781,400 694.25781,372.633 555.54687,372.633 z M 767.14844,372.633 776.91407,399.92246 778.59375,399.96124 788.51563,372.633 767.14844,372.633 z M 859.76563,372.633 859.76563,400 1000,400 1000,372.633 859.76563,372.633 z"
|
||||
fill="#1f70c1"
|
||||
id="path4450"
|
||||
style="fill:#ffffff;fill-opacity:1" />
|
||||
</svg>
|
After Width: | Height: | Size: 5.4 KiB |
BIN
static/src/lca2017/images/hobart_bg_optimised.jpg
Executable file → Normal file
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 232 KiB |
BIN
static/src/lca2017/images/mt_anne_bg_optimised.jpg
Normal file
After Width: | Height: | Size: 380 KiB |
BIN
static/src/lca2017/images/sleepy_bay_bg_optimised.jpg
Normal file
After Width: | Height: | Size: 208 KiB |
BIN
static/src/lca2017/images/snug_falls_bg_optimised.jpg
Normal file
After Width: | Height: | Size: 341 KiB |
BIN
static/src/lca2017/images/speaker-fallback-devil.jpg
Normal file
After Width: | Height: | Size: 52 KiB |
2
static/src/lca2017/images/svgs/illustrations/cradle.svg
Executable file → Normal file
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 12 KiB |
BIN
static/src/lca2017/images/the_neck_bg_optimised.jpg
Normal file
After Width: | Height: | Size: 377 KiB |