diff --git a/config/settings/base.py b/config/settings/base.py index bc6f4b4..569a13b 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -71,6 +71,7 @@ 'modelcluster', 'taggit', 'rest_framework', + 'wagtailvideos', ] LOCAL_APPS = [ 'mpicms.base.apps.BaseAppConfig', diff --git a/mpicms/base/blocks.py b/mpicms/base/blocks.py index 41dee5f..c23927d 100644 --- a/mpicms/base/blocks.py +++ b/mpicms/base/blocks.py @@ -1,9 +1,11 @@ from django.utils.translation import gettext_lazy as _ +from django.utils.functional import cached_property from wagtail.core import blocks from wagtail.snippets.blocks import SnippetChooserBlock from wagtail.contrib.table_block.blocks import TableBlock as WagtailTableBlock - +import wagtailvideos.models +import wagtailvideos.widgets class ContactBlock(blocks.StructBlock): contact = SnippetChooserBlock('personal.Contact', label=_("Contact")) @@ -24,11 +26,27 @@ class Meta: # noqa template = 'base/blocks/table_block.html' +class VideoBlock(blocks.ChooserBlock): + @cached_property + def target_model(self): + return wagtailvideos.models.Video + + @cached_property + def widget(self): + return wagtailvideos.widgets.AdminVideoChooser + + def render_basic(self, value, context=None): + return value.video_tag(attrs={"controls": True}) if value else "" + + class Meta: + icon = "fa-play" + class ContentBlock(blocks.StreamBlock): richtext = blocks.RichTextBlock(label=_('Editor')) markdown = MarkdownBlock(label=_('Raw Markdown')) table = TableBlock(label=_('Table')) contact = ContactBlock(label=_('Contact')) + video = VideoBlock(label=_('Video')) class Meta: # noqa label = _('content') diff --git a/mpicms/base/migrations/0053_auto_20210114_1926.py b/mpicms/base/migrations/0053_auto_20210114_1926.py new file mode 100644 index 0000000..d32fb41 --- /dev/null +++ b/mpicms/base/migrations/0053_auto_20210114_1926.py @@ -0,0 +1,47 @@ +# Generated by Django 3.1 on 2021-01-14 18:26 + +from django.db import migrations +import mpicms.base.blocks +import wagtail.core.blocks +import wagtail.core.fields +import wagtail.snippets.blocks + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0052_formfield_clean_name'), + ] + + operations = [ + migrations.AlterField( + model_name='homepage', + name='body', + field=wagtail.core.fields.StreamField([('richtext', wagtail.core.blocks.RichTextBlock(label='Editor')), ('markdown', mpicms.base.blocks.MarkdownBlock(label='Raw Markdown')), ('table', mpicms.base.blocks.TableBlock(label='Table')), ('contact', wagtail.core.blocks.StructBlock([('contact', wagtail.snippets.blocks.SnippetChooserBlock('personal.Contact', label='Contact')), ('information', wagtail.core.blocks.TextBlock(label='Information', required=False))], label='Contact')), ('video', mpicms.base.blocks.VideoBlock(label='Video'))], blank=True, verbose_name='content'), + ), + migrations.AlterField( + model_name='homepage', + name='body_de', + field=wagtail.core.fields.StreamField([('richtext', wagtail.core.blocks.RichTextBlock(label='Editor')), ('markdown', mpicms.base.blocks.MarkdownBlock(label='Raw Markdown')), ('table', mpicms.base.blocks.TableBlock(label='Table')), ('contact', wagtail.core.blocks.StructBlock([('contact', wagtail.snippets.blocks.SnippetChooserBlock('personal.Contact', label='Contact')), ('information', wagtail.core.blocks.TextBlock(label='Information', required=False))], label='Contact')), ('video', mpicms.base.blocks.VideoBlock(label='Video'))], blank=True, null=True, verbose_name='content'), + ), + migrations.AlterField( + model_name='homepage', + name='body_en', + field=wagtail.core.fields.StreamField([('richtext', wagtail.core.blocks.RichTextBlock(label='Editor')), ('markdown', mpicms.base.blocks.MarkdownBlock(label='Raw Markdown')), ('table', mpicms.base.blocks.TableBlock(label='Table')), ('contact', wagtail.core.blocks.StructBlock([('contact', wagtail.snippets.blocks.SnippetChooserBlock('personal.Contact', label='Contact')), ('information', wagtail.core.blocks.TextBlock(label='Information', required=False))], label='Contact')), ('video', mpicms.base.blocks.VideoBlock(label='Video'))], blank=True, null=True, verbose_name='content'), + ), + migrations.AlterField( + model_name='wikipage', + name='body', + field=wagtail.core.fields.StreamField([('richtext', wagtail.core.blocks.RichTextBlock(label='Editor')), ('markdown', mpicms.base.blocks.MarkdownBlock(label='Raw Markdown')), ('table', mpicms.base.blocks.TableBlock(label='Table')), ('contact', wagtail.core.blocks.StructBlock([('contact', wagtail.snippets.blocks.SnippetChooserBlock('personal.Contact', label='Contact')), ('information', wagtail.core.blocks.TextBlock(label='Information', required=False))], label='Contact')), ('video', mpicms.base.blocks.VideoBlock(label='Video'))], blank=True, verbose_name='content'), + ), + migrations.AlterField( + model_name='wikipage', + name='body_de', + field=wagtail.core.fields.StreamField([('richtext', wagtail.core.blocks.RichTextBlock(label='Editor')), ('markdown', mpicms.base.blocks.MarkdownBlock(label='Raw Markdown')), ('table', mpicms.base.blocks.TableBlock(label='Table')), ('contact', wagtail.core.blocks.StructBlock([('contact', wagtail.snippets.blocks.SnippetChooserBlock('personal.Contact', label='Contact')), ('information', wagtail.core.blocks.TextBlock(label='Information', required=False))], label='Contact')), ('video', mpicms.base.blocks.VideoBlock(label='Video'))], blank=True, null=True, verbose_name='content'), + ), + migrations.AlterField( + model_name='wikipage', + name='body_en', + field=wagtail.core.fields.StreamField([('richtext', wagtail.core.blocks.RichTextBlock(label='Editor')), ('markdown', mpicms.base.blocks.MarkdownBlock(label='Raw Markdown')), ('table', mpicms.base.blocks.TableBlock(label='Table')), ('contact', wagtail.core.blocks.StructBlock([('contact', wagtail.snippets.blocks.SnippetChooserBlock('personal.Contact', label='Contact')), ('information', wagtail.core.blocks.TextBlock(label='Information', required=False))], label='Contact')), ('video', mpicms.base.blocks.VideoBlock(label='Video'))], blank=True, null=True, verbose_name='content'), + ), + ] diff --git a/mpicms/events/migrations/0014_auto_20210114_1926.py b/mpicms/events/migrations/0014_auto_20210114_1926.py new file mode 100644 index 0000000..8832f0e --- /dev/null +++ b/mpicms/events/migrations/0014_auto_20210114_1926.py @@ -0,0 +1,32 @@ +# Generated by Django 3.1 on 2021-01-14 18:26 + +from django.db import migrations +import mpicms.base.blocks +import wagtail.core.blocks +import wagtail.core.fields +import wagtail.snippets.blocks + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0013_auto_20200119_1857'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='body', + field=wagtail.core.fields.StreamField([('richtext', wagtail.core.blocks.RichTextBlock(label='Editor')), ('markdown', mpicms.base.blocks.MarkdownBlock(label='Raw Markdown')), ('table', mpicms.base.blocks.TableBlock(label='Table')), ('contact', wagtail.core.blocks.StructBlock([('contact', wagtail.snippets.blocks.SnippetChooserBlock('personal.Contact', label='Contact')), ('information', wagtail.core.blocks.TextBlock(label='Information', required=False))], label='Contact')), ('video', mpicms.base.blocks.VideoBlock(label='Video'))], blank=True, verbose_name='content'), + ), + migrations.AlterField( + model_name='event', + name='body_de', + field=wagtail.core.fields.StreamField([('richtext', wagtail.core.blocks.RichTextBlock(label='Editor')), ('markdown', mpicms.base.blocks.MarkdownBlock(label='Raw Markdown')), ('table', mpicms.base.blocks.TableBlock(label='Table')), ('contact', wagtail.core.blocks.StructBlock([('contact', wagtail.snippets.blocks.SnippetChooserBlock('personal.Contact', label='Contact')), ('information', wagtail.core.blocks.TextBlock(label='Information', required=False))], label='Contact')), ('video', mpicms.base.blocks.VideoBlock(label='Video'))], blank=True, null=True, verbose_name='content'), + ), + migrations.AlterField( + model_name='event', + name='body_en', + field=wagtail.core.fields.StreamField([('richtext', wagtail.core.blocks.RichTextBlock(label='Editor')), ('markdown', mpicms.base.blocks.MarkdownBlock(label='Raw Markdown')), ('table', mpicms.base.blocks.TableBlock(label='Table')), ('contact', wagtail.core.blocks.StructBlock([('contact', wagtail.snippets.blocks.SnippetChooserBlock('personal.Contact', label='Contact')), ('information', wagtail.core.blocks.TextBlock(label='Information', required=False))], label='Contact')), ('video', mpicms.base.blocks.VideoBlock(label='Video'))], blank=True, null=True, verbose_name='content'), + ), + ] diff --git a/mpicms/news/migrations/0024_auto_20210114_1926.py b/mpicms/news/migrations/0024_auto_20210114_1926.py new file mode 100644 index 0000000..4930fa2 --- /dev/null +++ b/mpicms/news/migrations/0024_auto_20210114_1926.py @@ -0,0 +1,32 @@ +# Generated by Django 3.1 on 2021-01-14 18:26 + +from django.db import migrations +import mpicms.base.blocks +import wagtail.core.blocks +import wagtail.core.fields +import wagtail.snippets.blocks + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0023_auto_20200304_1706'), + ] + + operations = [ + migrations.AlterField( + model_name='newsentry', + name='body', + field=wagtail.core.fields.StreamField([('richtext', wagtail.core.blocks.RichTextBlock(label='Editor')), ('markdown', mpicms.base.blocks.MarkdownBlock(label='Raw Markdown')), ('table', mpicms.base.blocks.TableBlock(label='Table')), ('contact', wagtail.core.blocks.StructBlock([('contact', wagtail.snippets.blocks.SnippetChooserBlock('personal.Contact', label='Contact')), ('information', wagtail.core.blocks.TextBlock(label='Information', required=False))], label='Contact')), ('video', mpicms.base.blocks.VideoBlock(label='Video'))], blank=True, verbose_name='content'), + ), + migrations.AlterField( + model_name='newsentry', + name='body_de', + field=wagtail.core.fields.StreamField([('richtext', wagtail.core.blocks.RichTextBlock(label='Editor')), ('markdown', mpicms.base.blocks.MarkdownBlock(label='Raw Markdown')), ('table', mpicms.base.blocks.TableBlock(label='Table')), ('contact', wagtail.core.blocks.StructBlock([('contact', wagtail.snippets.blocks.SnippetChooserBlock('personal.Contact', label='Contact')), ('information', wagtail.core.blocks.TextBlock(label='Information', required=False))], label='Contact')), ('video', mpicms.base.blocks.VideoBlock(label='Video'))], blank=True, null=True, verbose_name='content'), + ), + migrations.AlterField( + model_name='newsentry', + name='body_en', + field=wagtail.core.fields.StreamField([('richtext', wagtail.core.blocks.RichTextBlock(label='Editor')), ('markdown', mpicms.base.blocks.MarkdownBlock(label='Raw Markdown')), ('table', mpicms.base.blocks.TableBlock(label='Table')), ('contact', wagtail.core.blocks.StructBlock([('contact', wagtail.snippets.blocks.SnippetChooserBlock('personal.Contact', label='Contact')), ('information', wagtail.core.blocks.TextBlock(label='Information', required=False))], label='Contact')), ('video', mpicms.base.blocks.VideoBlock(label='Video'))], blank=True, null=True, verbose_name='content'), + ), + ] diff --git a/mpicms/templates/base/wiki_page.html b/mpicms/templates/base/wiki_page.html index 5871a5d..9ba5975 100644 --- a/mpicms/templates/base/wiki_page.html +++ b/mpicms/templates/base/wiki_page.html @@ -15,10 +15,8 @@

{{ page.title }}

{% endif %}
-

{% for block in page.body %} {% include_block block %} {% endfor %} -

-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/patches/Fix-typo-in-ogg-media-format-description.patch b/patches/Fix-typo-in-ogg-media-format-description.patch new file mode 100644 index 0000000..e4887a8 --- /dev/null +++ b/patches/Fix-typo-in-ogg-media-format-description.patch @@ -0,0 +1,26 @@ +From a34ec1288a11bd5e27ccc9f693da47c1692f973d Mon Sep 17 00:00:00 2001 +From: Donald Buczek +Date: Tue, 19 Jan 2021 14:44:32 +0100 +Subject: [PATCH] Fix typo in ogg media format description + +https://github.com/neon-jungle/wagtailvideos/pull/50 +--- + lib/python3.7/site-packages/wagtailvideos/models.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/python3.7/site-packages/wagtailvideos/models.py b/lib/python3.7/site-packages/wagtailvideos/models.py +index 75c8e0e..c0ab41b 100644 +--- a/lib/python3.7/site-packages/wagtailvideos/models.py ++++ b/lib/python3.7/site-packages/wagtailvideos/models.py +@@ -47,7 +47,7 @@ class VideoQuality(ChoiceEnum): + class MediaFormats(ChoiceEnum): + webm = 'VP8 and Vorbis in WebM' + mp4 = 'H.264 and MP3 in Mp4' +- ogg = 'Theora and Voris in Ogg' ++ ogg = 'Theora and Vorbis in Ogg' + + def get_quality_param(self, quality): + if self is MediaFormats.webm: +-- +2.26.2 + diff --git a/requirements/base.in b/requirements/base.in index 45594a4..c85d10f 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -12,3 +12,4 @@ markdown pygments ics django-auth-ldap +git+https://github.com/neon-jungle/wagtailvideos@3cd93351b67c7d72a0b6b4ac74a62410d5e6bccb diff --git a/requirements/base.txt b/requirements/base.txt index 12cd52a..3c76723 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -10,12 +10,13 @@ beautifulsoup4==4.8.2 # via wagtail certifi==2020.6.20 # via requests chardet==3.0.4 # via requests django-auth-ldap==2.2.0 # via -r base.in +django-enumchoicefield==2.0.0 # via wagtailvideos django-filter==2.3.0 # via wagtail django-modelcluster==5.0.2 # via wagtail django-modeltranslation==0.15.1 # via wagtail-modeltranslation django-taggit==1.3.0 # via wagtail django-treebeard==4.3.1 # via wagtail -django==3.1 # via -r base.in, django-auth-ldap, django-filter, django-modeltranslation, django-taggit, django-treebeard, djangorestframework, wagtail +django==3.1 # via -r base.in, django-auth-ldap, django-enumchoicefield, django-filter, django-modeltranslation, django-taggit, django-treebeard, djangorestframework, wagtail, wagtailvideos djangorestframework==3.11.1 # via wagtail draftjs-exporter==2.1.7 # via wagtail et-xmlfile==1.0.1 # via openpyxl @@ -44,7 +45,8 @@ tatsu==4.4.0 # via ics unidecode==1.1.1 # via wagtail urllib3==1.25.10 # via requests wagtail-modeltranslation==0.10.15 # via -r base.in -wagtail==2.10 # via -r base.in, wagtail-modeltranslation +wagtail==2.10 # via -r base.in, wagtail-modeltranslation, wagtailvideos +git+https://github.com/neon-jungle/wagtailvideos@3cd93351b67c7d72a0b6b4ac74a62410d5e6bccb # via -r base.in webencodings==0.5.1 # via html5lib willow==1.4 # via wagtail xlrd==1.2.0 # via tablib diff --git a/requirements/dev.txt b/requirements/dev.txt index e083f66..f0c8b86 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -18,12 +18,13 @@ decorator==4.4.2 # via ipython, traitlets django-auth-ldap==2.2.0 # via -r ./test.txt django-coverage-plugin==1.8.0 # via -r ./test.txt django-debug-toolbar==2.2 # via -r dev.in +django-enumchoicefield==2.0.0 # via -r ./test.txt, wagtailvideos django-filter==2.3.0 # via -r ./test.txt, wagtail django-modelcluster==5.0.2 # via -r ./test.txt, wagtail django-modeltranslation==0.15.1 # via -r ./test.txt, wagtail-modeltranslation django-taggit==1.3.0 # via -r ./test.txt, wagtail django-treebeard==4.3.1 # via -r ./test.txt, wagtail -django==3.1 # via -r ./test.txt, django-auth-ldap, django-debug-toolbar, django-filter, django-modeltranslation, django-taggit, django-treebeard, djangorestframework, wagtail +django==3.1 # via -r ./test.txt, django-auth-ldap, django-debug-toolbar, django-enumchoicefield, django-filter, django-modeltranslation, django-taggit, django-treebeard, djangorestframework, wagtail, wagtailvideos djangorestframework==3.11.1 # via -r ./test.txt, wagtail draftjs-exporter==2.1.7 # via -r ./test.txt, wagtail et-xmlfile==1.0.1 # via -r ./test.txt, openpyxl @@ -86,7 +87,8 @@ typed-ast==1.4.1 # via astroid unidecode==1.1.1 # via -r ./test.txt, wagtail urllib3==1.25.10 # via -r ./test.txt, requests wagtail-modeltranslation==0.10.15 # via -r ./test.txt -wagtail==2.10 # via -r ./test.txt, wagtail-modeltranslation +wagtail==2.10 # via -r ./test.txt, wagtail-modeltranslation, wagtailvideos +git+https://github.com/neon-jungle/wagtailvideos@3cd93351b67c7d72a0b6b4ac74a62410d5e6bccb # via -r ./test.txt wcwidth==0.2.5 # via prompt-toolkit webencodings==0.5.1 # via -r ./test.txt, html5lib willow==1.4 # via -r ./test.txt, wagtail diff --git a/requirements/production.txt b/requirements/production.txt index 54e5f5b..508fc15 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -10,12 +10,13 @@ beautifulsoup4==4.8.2 # via -r ./base.txt, wagtail certifi==2020.6.20 # via -r ./base.txt, requests chardet==3.0.4 # via -r ./base.txt, requests django-auth-ldap==2.2.0 # via -r ./base.txt +django-enumchoicefield==2.0.0 # via -r ./base.txt, wagtailvideos django-filter==2.3.0 # via -r ./base.txt, wagtail django-modelcluster==5.0.2 # via -r ./base.txt, wagtail django-modeltranslation==0.15.1 # via -r ./base.txt, wagtail-modeltranslation django-taggit==1.3.0 # via -r ./base.txt, wagtail django-treebeard==4.3.1 # via -r ./base.txt, wagtail -django==3.1 # via -r ./base.txt, django-auth-ldap, django-filter, django-modeltranslation, django-taggit, django-treebeard, djangorestframework, wagtail +django==3.1 # via -r ./base.txt, django-auth-ldap, django-enumchoicefield, django-filter, django-modeltranslation, django-taggit, django-treebeard, djangorestframework, wagtail, wagtailvideos djangorestframework==3.11.1 # via -r ./base.txt, wagtail draftjs-exporter==2.1.7 # via -r ./base.txt, wagtail et-xmlfile==1.0.1 # via -r ./base.txt, openpyxl @@ -44,7 +45,8 @@ tatsu==4.4.0 # via -r ./base.txt, ics unidecode==1.1.1 # via -r ./base.txt, wagtail urllib3==1.25.10 # via -r ./base.txt, requests wagtail-modeltranslation==0.10.15 # via -r ./base.txt -wagtail==2.10 # via -r ./base.txt, wagtail-modeltranslation +wagtail==2.10 # via -r ./base.txt, wagtail-modeltranslation, wagtailvideos +git+https://github.com/neon-jungle/wagtailvideos@3cd93351b67c7d72a0b6b4ac74a62410d5e6bccb # via -r ./base.txt webencodings==0.5.1 # via -r ./base.txt, html5lib willow==1.4 # via -r ./base.txt, wagtail xlrd==1.2.0 # via -r ./base.txt, tablib diff --git a/requirements/test.txt b/requirements/test.txt index b3850e1..635290a 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -13,12 +13,13 @@ chardet==3.0.4 # via -r ./base.txt, requests coverage==5.2.1 # via -r test.in, django-coverage-plugin django-auth-ldap==2.2.0 # via -r ./base.txt django-coverage-plugin==1.8.0 # via -r test.in +django-enumchoicefield==2.0.0 # via -r ./base.txt, wagtailvideos django-filter==2.3.0 # via -r ./base.txt, wagtail django-modelcluster==5.0.2 # via -r ./base.txt, wagtail django-modeltranslation==0.15.1 # via -r ./base.txt, wagtail-modeltranslation django-taggit==1.3.0 # via -r ./base.txt, wagtail django-treebeard==4.3.1 # via -r ./base.txt, wagtail -django==3.1 # via -r ./base.txt, django-auth-ldap, django-filter, django-modeltranslation, django-taggit, django-treebeard, djangorestframework, wagtail +django==3.1 # via -r ./base.txt, django-auth-ldap, django-enumchoicefield, django-filter, django-modeltranslation, django-taggit, django-treebeard, djangorestframework, wagtail, wagtailvideos djangorestframework==3.11.1 # via -r ./base.txt, wagtail draftjs-exporter==2.1.7 # via -r ./base.txt, wagtail et-xmlfile==1.0.1 # via -r ./base.txt, openpyxl @@ -60,7 +61,8 @@ toml==0.10.1 # via pytest unidecode==1.1.1 # via -r ./base.txt, wagtail urllib3==1.25.10 # via -r ./base.txt, requests wagtail-modeltranslation==0.10.15 # via -r ./base.txt -wagtail==2.10 # via -r ./base.txt, wagtail-modeltranslation +wagtail==2.10 # via -r ./base.txt, wagtail-modeltranslation, wagtailvideos +git+https://github.com/neon-jungle/wagtailvideos@3cd93351b67c7d72a0b6b4ac74a62410d5e6bccb # via -r ./base.txt webencodings==0.5.1 # via -r ./base.txt, html5lib willow==1.4 # via -r ./base.txt, wagtail xlrd==1.2.0 # via -r ./base.txt, tablib