diff --git a/app/articles/migrations/0128_alter_articlepage_body_alter_focusedarticlepage_body.py b/app/articles/migrations/0128_alter_articlepage_body_alter_focusedarticlepage_body.py new file mode 100644 index 000000000..ff204a072 --- /dev/null +++ b/app/articles/migrations/0128_alter_articlepage_body_alter_focusedarticlepage_body.py @@ -0,0 +1,27 @@ +# Generated by Django 6.0.5 on 2026-05-20 14:56 +# etna:allowAlterField + +import app.ciim.blocks +import django.core.validators +import wagtail.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('articles', '0127_alter_articlepage_body_alter_focusedarticlepage_body'), + ] + + operations = [ + migrations.AlterField( + model_name='articlepage', + name='body', + field=wagtail.fields.StreamField([('content_section', 47)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'label': 'Heading', 'max_length': 100}), 1: ('wagtail.blocks.CharBlock', (), {'help_text': 'Display a filename with the extension e.g. example.html', 'label': 'Code block title', 'max_length': 100, 'required': False}), 2: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('html', 'HTML'), ('javascript', 'JavaScript'), ('python', 'Python'), ('xml', 'XML'), ('json', 'JSON'), ('bash', 'Bash'), ('git', 'git'), ('markdown', 'Markdown'), ('graphql', 'GraphQL'), ('powershell', 'PowerShell'), ('yaml', 'YAML')], 'label': 'Code language', 'required': False}), 3: ('wagtail.blocks.TextBlock', (), {'max_length': 500}), 4: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Allow copy to clipboard', 'required': False}), 5: ('wagtail.blocks.StructBlock', [[('filename', 1), ('language', 2), ('code', 3), ('allow_copying', 4)]], {}), 6: ('wagtail.blocks.CharBlock', (), {'label': 'Supertitle', 'max_length': 20, 'required': False}), 7: ('wagtail.blocks.CharBlock', (), {'label': 'Title', 'max_length': 100}), 8: ('wagtail.blocks.CharBlock', (), {'label': 'Description'}), 9: ('wagtail.blocks.URLBlock', (), {'label': 'URL'}), 10: ('app.core.blocks.image.APIImageChooserBlock', (), {'label': 'Image', 'required': False}), 11: ('wagtail.blocks.StructBlock', [[('supertitle', 6), ('title', 7), ('description', 8), ('url', 9), ('image', 10)]], {}), 12: ('app.core.blocks.page_chooser.APIPageChooserBlock', (), {'label': 'Page', 'page_type': ['wagtailcore.Page'], 'required': True}), 13: ('wagtail.blocks.CharBlock', (), {'help_text': 'Optional override for the teaser text', 'label': 'Teaser text override', 'required': False}), 14: ('wagtail.blocks.StructBlock', [[('page', 12), ('teaser_text', 13)]], {}), 15: ('app.core.blocks.image.APIImageChooserBlock', (), {'rendition_size': 'max-900x900', 'required': True, 'verbose_name': 'Image'}), 16: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link'], 'help_text': 'If provided, displays directly below the image. Can be used to specify sources, transcripts or other useful metadata.', 'label': 'Caption (optional)', 'required': False}), 17: ('wagtail.blocks.StructBlock', [[('image', 15), ('caption', 16)]], {}), 18: ('wagtail.blocks.CharBlock', (), {'required': False}), 19: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 20: ('wagtail.blocks.ListBlock', (17,), {}), 21: ('wagtail.blocks.StructBlock', [[('title', 18), ('description', 19), ('images', 20)]], {}), 22: ('wagtail.blocks.CharBlock', (), {'help_text': 'A descriptive title for the media block', 'required': True}), 23: ('app.core.blocks.image.APIImageChooserBlock', (), {'help_text': 'A thumbnail image for the media block', 'rendition_size': 'fill-960x540', 'required': False}), 24: ('app.media.blocks.MediaChooserBlock', (), {}), 25: ('wagtail.blocks.StructBlock', [[('title', 22), ('thumbnail', 23), ('media', 24)]], {}), 26: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul']}), 27: ('wagtail.blocks.StructBlock', [[('text', 26)]], {}), 28: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul'], 'required': True}), 29: ('wagtail.blocks.CharBlock', (), {'help_text': 'The name of the person being quoted. e.g. King Edward VIII', 'max_length': 100}), 30: ('wagtail.blocks.CharBlock', (), {'help_text': 'The title of the work or document from which the quote is taken. e.g. The Telegraph, 23 June 1986', 'max_length': 100, 'required': False}), 31: ('app.core.blocks.page_chooser.APIPageChooserBlock', (), {'help_text': 'Reference another page published on the site', 'label': 'Internal page', 'required': False}), 32: ('wagtail.blocks.URLBlock', (), {'help_text': 'Add a URL here to refer to an external source', 'label': 'External link', 'required': False}), 33: ('wagtail.blocks.StructBlock', [[('citation_internal_link', 31), ('citation_external_link', 32)]], {}), 34: ('wagtail.blocks.StructBlock', [[('citation', 30), ('source_link', 33)]], {}), 35: ('wagtail.blocks.StructBlock', [[('quote', 28), ('attribution', 29), ('source', 34)]], {}), 36: ('wagtail.blocks.ListBlock', (app.ciim.blocks.RecordLinkBlock,), {'label': 'Items', 'verbose_name': 'Record links'}), 37: ('wagtail.blocks.StructBlock', [[('items', 36)]], {}), 38: ('wagtail.blocks.CharBlock', (), {'label': 'Sub-heading', 'max_length': 100}), 39: ('wagtail.blocks.StructBlock', [[('heading', 38)]], {}), 40: ('wagtail.blocks.CharBlock', (), {'label': 'Title', 'max_length': 100, 'required': True}), 41: ('wagtail.blocks.CharBlock', (), {'label': 'YouTube Video ID', 'max_length': 11, 'required': True, 'validators': [django.core.validators.RegexValidator(message='Invalid YouTube Video ID', regex='^[a-zA-Z0-9_-]{11}$')]}), 42: ('app.core.blocks.image.APIImageChooserBlock', (), {'label': 'Preview Image', 'rendition_size': 'fill-640x360', 'required': True}), 43: ('wagtail.blocks.RichTextBlock', (), {'label': 'Transcript', 'required': False}), 44: ('wagtail.blocks.BooleanBlock', (), {'help_text': 'Tick if the video has captions on YouTube', 'label': 'Captions available', 'required': False}), 45: ('wagtail.blocks.StructBlock', [[('title', 40), ('video_id', 41), ('preview_image', 42), ('transcript', 43), ('captions_available', 44)]], {}), 46: ('wagtail.blocks.StreamBlock', [[('code', 5), ('featured_external_link', 11), ('featured_page', 14), ('image', 17), ('image_gallery', 21), ('media', 25), ('paragraph', 27), ('quote', 35), ('record_links', 37), ('sub_heading', 39), ('youtube_video', 45)]], {'required': False}), 47: ('wagtail.blocks.StructBlock', [[('heading', 0), ('content', 46)]], {})}, null=True), + ), + migrations.AlterField( + model_name='focusedarticlepage', + name='body', + field=wagtail.fields.StreamField([('content_section', 47)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'label': 'Heading', 'max_length': 100}), 1: ('wagtail.blocks.CharBlock', (), {'help_text': 'Display a filename with the extension e.g. example.html', 'label': 'Code block title', 'max_length': 100, 'required': False}), 2: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('html', 'HTML'), ('javascript', 'JavaScript'), ('python', 'Python'), ('xml', 'XML'), ('json', 'JSON'), ('bash', 'Bash'), ('git', 'git'), ('markdown', 'Markdown'), ('graphql', 'GraphQL'), ('powershell', 'PowerShell'), ('yaml', 'YAML')], 'label': 'Code language', 'required': False}), 3: ('wagtail.blocks.TextBlock', (), {'max_length': 500}), 4: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Allow copy to clipboard', 'required': False}), 5: ('wagtail.blocks.StructBlock', [[('filename', 1), ('language', 2), ('code', 3), ('allow_copying', 4)]], {}), 6: ('wagtail.blocks.CharBlock', (), {'label': 'Supertitle', 'max_length': 20, 'required': False}), 7: ('wagtail.blocks.CharBlock', (), {'label': 'Title', 'max_length': 100}), 8: ('wagtail.blocks.CharBlock', (), {'label': 'Description'}), 9: ('wagtail.blocks.URLBlock', (), {'label': 'URL'}), 10: ('app.core.blocks.image.APIImageChooserBlock', (), {'label': 'Image', 'required': False}), 11: ('wagtail.blocks.StructBlock', [[('supertitle', 6), ('title', 7), ('description', 8), ('url', 9), ('image', 10)]], {}), 12: ('app.core.blocks.page_chooser.APIPageChooserBlock', (), {'label': 'Page', 'page_type': ['wagtailcore.Page'], 'required': True}), 13: ('wagtail.blocks.CharBlock', (), {'help_text': 'Optional override for the teaser text', 'label': 'Teaser text override', 'required': False}), 14: ('wagtail.blocks.StructBlock', [[('page', 12), ('teaser_text', 13)]], {}), 15: ('app.core.blocks.image.APIImageChooserBlock', (), {'rendition_size': 'max-900x900', 'required': True, 'verbose_name': 'Image'}), 16: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link'], 'help_text': 'If provided, displays directly below the image. Can be used to specify sources, transcripts or other useful metadata.', 'label': 'Caption (optional)', 'required': False}), 17: ('wagtail.blocks.StructBlock', [[('image', 15), ('caption', 16)]], {}), 18: ('wagtail.blocks.CharBlock', (), {'required': False}), 19: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 20: ('wagtail.blocks.ListBlock', (17,), {}), 21: ('wagtail.blocks.StructBlock', [[('title', 18), ('description', 19), ('images', 20)]], {}), 22: ('wagtail.blocks.CharBlock', (), {'help_text': 'A descriptive title for the media block', 'required': True}), 23: ('app.core.blocks.image.APIImageChooserBlock', (), {'help_text': 'A thumbnail image for the media block', 'rendition_size': 'fill-960x540', 'required': False}), 24: ('app.media.blocks.MediaChooserBlock', (), {}), 25: ('wagtail.blocks.StructBlock', [[('title', 22), ('thumbnail', 23), ('media', 24)]], {}), 26: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul']}), 27: ('wagtail.blocks.StructBlock', [[('text', 26)]], {}), 28: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul'], 'required': True}), 29: ('wagtail.blocks.CharBlock', (), {'help_text': 'The name of the person being quoted. e.g. King Edward VIII', 'max_length': 100}), 30: ('wagtail.blocks.CharBlock', (), {'help_text': 'The title of the work or document from which the quote is taken. e.g. The Telegraph, 23 June 1986', 'max_length': 100, 'required': False}), 31: ('app.core.blocks.page_chooser.APIPageChooserBlock', (), {'help_text': 'Reference another page published on the site', 'label': 'Internal page', 'required': False}), 32: ('wagtail.blocks.URLBlock', (), {'help_text': 'Add a URL here to refer to an external source', 'label': 'External link', 'required': False}), 33: ('wagtail.blocks.StructBlock', [[('citation_internal_link', 31), ('citation_external_link', 32)]], {}), 34: ('wagtail.blocks.StructBlock', [[('citation', 30), ('source_link', 33)]], {}), 35: ('wagtail.blocks.StructBlock', [[('quote', 28), ('attribution', 29), ('source', 34)]], {}), 36: ('wagtail.blocks.ListBlock', (app.ciim.blocks.RecordLinkBlock,), {'label': 'Items', 'verbose_name': 'Record links'}), 37: ('wagtail.blocks.StructBlock', [[('items', 36)]], {}), 38: ('wagtail.blocks.CharBlock', (), {'label': 'Sub-heading', 'max_length': 100}), 39: ('wagtail.blocks.StructBlock', [[('heading', 38)]], {}), 40: ('wagtail.blocks.CharBlock', (), {'label': 'Title', 'max_length': 100, 'required': True}), 41: ('wagtail.blocks.CharBlock', (), {'label': 'YouTube Video ID', 'max_length': 11, 'required': True, 'validators': [django.core.validators.RegexValidator(message='Invalid YouTube Video ID', regex='^[a-zA-Z0-9_-]{11}$')]}), 42: ('app.core.blocks.image.APIImageChooserBlock', (), {'label': 'Preview Image', 'rendition_size': 'fill-640x360', 'required': True}), 43: ('wagtail.blocks.RichTextBlock', (), {'label': 'Transcript', 'required': False}), 44: ('wagtail.blocks.BooleanBlock', (), {'help_text': 'Tick if the video has captions on YouTube', 'label': 'Captions available', 'required': False}), 45: ('wagtail.blocks.StructBlock', [[('title', 40), ('video_id', 41), ('preview_image', 42), ('transcript', 43), ('captions_available', 44)]], {}), 46: ('wagtail.blocks.StreamBlock', [[('code', 5), ('featured_external_link', 11), ('featured_page', 14), ('image', 17), ('image_gallery', 21), ('media', 25), ('paragraph', 27), ('quote', 35), ('record_links', 37), ('sub_heading', 39), ('youtube_video', 45)]], {'required': False}), 47: ('wagtail.blocks.StructBlock', [[('heading', 0), ('content', 46)]], {})}, null=True), + ), + ] diff --git a/app/blog/migrations/0027_alter_blogpostpage_body.py b/app/blog/migrations/0027_alter_blogpostpage_body.py new file mode 100644 index 000000000..038b1b2a5 --- /dev/null +++ b/app/blog/migrations/0027_alter_blogpostpage_body.py @@ -0,0 +1,22 @@ +# Generated by Django 6.0.5 on 2026-05-20 14:56 +# etna:allowAlterField + +import app.ciim.blocks +import django.core.validators +import wagtail.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('blog', '0026_alter_blogpostpage_body'), + ] + + operations = [ + migrations.AlterField( + model_name='blogpostpage', + name='body', + field=wagtail.fields.StreamField([('call_to_action', 6), ('code', 11), ('contact', 19), ('document', 23), ('featured_external_link', 29), ('featured_page', 32), ('image', 35), ('image_gallery', 37), ('inset_text', 39), ('media', 43), ('paragraph', 39), ('partner_logos', 47), ('quote', 55), ('record_links', 57), ('table', 59), ('youtube_video', 65), ('content_section', 70)], block_lookup={0: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul'], 'max_length': 100}), 1: ('wagtail.blocks.CharBlock', (), {}), 2: ('app.core.blocks.page_chooser.APIPageChooserBlock', (), {'required': False}), 3: ('wagtail.blocks.URLBlock', (), {'required': False}), 4: ('wagtail.blocks.BooleanBlock', (), {'help_text': 'Use the accented button style', 'label': 'Accented', 'required': False}), 5: ('wagtail.blocks.StructBlock', [[('label', 1), ('link', 2), ('external_link', 3), ('accented', 4)]], {}), 6: ('wagtail.blocks.StructBlock', [[('body', 0), ('button', 5)]], {}), 7: ('wagtail.blocks.CharBlock', (), {'help_text': 'Display a filename with the extension e.g. example.html', 'label': 'Code block title', 'max_length': 100, 'required': False}), 8: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('html', 'HTML'), ('javascript', 'JavaScript'), ('python', 'Python'), ('xml', 'XML'), ('json', 'JSON'), ('bash', 'Bash'), ('git', 'git'), ('markdown', 'Markdown'), ('graphql', 'GraphQL'), ('powershell', 'PowerShell'), ('yaml', 'YAML')], 'label': 'Code language', 'required': False}), 9: ('wagtail.blocks.TextBlock', (), {'max_length': 500}), 10: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Allow copy to clipboard', 'required': False}), 11: ('wagtail.blocks.StructBlock', [[('filename', 7), ('language', 8), ('code', 9), ('allow_copying', 10)]], {}), 12: ('wagtail.blocks.CharBlock', (), {'verbose_name': 'Title'}), 13: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['link'], 'required': False}), 14: ('wagtail.blocks.TextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 15: ('wagtail.blocks.CharBlock', (), {'required': False}), 16: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'required': False}), 17: ('wagtail.blocks.EmailBlock', (), {'required': False}), 18: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 19: ('wagtail.blocks.StructBlock', [[('title', 12), ('body', 13), ('address', 14), ('telephone', 15), ('chat_link', 3), ('chat_note', 16), ('email', 17), ('website_link', 3), ('social_media', 18)]], {}), 20: ('wagtail.documents.blocks.DocumentChooserBlock', (), {'required': True}), 21: ('wagtail.blocks.StructBlock', [[('file', 20)]], {}), 22: ('wagtail.blocks.ListBlock', (21,), {'min_num': 1}), 23: ('wagtail.blocks.StructBlock', [[('documents', 22)]], {}), 24: ('wagtail.blocks.CharBlock', (), {'label': 'Supertitle', 'max_length': 20, 'required': False}), 25: ('wagtail.blocks.CharBlock', (), {'label': 'Title', 'max_length': 100}), 26: ('wagtail.blocks.CharBlock', (), {'label': 'Description'}), 27: ('wagtail.blocks.URLBlock', (), {'label': 'URL'}), 28: ('app.core.blocks.image.APIImageChooserBlock', (), {'label': 'Image', 'required': False}), 29: ('wagtail.blocks.StructBlock', [[('supertitle', 24), ('title', 25), ('description', 26), ('url', 27), ('image', 28)]], {}), 30: ('app.core.blocks.page_chooser.APIPageChooserBlock', (), {'label': 'Page', 'page_type': ['wagtailcore.Page'], 'required': True}), 31: ('wagtail.blocks.CharBlock', (), {'help_text': 'Optional override for the teaser text', 'label': 'Teaser text override', 'required': False}), 32: ('wagtail.blocks.StructBlock', [[('page', 30), ('teaser_text', 31)]], {}), 33: ('app.core.blocks.image.APIImageChooserBlock', (), {'rendition_size': 'max-900x900', 'required': True, 'verbose_name': 'Image'}), 34: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link'], 'help_text': 'If provided, displays directly below the image. Can be used to specify sources, transcripts or other useful metadata.', 'label': 'Caption (optional)', 'required': False}), 35: ('wagtail.blocks.StructBlock', [[('image', 33), ('caption', 34)]], {}), 36: ('wagtail.blocks.ListBlock', (35,), {}), 37: ('wagtail.blocks.StructBlock', [[('title', 15), ('description', 18), ('images', 36)]], {}), 38: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul']}), 39: ('wagtail.blocks.StructBlock', [[('text', 38)]], {}), 40: ('wagtail.blocks.CharBlock', (), {'help_text': 'A descriptive title for the media block', 'required': True}), 41: ('app.core.blocks.image.APIImageChooserBlock', (), {'help_text': 'A thumbnail image for the media block', 'rendition_size': 'fill-960x540', 'required': False}), 42: ('app.media.blocks.MediaChooserBlock', (), {}), 43: ('wagtail.blocks.StructBlock', [[('title', 40), ('thumbnail', 41), ('media', 42)]], {}), 44: ('wagtail.blocks.CharBlock', (), {'help_text': 'Optional override for the partner logos section lead text. Will display a default if not provided.', 'max_length': 40, 'required': False}), 45: ('app.core.blocks.image.PartnerLogoChooserBlock', (), {}), 46: ('wagtail.blocks.ListBlock', (45,), {'max_num': 4, 'required': True}), 47: ('wagtail.blocks.StructBlock', [[('lead_text', 44), ('logos', 46)]], {}), 48: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul'], 'required': True}), 49: ('wagtail.blocks.CharBlock', (), {'help_text': 'The name of the person being quoted. e.g. King Edward VIII', 'max_length': 100}), 50: ('wagtail.blocks.CharBlock', (), {'help_text': 'The title of the work or document from which the quote is taken. e.g. The Telegraph, 23 June 1986', 'max_length': 100, 'required': False}), 51: ('app.core.blocks.page_chooser.APIPageChooserBlock', (), {'help_text': 'Reference another page published on the site', 'label': 'Internal page', 'required': False}), 52: ('wagtail.blocks.URLBlock', (), {'help_text': 'Add a URL here to refer to an external source', 'label': 'External link', 'required': False}), 53: ('wagtail.blocks.StructBlock', [[('citation_internal_link', 51), ('citation_external_link', 52)]], {}), 54: ('wagtail.blocks.StructBlock', [[('citation', 50), ('source_link', 53)]], {}), 55: ('wagtail.blocks.StructBlock', [[('quote', 48), ('attribution', 49), ('source', 54)]], {}), 56: ('wagtail.blocks.ListBlock', (app.ciim.blocks.RecordLinkBlock,), {'label': 'Items', 'verbose_name': 'Record links'}), 57: ('wagtail.blocks.StructBlock', [[('items', 56)]], {}), 58: ('wagtail.contrib.table_block.blocks.TableBlock', (), {'table_options': {'contextMenu': ['row_above', 'row_below', '---------', 'col_left', 'col_right', '---------', 'remove_row', 'remove_col', '---------', 'undo', 'redo', '---------', 'alignment']}}), 59: ('wagtail.blocks.StructBlock', [[('table', 58)]], {}), 60: ('wagtail.blocks.CharBlock', (), {'label': 'Title', 'max_length': 100, 'required': True}), 61: ('wagtail.blocks.CharBlock', (), {'label': 'YouTube Video ID', 'max_length': 11, 'required': True, 'validators': [django.core.validators.RegexValidator(message='Invalid YouTube Video ID', regex='^[a-zA-Z0-9_-]{11}$')]}), 62: ('app.core.blocks.image.APIImageChooserBlock', (), {'label': 'Preview Image', 'rendition_size': 'fill-640x360', 'required': True}), 63: ('wagtail.blocks.RichTextBlock', (), {'label': 'Transcript', 'required': False}), 64: ('wagtail.blocks.BooleanBlock', (), {'help_text': 'Tick if the video has captions on YouTube', 'label': 'Captions available', 'required': False}), 65: ('wagtail.blocks.StructBlock', [[('title', 60), ('video_id', 61), ('preview_image', 62), ('transcript', 63), ('captions_available', 64)]], {}), 66: ('wagtail.blocks.CharBlock', (), {'label': 'Heading', 'max_length': 100}), 67: ('wagtail.blocks.CharBlock', (), {'label': 'Sub-heading', 'max_length': 100}), 68: ('wagtail.blocks.StructBlock', [[('heading', 67)]], {}), 69: ('wagtail.blocks.StreamBlock', [[('call_to_action', 6), ('code', 11), ('contact', 19), ('document', 23), ('featured_external_link', 29), ('featured_page', 32), ('image', 35), ('image_gallery', 37), ('inset_text', 39), ('media', 43), ('paragraph', 39), ('partner_logos', 47), ('quote', 55), ('record_links', 57), ('sub_heading', 68), ('table', 59), ('youtube_video', 65)]], {'required': False}), 70: ('wagtail.blocks.StructBlock', [[('heading', 66), ('content', 69)]], {})}), + ), + ] diff --git a/app/ciim/blocks.py b/app/ciim/blocks.py index 82fe5c7fa..90df58c68 100644 --- a/app/ciim/blocks.py +++ b/app/ciim/blocks.py @@ -48,7 +48,9 @@ def collection(self): class RecordLinksBlock(blocks.StructBlock): - items = blocks.ListBlock(RecordLinkBlock, label=_("Items")) + items = blocks.ListBlock( + RecordLinkBlock, label=_("Items"), verbose_name=_("Record links") + ) class Meta: icon = "box-archive" diff --git a/app/cookies/migrations/0006_alter_cookiedetailspage_body.py b/app/cookies/migrations/0006_alter_cookiedetailspage_body.py new file mode 100644 index 000000000..598fa67de --- /dev/null +++ b/app/cookies/migrations/0006_alter_cookiedetailspage_body.py @@ -0,0 +1,20 @@ +# Generated by Django 6.0.5 on 2026-05-20 14:56 +# etna:allowAlterField + +import wagtail.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('cookies', '0005_alter_cookiedetailspage_body'), + ] + + operations = [ + migrations.AlterField( + model_name='cookiedetailspage', + name='body', + field=wagtail.fields.StreamField([('inset_text', 1), ('paragraph', 1), ('description_list', 6), ('table', 8), ('content_section', 13)], blank=True, block_lookup={0: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul']}), 1: ('wagtail.blocks.StructBlock', [[('text', 0)]], {}), 2: ('wagtail.blocks.CharBlock', (), {'required': True, 'verbose_name': 'Term'}), 3: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code']}), 4: ('wagtail.blocks.StructBlock', [[('term', 2), ('detail', 3)]], {}), 5: ('wagtail.blocks.ListBlock', (4,), {}), 6: ('wagtail.blocks.StructBlock', [[('items', 5)]], {}), 7: ('wagtail.contrib.table_block.blocks.TableBlock', (), {'table_options': {'contextMenu': ['row_above', 'row_below', '---------', 'col_left', 'col_right', '---------', 'remove_row', 'remove_col', '---------', 'undo', 'redo', '---------', 'alignment']}}), 8: ('wagtail.blocks.StructBlock', [[('table', 7)]], {}), 9: ('wagtail.blocks.CharBlock', (), {'label': 'Heading', 'max_length': 100}), 10: ('wagtail.blocks.CharBlock', (), {'label': 'Sub-heading', 'max_length': 100}), 11: ('wagtail.blocks.StructBlock', [[('heading', 10)]], {}), 12: ('wagtail.blocks.StreamBlock', [[('inset_text', 1), ('paragraph', 1), ('description_list', 6), ('sub_heading', 11), ('table', 8)]], {'required': False}), 13: ('wagtail.blocks.StructBlock', [[('heading', 9), ('content', 12)]], {})}, null=True), + ), + ] diff --git a/app/core/blocks/contact.py b/app/core/blocks/contact.py index 572ee6ef9..140fa1faf 100644 --- a/app/core/blocks/contact.py +++ b/app/core/blocks/contact.py @@ -5,7 +5,7 @@ class ContactBlock(blocks.StructBlock): - title = blocks.CharBlock() + title = blocks.CharBlock(verbose_name="Title") body = APIRichTextBlock(required=False, features=["link"]) address = blocks.TextBlock( required=False, features=settings.INLINE_RICH_TEXT_FEATURES diff --git a/app/core/blocks/image.py b/app/core/blocks/image.py index d9e8681a3..e356c8c0a 100644 --- a/app/core/blocks/image.py +++ b/app/core/blocks/image.py @@ -51,7 +51,9 @@ def get_api_representation(self, value, context=None): class ContentImageBlock(blocks.StructBlock): - image = APIImageChooserBlock(rendition_size="max-900x900", required=True) + image = APIImageChooserBlock( + rendition_size="max-900x900", required=True, verbose_name="Image" + ) caption = APIRichTextBlock( features=["bold", "italic", "link"], help_text=( diff --git a/app/core/blocks/lists.py b/app/core/blocks/lists.py index c1c9f7ee8..a6738b53c 100644 --- a/app/core/blocks/lists.py +++ b/app/core/blocks/lists.py @@ -34,7 +34,7 @@ class Meta: class DescriptionListItemBlock(blocks.StructBlock): - term = blocks.CharBlock(required=True) + term = blocks.CharBlock(required=True, verbose_name="Term") detail = APIRichTextBlock(features=settings.INLINE_RICH_TEXT_FEATURES) class Meta: diff --git a/app/foi/migrations/0004_alter_foirequestpage_annexe_and_more.py b/app/foi/migrations/0004_alter_foirequestpage_annexe_and_more.py new file mode 100644 index 000000000..c92e4dfe4 --- /dev/null +++ b/app/foi/migrations/0004_alter_foirequestpage_annexe_and_more.py @@ -0,0 +1,30 @@ +# Generated by Django 6.0.5 on 2026-05-20 14:56 +# etna:allowAlterField + +import wagtail.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('foi', '0003_alter_foirequestpage_annexe_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='foirequestpage', + name='annexe', + field=wagtail.fields.StreamField([('content_section', 20), ('paragraph', 4), ('description_list', 9), ('table', 11), ('details', 14), ('document', 18), ('inset_text', 4)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'label': 'Heading', 'max_length': 100}), 1: ('wagtail.blocks.CharBlock', (), {'label': 'Sub-heading', 'max_length': 100}), 2: ('wagtail.blocks.StructBlock', [[('heading', 1)]], {}), 3: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul']}), 4: ('wagtail.blocks.StructBlock', [[('text', 3)]], {}), 5: ('wagtail.blocks.CharBlock', (), {'required': True, 'verbose_name': 'Term'}), 6: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code']}), 7: ('wagtail.blocks.StructBlock', [[('term', 5), ('detail', 6)]], {}), 8: ('wagtail.blocks.ListBlock', (7,), {}), 9: ('wagtail.blocks.StructBlock', [[('items', 8)]], {}), 10: ('wagtail.contrib.table_block.blocks.TableBlock', (), {'table_options': {'contextMenu': ['row_above', 'row_below', '---------', 'col_left', 'col_right', '---------', 'remove_row', 'remove_col', '---------', 'undo', 'redo', '---------', 'alignment']}}), 11: ('wagtail.blocks.StructBlock', [[('table', 10)]], {}), 12: ('wagtail.blocks.CharBlock', (), {'required': True}), 13: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul'], 'required': True}), 14: ('wagtail.blocks.StructBlock', [[('title', 12), ('body', 13)]], {}), 15: ('wagtail.documents.blocks.DocumentChooserBlock', (), {'required': True}), 16: ('wagtail.blocks.StructBlock', [[('file', 15)]], {}), 17: ('wagtail.blocks.ListBlock', (16,), {'min_num': 1}), 18: ('wagtail.blocks.StructBlock', [[('documents', 17)]], {}), 19: ('wagtail.blocks.StreamBlock', [[('sub_heading', 2), ('paragraph', 4), ('description_list', 9), ('table', 11), ('details', 14), ('document', 18), ('inset_text', 4)]], {'required': False}), 20: ('wagtail.blocks.StructBlock', [[('heading', 0), ('content', 19)]], {})}, null=True), + ), + migrations.AlterField( + model_name='foirequestpage', + name='request', + field=wagtail.fields.StreamField([('content_section', 20), ('paragraph', 4), ('description_list', 9), ('table', 11), ('details', 14), ('document', 18), ('inset_text', 4)], block_lookup={0: ('wagtail.blocks.CharBlock', (), {'label': 'Heading', 'max_length': 100}), 1: ('wagtail.blocks.CharBlock', (), {'label': 'Sub-heading', 'max_length': 100}), 2: ('wagtail.blocks.StructBlock', [[('heading', 1)]], {}), 3: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul']}), 4: ('wagtail.blocks.StructBlock', [[('text', 3)]], {}), 5: ('wagtail.blocks.CharBlock', (), {'required': True, 'verbose_name': 'Term'}), 6: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code']}), 7: ('wagtail.blocks.StructBlock', [[('term', 5), ('detail', 6)]], {}), 8: ('wagtail.blocks.ListBlock', (7,), {}), 9: ('wagtail.blocks.StructBlock', [[('items', 8)]], {}), 10: ('wagtail.contrib.table_block.blocks.TableBlock', (), {'table_options': {'contextMenu': ['row_above', 'row_below', '---------', 'col_left', 'col_right', '---------', 'remove_row', 'remove_col', '---------', 'undo', 'redo', '---------', 'alignment']}}), 11: ('wagtail.blocks.StructBlock', [[('table', 10)]], {}), 12: ('wagtail.blocks.CharBlock', (), {'required': True}), 13: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul'], 'required': True}), 14: ('wagtail.blocks.StructBlock', [[('title', 12), ('body', 13)]], {}), 15: ('wagtail.documents.blocks.DocumentChooserBlock', (), {'required': True}), 16: ('wagtail.blocks.StructBlock', [[('file', 15)]], {}), 17: ('wagtail.blocks.ListBlock', (16,), {'min_num': 1}), 18: ('wagtail.blocks.StructBlock', [[('documents', 17)]], {}), 19: ('wagtail.blocks.StreamBlock', [[('sub_heading', 2), ('paragraph', 4), ('description_list', 9), ('table', 11), ('details', 14), ('document', 18), ('inset_text', 4)]], {'required': False}), 20: ('wagtail.blocks.StructBlock', [[('heading', 0), ('content', 19)]], {})}, null=True), + ), + migrations.AlterField( + model_name='foirequestpage', + name='response', + field=wagtail.fields.StreamField([('content_section', 20), ('paragraph', 4), ('description_list', 9), ('table', 11), ('details', 14), ('document', 18), ('inset_text', 4)], block_lookup={0: ('wagtail.blocks.CharBlock', (), {'label': 'Heading', 'max_length': 100}), 1: ('wagtail.blocks.CharBlock', (), {'label': 'Sub-heading', 'max_length': 100}), 2: ('wagtail.blocks.StructBlock', [[('heading', 1)]], {}), 3: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul']}), 4: ('wagtail.blocks.StructBlock', [[('text', 3)]], {}), 5: ('wagtail.blocks.CharBlock', (), {'required': True, 'verbose_name': 'Term'}), 6: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code']}), 7: ('wagtail.blocks.StructBlock', [[('term', 5), ('detail', 6)]], {}), 8: ('wagtail.blocks.ListBlock', (7,), {}), 9: ('wagtail.blocks.StructBlock', [[('items', 8)]], {}), 10: ('wagtail.contrib.table_block.blocks.TableBlock', (), {'table_options': {'contextMenu': ['row_above', 'row_below', '---------', 'col_left', 'col_right', '---------', 'remove_row', 'remove_col', '---------', 'undo', 'redo', '---------', 'alignment']}}), 11: ('wagtail.blocks.StructBlock', [[('table', 10)]], {}), 12: ('wagtail.blocks.CharBlock', (), {'required': True}), 13: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul'], 'required': True}), 14: ('wagtail.blocks.StructBlock', [[('title', 12), ('body', 13)]], {}), 15: ('wagtail.documents.blocks.DocumentChooserBlock', (), {'required': True}), 16: ('wagtail.blocks.StructBlock', [[('file', 15)]], {}), 17: ('wagtail.blocks.ListBlock', (16,), {'min_num': 1}), 18: ('wagtail.blocks.StructBlock', [[('documents', 17)]], {}), 19: ('wagtail.blocks.StreamBlock', [[('sub_heading', 2), ('paragraph', 4), ('description_list', 9), ('table', 11), ('details', 14), ('document', 18), ('inset_text', 4)]], {'required': False}), 20: ('wagtail.blocks.StructBlock', [[('heading', 0), ('content', 19)]], {})}, null=True), + ), + ] diff --git a/app/generic_pages/migrations/0057_alter_generalpage_body_alter_hubpage_body.py b/app/generic_pages/migrations/0057_alter_generalpage_body_alter_hubpage_body.py new file mode 100644 index 000000000..ce727549d --- /dev/null +++ b/app/generic_pages/migrations/0057_alter_generalpage_body_alter_hubpage_body.py @@ -0,0 +1,27 @@ +# Generated by Django 6.0.5 on 2026-05-20 14:56 +# etna:allowAlterField + +import app.ciim.blocks +import django.core.validators +import wagtail.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('generic_pages', '0056_alter_generalpage_body'), + ] + + operations = [ + migrations.AlterField( + model_name='generalpage', + name='body', + field=wagtail.fields.StreamField([('accordions', 10), ('button', 15), ('call_to_action', 17), ('code', 22), ('contact', 30), ('description_list', 35), ('details', 36), ('document', 6), ('do_dont_list', 43), ('featured_external_link', 49), ('featured_page', 52), ('image', 55), ('image_gallery', 57), ('inset_text', 59), ('media', 63), ('paragraph', 59), ('partner_logos', 67), ('people_listing', 69), ('quote', 76), ('record_links', 78), ('table', 80), ('warning_text', 81), ('youtube_video', 87), ('content_section', 94)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'required': True}), 1: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul'], 'required': True}), 2: ('wagtail.contrib.table_block.blocks.TableBlock', (), {}), 3: ('wagtail.documents.blocks.DocumentChooserBlock', (), {'required': True}), 4: ('wagtail.blocks.StructBlock', [[('file', 3)]], {}), 5: ('wagtail.blocks.ListBlock', (4,), {'min_num': 1}), 6: ('wagtail.blocks.StructBlock', [[('documents', 5)]], {}), 7: ('wagtail.blocks.StreamBlock', [[('text', 1), ('table', 2), ('documents', 6)]], {}), 8: ('wagtail.blocks.StructBlock', [[('title', 0), ('body', 7)]], {}), 9: ('wagtail.blocks.ListBlock', (8,), {}), 10: ('wagtail.blocks.StructBlock', [[('items', 9)]], {}), 11: ('wagtail.blocks.CharBlock', (), {}), 12: ('app.core.blocks.page_chooser.APIPageChooserBlock', (), {'required': False}), 13: ('wagtail.blocks.URLBlock', (), {'required': False}), 14: ('wagtail.blocks.BooleanBlock', (), {'help_text': 'Use the accented button style', 'label': 'Accented', 'required': False}), 15: ('wagtail.blocks.StructBlock', [[('label', 11), ('link', 12), ('external_link', 13), ('accented', 14)]], {}), 16: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul'], 'max_length': 100}), 17: ('wagtail.blocks.StructBlock', [[('body', 16), ('button', 15)]], {}), 18: ('wagtail.blocks.CharBlock', (), {'help_text': 'Display a filename with the extension e.g. example.html', 'label': 'Code block title', 'max_length': 100, 'required': False}), 19: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('html', 'HTML'), ('javascript', 'JavaScript'), ('python', 'Python'), ('xml', 'XML'), ('json', 'JSON'), ('bash', 'Bash'), ('git', 'git'), ('markdown', 'Markdown'), ('graphql', 'GraphQL'), ('powershell', 'PowerShell'), ('yaml', 'YAML')], 'label': 'Code language', 'required': False}), 20: ('wagtail.blocks.TextBlock', (), {'max_length': 500}), 21: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Allow copy to clipboard', 'required': False}), 22: ('wagtail.blocks.StructBlock', [[('filename', 18), ('language', 19), ('code', 20), ('allow_copying', 21)]], {}), 23: ('wagtail.blocks.CharBlock', (), {'verbose_name': 'Title'}), 24: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['link'], 'required': False}), 25: ('wagtail.blocks.TextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 26: ('wagtail.blocks.CharBlock', (), {'required': False}), 27: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'required': False}), 28: ('wagtail.blocks.EmailBlock', (), {'required': False}), 29: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 30: ('wagtail.blocks.StructBlock', [[('title', 23), ('body', 24), ('address', 25), ('telephone', 26), ('chat_link', 13), ('chat_note', 27), ('email', 28), ('website_link', 13), ('social_media', 29)]], {}), 31: ('wagtail.blocks.CharBlock', (), {'required': True, 'verbose_name': 'Term'}), 32: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code']}), 33: ('wagtail.blocks.StructBlock', [[('term', 31), ('detail', 32)]], {}), 34: ('wagtail.blocks.ListBlock', (33,), {}), 35: ('wagtail.blocks.StructBlock', [[('items', 34)]], {}), 36: ('wagtail.blocks.StructBlock', [[('title', 0), ('body', 1)]], {}), 37: ('wagtail.blocks.CharBlock', (), {'label': 'Custom do heading (defaults to "Do")', 'max_length': 100, 'required': False}), 38: ('wagtail.blocks.StructBlock', [[('text', 32)]], {'icon': 'check', 'label': 'Do item'}), 39: ('wagtail.blocks.ListBlock', (38,), {'label': 'Dos'}), 40: ('wagtail.blocks.CharBlock', (), {'label': 'Custom don\'t heading (defaults to "Don\'t")', 'max_length': 100, 'required': False}), 41: ('wagtail.blocks.StructBlock', [[('text', 32)]], {'icon': 'cross', 'label': "Don't item"}), 42: ('wagtail.blocks.ListBlock', (41,), {'label': "Don'ts"}), 43: ('wagtail.blocks.StructBlock', [[('do_heading', 37), ('do', 39), ('dont_heading', 40), ('dont', 42)]], {}), 44: ('wagtail.blocks.CharBlock', (), {'label': 'Supertitle', 'max_length': 20, 'required': False}), 45: ('wagtail.blocks.CharBlock', (), {'label': 'Title', 'max_length': 100}), 46: ('wagtail.blocks.CharBlock', (), {'label': 'Description'}), 47: ('wagtail.blocks.URLBlock', (), {'label': 'URL'}), 48: ('app.core.blocks.image.APIImageChooserBlock', (), {'label': 'Image', 'required': False}), 49: ('wagtail.blocks.StructBlock', [[('supertitle', 44), ('title', 45), ('description', 46), ('url', 47), ('image', 48)]], {}), 50: ('app.core.blocks.page_chooser.APIPageChooserBlock', (), {'label': 'Page', 'page_type': ['wagtailcore.Page'], 'required': True}), 51: ('wagtail.blocks.CharBlock', (), {'help_text': 'Optional override for the teaser text', 'label': 'Teaser text override', 'required': False}), 52: ('wagtail.blocks.StructBlock', [[('page', 50), ('teaser_text', 51)]], {}), 53: ('app.core.blocks.image.APIImageChooserBlock', (), {'rendition_size': 'max-900x900', 'required': True, 'verbose_name': 'Image'}), 54: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link'], 'help_text': 'If provided, displays directly below the image. Can be used to specify sources, transcripts or other useful metadata.', 'label': 'Caption (optional)', 'required': False}), 55: ('wagtail.blocks.StructBlock', [[('image', 53), ('caption', 54)]], {}), 56: ('wagtail.blocks.ListBlock', (55,), {}), 57: ('wagtail.blocks.StructBlock', [[('title', 26), ('description', 29), ('images', 56)]], {}), 58: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul']}), 59: ('wagtail.blocks.StructBlock', [[('text', 58)]], {}), 60: ('wagtail.blocks.CharBlock', (), {'help_text': 'A descriptive title for the media block', 'required': True}), 61: ('app.core.blocks.image.APIImageChooserBlock', (), {'help_text': 'A thumbnail image for the media block', 'rendition_size': 'fill-960x540', 'required': False}), 62: ('app.media.blocks.MediaChooserBlock', (), {}), 63: ('wagtail.blocks.StructBlock', [[('title', 60), ('thumbnail', 61), ('media', 62)]], {}), 64: ('wagtail.blocks.CharBlock', (), {'help_text': 'Optional override for the partner logos section lead text. Will display a default if not provided.', 'max_length': 40, 'required': False}), 65: ('app.core.blocks.image.PartnerLogoChooserBlock', (), {}), 66: ('wagtail.blocks.ListBlock', (65,), {'max_num': 4, 'required': True}), 67: ('wagtail.blocks.StructBlock', [[('lead_text', 64), ('logos', 66)]], {}), 68: ('wagtail.snippets.blocks.SnippetChooserBlock', ('people.PersonRole',), {'help_text': 'Select a role to filter people by their roles.', 'label': 'Role selection'}), 69: ('wagtail.blocks.StructBlock', [[('role', 68)]], {}), 70: ('wagtail.blocks.CharBlock', (), {'help_text': 'The name of the person being quoted. e.g. King Edward VIII', 'max_length': 100}), 71: ('wagtail.blocks.CharBlock', (), {'help_text': 'The title of the work or document from which the quote is taken. e.g. The Telegraph, 23 June 1986', 'max_length': 100, 'required': False}), 72: ('app.core.blocks.page_chooser.APIPageChooserBlock', (), {'help_text': 'Reference another page published on the site', 'label': 'Internal page', 'required': False}), 73: ('wagtail.blocks.URLBlock', (), {'help_text': 'Add a URL here to refer to an external source', 'label': 'External link', 'required': False}), 74: ('wagtail.blocks.StructBlock', [[('citation_internal_link', 72), ('citation_external_link', 73)]], {}), 75: ('wagtail.blocks.StructBlock', [[('citation', 71), ('source_link', 74)]], {}), 76: ('wagtail.blocks.StructBlock', [[('quote', 1), ('attribution', 70), ('source', 75)]], {}), 77: ('wagtail.blocks.ListBlock', (app.ciim.blocks.RecordLinkBlock,), {'label': 'Items', 'verbose_name': 'Record links'}), 78: ('wagtail.blocks.StructBlock', [[('items', 77)]], {}), 79: ('wagtail.contrib.table_block.blocks.TableBlock', (), {'table_options': {'contextMenu': ['row_above', 'row_below', '---------', 'col_left', 'col_right', '---------', 'remove_row', 'remove_col', '---------', 'undo', 'redo', '---------', 'alignment']}}), 80: ('wagtail.blocks.StructBlock', [[('table', 79)]], {}), 81: ('wagtail.blocks.StructBlock', [[('body', 58)]], {}), 82: ('wagtail.blocks.CharBlock', (), {'label': 'Title', 'max_length': 100, 'required': True}), 83: ('wagtail.blocks.CharBlock', (), {'label': 'YouTube Video ID', 'max_length': 11, 'required': True, 'validators': [django.core.validators.RegexValidator(message='Invalid YouTube Video ID', regex='^[a-zA-Z0-9_-]{11}$')]}), 84: ('app.core.blocks.image.APIImageChooserBlock', (), {'label': 'Preview Image', 'rendition_size': 'fill-640x360', 'required': True}), 85: ('wagtail.blocks.RichTextBlock', (), {'label': 'Transcript', 'required': False}), 86: ('wagtail.blocks.BooleanBlock', (), {'help_text': 'Tick if the video has captions on YouTube', 'label': 'Captions available', 'required': False}), 87: ('wagtail.blocks.StructBlock', [[('title', 82), ('video_id', 83), ('preview_image', 84), ('transcript', 85), ('captions_available', 86)]], {}), 88: ('wagtail.blocks.CharBlock', (), {'label': 'Heading', 'max_length': 100}), 89: ('wagtail.blocks.CharBlock', (), {'label': 'Sub-heading', 'max_length': 100}), 90: ('wagtail.blocks.StructBlock', [[('heading', 89)]], {}), 91: ('wagtail.blocks.CharBlock', (), {'label': 'Sub-sub-heading', 'max_length': 100}), 92: ('wagtail.blocks.StructBlock', [[('heading', 91)]], {}), 93: ('wagtail.blocks.StreamBlock', [[('accordions', 10), ('button', 15), ('call_to_action', 17), ('code', 22), ('contact', 30), ('description_list', 35), ('details', 36), ('document', 6), ('do_dont_list', 43), ('featured_external_link', 49), ('featured_page', 52), ('image', 55), ('image_gallery', 57), ('inset_text', 59), ('media', 63), ('paragraph', 59), ('partner_logos', 67), ('people_listing', 69), ('quote', 76), ('record_links', 78), ('sub_heading', 90), ('sub_sub_heading', 92), ('table', 80), ('warning_text', 81), ('youtube_video', 87)]], {'required': False}), 94: ('wagtail.blocks.StructBlock', [[('heading', 88), ('content', 93)]], {})}, null=True), + ), + migrations.AlterField( + model_name='hubpage', + name='body', + field=wagtail.fields.StreamField([('contact', 8), ('paragraph', 10), ('partner_logos', 14)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'verbose_name': 'Title'}), 1: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['link'], 'required': False}), 2: ('wagtail.blocks.TextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 3: ('wagtail.blocks.CharBlock', (), {'required': False}), 4: ('wagtail.blocks.URLBlock', (), {'required': False}), 5: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'required': False}), 6: ('wagtail.blocks.EmailBlock', (), {'required': False}), 7: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 8: ('wagtail.blocks.StructBlock', [[('title', 0), ('body', 1), ('address', 2), ('telephone', 3), ('chat_link', 4), ('chat_note', 5), ('email', 6), ('website_link', 4), ('social_media', 7)]], {}), 9: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul']}), 10: ('wagtail.blocks.StructBlock', [[('text', 9)]], {}), 11: ('wagtail.blocks.CharBlock', (), {'help_text': 'Optional override for the partner logos section lead text. Will display a default if not provided.', 'max_length': 40, 'required': False}), 12: ('app.core.blocks.image.PartnerLogoChooserBlock', (), {}), 13: ('wagtail.blocks.ListBlock', (12,), {'max_num': 4, 'required': True}), 14: ('wagtail.blocks.StructBlock', [[('lead_text', 11), ('logos', 13)]], {})}, null=True), + ), + ] diff --git a/app/people/migrations/0022_alter_personpage_research_summary.py b/app/people/migrations/0022_alter_personpage_research_summary.py new file mode 100644 index 000000000..c6e524723 --- /dev/null +++ b/app/people/migrations/0022_alter_personpage_research_summary.py @@ -0,0 +1,20 @@ +# Generated by Django 6.0.5 on 2026-05-20 14:56 +# etna:allowAlterField + +import wagtail.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('people', '0021_alter_personpage_research_summary'), + ] + + operations = [ + migrations.AlterField( + model_name='personpage', + name='research_summary', + field=wagtail.fields.StreamField([('contact', 8), ('inset_text', 10), ('paragraph', 10), ('content_section', 13)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'verbose_name': 'Title'}), 1: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['link'], 'required': False}), 2: ('wagtail.blocks.TextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 3: ('wagtail.blocks.CharBlock', (), {'required': False}), 4: ('wagtail.blocks.URLBlock', (), {'required': False}), 5: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'required': False}), 6: ('wagtail.blocks.EmailBlock', (), {'required': False}), 7: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 8: ('wagtail.blocks.StructBlock', [[('title', 0), ('body', 1), ('address', 2), ('telephone', 3), ('chat_link', 4), ('chat_note', 5), ('email', 6), ('website_link', 4), ('social_media', 7)]], {}), 9: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul']}), 10: ('wagtail.blocks.StructBlock', [[('text', 9)]], {}), 11: ('wagtail.blocks.CharBlock', (), {'label': 'Heading', 'max_length': 100}), 12: ('wagtail.blocks.StreamBlock', [[('contact', 8), ('inset_text', 10), ('paragraph', 10)]], {'required': False}), 13: ('wagtail.blocks.StructBlock', [[('heading', 11), ('content', 12)]], {})}, null=True), + ), + ] diff --git a/app/ukgwa/migrations/0022_alter_informationpage_body.py b/app/ukgwa/migrations/0022_alter_informationpage_body.py new file mode 100644 index 000000000..e5686fa63 --- /dev/null +++ b/app/ukgwa/migrations/0022_alter_informationpage_body.py @@ -0,0 +1,21 @@ +# Generated by Django 6.0.5 on 2026-05-20 13:50 +# etna:allowAlterField + +import django.core.validators +import wagtail.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('ukgwa', '0021_alter_informationpage_body'), + ] + + operations = [ + migrations.AlterField( + model_name='informationpage', + name='body', + field=wagtail.fields.StreamField([('bookmarklet', 0), ('call_to_action', 7), ('document', 11), ('image', 14), ('paragraph', 16), ('quote', 24), ('youtube_video', 30), ('content_section', 37)], blank=True, block_lookup={0: ('wagtail.blocks.StructBlock', [[]], {}), 1: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul'], 'max_length': 100}), 2: ('wagtail.blocks.CharBlock', (), {}), 3: ('app.core.blocks.page_chooser.APIPageChooserBlock', (), {'required': False}), 4: ('wagtail.blocks.URLBlock', (), {'required': False}), 5: ('wagtail.blocks.BooleanBlock', (), {'help_text': 'Use the accented button style', 'label': 'Accented', 'required': False}), 6: ('wagtail.blocks.StructBlock', [[('label', 2), ('link', 3), ('external_link', 4), ('accented', 5)]], {}), 7: ('wagtail.blocks.StructBlock', [[('body', 1), ('button', 6)]], {}), 8: ('wagtail.documents.blocks.DocumentChooserBlock', (), {'required': True}), 9: ('wagtail.blocks.StructBlock', [[('file', 8)]], {}), 10: ('wagtail.blocks.ListBlock', (9,), {'min_num': 1}), 11: ('wagtail.blocks.StructBlock', [[('documents', 10)]], {}), 12: ('app.core.blocks.image.APIImageChooserBlock', (), {'rendition_size': 'max-900x900', 'required': True, 'verbose_name': 'Image'}), 13: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link'], 'help_text': 'If provided, displays directly below the image. Can be used to specify sources, transcripts or other useful metadata.', 'label': 'Caption (optional)', 'required': False}), 14: ('wagtail.blocks.StructBlock', [[('image', 12), ('caption', 13)]], {}), 15: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul']}), 16: ('wagtail.blocks.StructBlock', [[('text', 15)]], {}), 17: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul'], 'required': True}), 18: ('wagtail.blocks.CharBlock', (), {'help_text': 'The name of the person being quoted. e.g. King Edward VIII', 'max_length': 100}), 19: ('wagtail.blocks.CharBlock', (), {'help_text': 'The title of the work or document from which the quote is taken. e.g. The Telegraph, 23 June 1986', 'max_length': 100, 'required': False}), 20: ('app.core.blocks.page_chooser.APIPageChooserBlock', (), {'help_text': 'Reference another page published on the site', 'label': 'Internal page', 'required': False}), 21: ('wagtail.blocks.URLBlock', (), {'help_text': 'Add a URL here to refer to an external source', 'label': 'External link', 'required': False}), 22: ('wagtail.blocks.StructBlock', [[('citation_internal_link', 20), ('citation_external_link', 21)]], {}), 23: ('wagtail.blocks.StructBlock', [[('citation', 19), ('source_link', 22)]], {}), 24: ('wagtail.blocks.StructBlock', [[('quote', 17), ('attribution', 18), ('source', 23)]], {}), 25: ('wagtail.blocks.CharBlock', (), {'label': 'Title', 'max_length': 100, 'required': True}), 26: ('wagtail.blocks.CharBlock', (), {'label': 'YouTube Video ID', 'max_length': 11, 'required': True, 'validators': [django.core.validators.RegexValidator(message='Invalid YouTube Video ID', regex='^[a-zA-Z0-9_-]{11}$')]}), 27: ('app.core.blocks.image.APIImageChooserBlock', (), {'label': 'Preview Image', 'rendition_size': 'fill-640x360', 'required': True}), 28: ('wagtail.blocks.RichTextBlock', (), {'label': 'Transcript', 'required': False}), 29: ('wagtail.blocks.BooleanBlock', (), {'help_text': 'Tick if the video has captions on YouTube', 'label': 'Captions available', 'required': False}), 30: ('wagtail.blocks.StructBlock', [[('title', 25), ('video_id', 26), ('preview_image', 27), ('transcript', 28), ('captions_available', 29)]], {}), 31: ('wagtail.blocks.CharBlock', (), {'label': 'Heading', 'max_length': 100}), 32: ('wagtail.blocks.CharBlock', (), {'label': 'Sub-heading', 'max_length': 100}), 33: ('wagtail.blocks.StructBlock', [[('heading', 32)]], {}), 34: ('wagtail.blocks.CharBlock', (), {'label': 'Sub-sub-heading', 'max_length': 100}), 35: ('wagtail.blocks.StructBlock', [[('heading', 34)]], {}), 36: ('wagtail.blocks.StreamBlock', [[('bookmarklet', 0), ('call_to_action', 7), ('document', 11), ('image', 14), ('paragraph', 16), ('quote', 24), ('sub_heading', 33), ('sub_sub_heading', 35), ('youtube_video', 30)]], {'required': False}), 37: ('wagtail.blocks.StructBlock', [[('heading', 31), ('content', 36)]], {})}, null=True), + ), + ] diff --git a/app/whatson/migrations/0038_alter_displaypage_display_highlights_and_more.py b/app/whatson/migrations/0038_alter_displaypage_display_highlights_and_more.py new file mode 100644 index 000000000..3e7385d23 --- /dev/null +++ b/app/whatson/migrations/0038_alter_displaypage_display_highlights_and_more.py @@ -0,0 +1,35 @@ +# Generated by Django 6.0.5 on 2026-05-20 14:56 +# etna:allowAlterField + +import wagtail.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('whatson', '0037_alter_displaypage_body_alter_exhibitionpage_body'), + ] + + operations = [ + migrations.AlterField( + model_name='displaypage', + name='display_highlights', + field=wagtail.fields.StreamField([('display_highlights', 6)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'required': False}), 1: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 2: ('app.core.blocks.image.APIImageChooserBlock', (), {'rendition_size': 'max-900x900', 'required': True, 'verbose_name': 'Image'}), 3: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link'], 'help_text': 'If provided, displays directly below the image. Can be used to specify sources, transcripts or other useful metadata.', 'label': 'Caption (optional)', 'required': False}), 4: ('wagtail.blocks.StructBlock', [[('image', 2), ('caption', 3)]], {}), 5: ('wagtail.blocks.ListBlock', (4,), {}), 6: ('wagtail.blocks.StructBlock', [[('title', 0), ('description', 1), ('images', 5)]], {})}), + ), + migrations.AlterField( + model_name='eventpage', + name='description', + field=wagtail.fields.StreamField([('contact', 8), ('inset_text', 10), ('paragraph', 10), ('partner_logos', 14), ('content_section', 19)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'verbose_name': 'Title'}), 1: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['link'], 'required': False}), 2: ('wagtail.blocks.TextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 3: ('wagtail.blocks.CharBlock', (), {'required': False}), 4: ('wagtail.blocks.URLBlock', (), {'required': False}), 5: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'required': False}), 6: ('wagtail.blocks.EmailBlock', (), {'required': False}), 7: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 8: ('wagtail.blocks.StructBlock', [[('title', 0), ('body', 1), ('address', 2), ('telephone', 3), ('chat_link', 4), ('chat_note', 5), ('email', 6), ('website_link', 4), ('social_media', 7)]], {}), 9: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code', 'ol', 'ul']}), 10: ('wagtail.blocks.StructBlock', [[('text', 9)]], {}), 11: ('wagtail.blocks.CharBlock', (), {'help_text': 'Optional override for the partner logos section lead text. Will display a default if not provided.', 'max_length': 40, 'required': False}), 12: ('app.core.blocks.image.PartnerLogoChooserBlock', (), {}), 13: ('wagtail.blocks.ListBlock', (12,), {'max_num': 4, 'required': True}), 14: ('wagtail.blocks.StructBlock', [[('lead_text', 11), ('logos', 13)]], {}), 15: ('wagtail.blocks.CharBlock', (), {'label': 'Heading', 'max_length': 100}), 16: ('wagtail.blocks.CharBlock', (), {'label': 'Sub-heading', 'max_length': 100}), 17: ('wagtail.blocks.StructBlock', [[('heading', 16)]], {}), 18: ('wagtail.blocks.StreamBlock', [[('contact', 8), ('inset_text', 10), ('paragraph', 10), ('partner_logos', 14), ('sub_heading', 17)]], {'required': False}), 19: ('wagtail.blocks.StructBlock', [[('heading', 15), ('content', 18)]], {})}, help_text='The description of the event.', null=True, verbose_name='description'), + ), + migrations.AlterField( + model_name='eventpage', + name='event_highlights', + field=wagtail.fields.StreamField([('event_highlights', 6)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'required': False}), 1: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 2: ('app.core.blocks.image.APIImageChooserBlock', (), {'rendition_size': 'max-900x900', 'required': True, 'verbose_name': 'Image'}), 3: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link'], 'help_text': 'If provided, displays directly below the image. Can be used to specify sources, transcripts or other useful metadata.', 'label': 'Caption (optional)', 'required': False}), 4: ('wagtail.blocks.StructBlock', [[('image', 2), ('caption', 3)]], {}), 5: ('wagtail.blocks.ListBlock', (4,), {}), 6: ('wagtail.blocks.StructBlock', [[('title', 0), ('description', 1), ('images', 5)]], {})}), + ), + migrations.AlterField( + model_name='exhibitionpage', + name='exhibition_highlights', + field=wagtail.fields.StreamField([('exhibition_highlights', 6)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'required': False}), 1: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link', 'code'], 'required': False}), 2: ('app.core.blocks.image.APIImageChooserBlock', (), {'rendition_size': 'max-900x900', 'required': True, 'verbose_name': 'Image'}), 3: ('app.core.blocks.paragraph.APIRichTextBlock', (), {'features': ['bold', 'italic', 'link'], 'help_text': 'If provided, displays directly below the image. Can be used to specify sources, transcripts or other useful metadata.', 'label': 'Caption (optional)', 'required': False}), 4: ('wagtail.blocks.StructBlock', [[('image', 2), ('caption', 3)]], {}), 5: ('wagtail.blocks.ListBlock', (4,), {}), 6: ('wagtail.blocks.StructBlock', [[('title', 0), ('description', 1), ('images', 5)]], {})}), + ), + ]