diff --git a/cfgov/v1/migrations/0040_blog_expandable_group.py b/cfgov/v1/migrations/0040_blog_expandable_group.py
new file mode 100644
index 00000000000..51ec626edf7
--- /dev/null
+++ b/cfgov/v1/migrations/0040_blog_expandable_group.py
@@ -0,0 +1,24 @@
+# Generated by Django 4.2.16 on 2024-12-05 16:16
+
+from django.db import migrations
+import wagtail.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('v1', '0039_remove_post_event_image'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='blogpage',
+ name='content',
+ field=wagtail.fields.StreamField([('full_width_text', 42), ('info_unit_group', 53), ('expandable', 56), ('expandable_group', 61), ('well', 41), ('video_player', 64), ('email_signup', 39), ('simple_chart', 81), ('faq_schema', 90), ('how_to_schema', 100)], block_lookup={0: ('wagtail.blocks.RichTextBlock', (), {'icon': 'edit'}), 1: ('wagtail.blocks.RichTextBlock', (), {}), 2: ('wagtail.blocks.CharBlock', (), {'help_text': '\n ID will be auto-generated on save.\n However, you may enter some human-friendly text that\n will be incorporated to make it easier to read.\n ', 'label': 'ID for this content block', 'required': False}), 3: ('wagtail.blocks.StructBlock', [[('link_id', 2)]], {}), 4: ('wagtail.blocks.StructBlock', [[('content_block', 1), ('anchor_link', 3)]], {}), 5: ('wagtail_footnotes.blocks.RichTextBlockWithFootnotes', (), {'features': ['anchor-identifier', 'h2', 'h3', 'h4', 'h5', 'hr', 'ol', 'ul', 'bold', 'italic', 'superscript', 'blockquote', 'link', 'document-link', 'image', 'icon', 'footnotes']}), 6: ('wagtail.blocks.CharBlock', (), {'required': False}), 7: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4'), ('h5', 'H5')]}), 8: ('wagtail.blocks.CharBlock', (), {'help_text': 'Input the name of an icon to appear to the left of the heading. E.g., approved, help-round, etc. See full list of icons', 'required': False}), 9: ('wagtail.blocks.StructBlock', [[('text', 6), ('level', 7), ('icon', 8)]], {'required': False}), 10: ('wagtail.images.blocks.ImageChooserBlock', (), {'required': False}), 11: ('wagtail.blocks.CharBlock', (), {'help_text': "No character limit, but be as succinct as possible. If the image is decorative (i.e., a screenreader wouldn't have anything useful to say about it), leave this field blank.", 'required': False}), 12: ('wagtail.blocks.StructBlock', [[('upload', 10), ('alt', 11)]], {}), 13: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('full', 'Full width'), (470, '470px'), (270, '270px'), (170, '170px')]}), 14: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('right', 'right'), ('left', 'left')], 'help_text': 'Does not apply if the image is full-width'}), 15: ('wagtail.blocks.RichTextBlock', (), {'label': 'Caption', 'required': False}), 16: ('wagtail.blocks.BooleanBlock', (), {'default': True, 'help_text': 'Check to add a horizontal rule line to bottom of inset.', 'label': 'Has bottom rule line', 'required': False}), 17: ('wagtail.blocks.StructBlock', [[('image', 12), ('image_width', 13), ('image_position', 14), ('text', 15), ('is_bottom_rule', 16)]], {}), 18: ('wagtail.blocks.MultipleChoiceBlock', [], {'choices': [('is_full_width', 'Display the table at full width'), ('stack_on_mobile', 'Stack the table columns on mobile')], 'required': False}), 19: ('wagtail.blocks.CharBlock', (), {}), 20: ('wagtail.blocks.FloatBlock', (), {}), 21: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'ol', 'ul', 'link', 'document-link', 'superscript']}), 22: ('wagtail_footnotes.blocks.RichTextBlockWithFootnotes', (), {'features': ['bold', 'italic', 'ol', 'ul', 'link', 'document-link', 'superscript', 'footnotes']}), 23: ('wagtail.contrib.typed_table_block.blocks.TypedTableBlock', [[('text', 19), ('numeric', 20), ('rich_text', 21), ('rich_text_with_footnotes', 22)]], {}), 24: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'link', 'document-link'], 'required': False}), 25: ('wagtail.blocks.StructBlock', [[('heading', 9), ('text_introduction', 6), ('options', 18), ('data', 23), ('caption', 24)]], {}), 26: ('wagtail.blocks.TextBlock', (), {}), 27: ('wagtail.blocks.TextBlock', (), {'required': False}), 28: ('wagtail.blocks.StructBlock', [[('body', 26), ('citation', 27)]], {}), 29: ('wagtail.blocks.RichTextBlock', (), {'required': False}), 30: ('wagtail.blocks.CharBlock', (), {'help_text': 'Add an ARIA label if the link text does not describe the destination of the link (e.g. has ambiguous text like "Learn more" that is not descriptive on its own).', 'required': False}), 31: ('wagtail.blocks.CharBlock', (), {'default': '/', 'required': False}), 32: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'required': False}), 33: ('wagtail.blocks.StructBlock', [[('text', 6), ('aria_label', 30), ('url', 31), ('is_link_boldface', 32)]], {}), 34: ('wagtail.blocks.StructBlock', [[('slug_text', 6), ('paragraph_text', 29), ('button', 33)]], {}), 35: ('wagtail.blocks.ListBlock', (33,), {}), 36: ('wagtail.blocks.StructBlock', [[('heading', 6), ('paragraph', 29), ('links', 35)]], {}), 37: ('v1.blocks.ReusableTextChooserBlock', ('v1.ReusableText',), {}), 38: ('v1.blocks.ReusableNotificationChooserBlock', ('v1.ReusableNotification',), {}), 39: ('v1.blocks.EmailSignUpChooserBlock', (), {}), 40: ('wagtail.blocks.RichTextBlock', (), {'label': 'Well', 'required': False}), 41: ('wagtail.blocks.StructBlock', [[('content', 40)]], {}), 42: ('wagtail.blocks.StreamBlock', [[('content', 0), ('content_with_anchor', 4), ('content_with_footnotes', 5), ('heading', 9), ('image', 17), ('table', 25), ('quote', 28), ('cta', 34), ('related_links', 36), ('reusable_text', 37), ('reusable_notification', 38), ('email_signup', 39), ('well', 41)]], {}), 43: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('50-50', '50/50'), ('33-33-33', '33/33/33'), ('25-75', '25/75')], 'help_text': 'Choose the number and width of info unit columns.', 'label': 'Format'}), 44: ('wagtail.blocks.BooleanBlock', (), {'default': True, 'help_text': "Check this to link all images and headings to the URL of the first link in their unit's list, if there is a link.", 'required': False}), 45: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Check this to add a horizontal rule line to top of info unit group.', 'required': False}), 46: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Check this to show horizontal rule lines between info units.', 'label': 'Show rule lines between items', 'required': False}), 47: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('none', 'None'), ('rounded', 'Rounded corners'), ('circle', 'Circle')], 'help_text': 'Adds a border-radius class to images in this group, allowing for a rounded or circular border.', 'label': 'Border radius for images?', 'required': False}), 48: ('wagtail.blocks.StructBlock', [[('text', 6), ('level', 7), ('icon', 8)]], {'default': {'level': 'h3'}, 'required': False}), 49: ('wagtail.blocks.RichTextBlock', (), {'blank': True, 'required': False}), 50: ('wagtail.blocks.ListBlock', (33,), {'required': False}), 51: ('wagtail.blocks.StructBlock', [[('image', 12), ('heading', 48), ('body', 49), ('links', 50)]], {}), 52: ('wagtail.blocks.ListBlock', (51,), {'default': []}), 53: ('wagtail.blocks.StructBlock', [[('format', 43), ('heading', 9), ('intro', 29), ('link_image_and_heading', 44), ('has_top_rule_line', 45), ('lines_between_items', 46), ('border_radius_image', 47), ('info_units', 52)]], {}), 54: ('wagtail.blocks.BooleanBlock', (), {'required': False}), 55: ('wagtail.blocks.StreamBlock', [[('paragraph', 29), ('well', 41), ('links', 33), ('info_unit_group', 53)]], {'blank': True}), 56: ('wagtail.blocks.StructBlock', [[('label', 6), ('icon', 6), ('is_bordered', 54), ('is_midtone', 54), ('is_expanded', 54), ('is_expanded_padding', 54), ('content', 55)]], {}), 57: ('wagtail.blocks.CharBlock', (), {'help_text': 'Added as an <h3>
at the top of this block. Also adds a wrapping <div>
whose id
attribute comes from a slugified version of this heading, creating an anchor that can be used when linking to this part of the page.', 'required': False}), 58: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Check this to add a horizontal rule line to top of expandable group.', 'required': False}), 59: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Check this to add FAQ schema markup to expandables.', 'label': 'Uses FAQ schema', 'required': False}), 60: ('wagtail.blocks.ListBlock', (56,), {}), 61: ('wagtail.blocks.StructBlock', [[('heading', 57), ('body', 29), ('is_accordion', 54), ('has_top_rule_line', 58), ('is_faq', 59), ('expandables', 60)]], {}), 62: ('wagtail.blocks.RegexBlock', (), {'error_messages': {'invalid': 'The YouTube video ID is in the wrong format.'}, 'help_text': 'Enter the YouTube video ID, which is located at the end of the video URL, after "v=". For example, the video ID for https://www.youtube.com/watch?v=1V0Ax9OIc84 is 1V0Ax9OIc84.', 'label': 'YouTube video ID', 'regex': '^[\\w-]{11}$', 'required': False}), 63: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Optional thumbnail image to show before and after the video plays. If the thumbnail image is not set here, the video player will default to showing the thumbnail that was set in (or automatically chosen by) YouTube.', 'required': False}), 64: ('wagtail.blocks.StructBlock', [[('video_id', 62), ('thumbnail_image', 63)]], {}), 65: ('wagtail.blocks.CharBlock', (), {'required': True}), 66: ('wagtail.blocks.TextBlock', (), {'help_text': 'Accessible description of the chart content', 'required': True}), 67: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('bar', 'Bar'), ('datetime', 'Date/time'), ('line', 'Line'), ('tilemap', 'Tile grid map')]}), 68: ('wagtail.blocks.TextBlock', (), {'help_text': "URL of the chart's data source or an array of JSON data", 'required': True, 'rows': 2}), 69: ('wagtail.blocks.TextBlock', (), {'help_text': 'For charts pulling from a separate source file, include a list of the column headers (from a CSV file) or keys (from a JSON file) to include in the chart as ["HEADER/KEY1", "HEADER/KEY2"]. To change how the data is labeled in the chart, include the correct labels with the format [{"key": "HEADER/KEY1", "label": "NEWLABEL"}, {"key": "HEADER/KEY2", "label": "NEWLABEL2"}]', 'required': False}), 70: ('wagtail.blocks.BooleanBlock', (), {'default': True, 'help_text': 'Uncheck this option to initially only show the first data series in the chart. Leave checked to show all data series by default. Users can always turn data series on or off by interacting with the chart legend. ', 'required': False}), 71: ('wagtail.blocks.TextBlock', (), {'help_text': 'The column header (CSV), key or data array (JSON) to include as the source of x-axis values.', 'required': False}), 72: ('wagtail.blocks.CharBlock', (), {'help_text': "Name the javascript function in chart-hooks.js to run on the provided data before handing it to the chart. Can also provide '___'-separated arguments to this function which are passed in as arguments 2 to n", 'required': False}), 73: ('wagtail.blocks.TextBlock', (), {'help_text': 'If the chart needs the option for users to filter the data shown, for example by date or geographic region, provide the JSON objects to filter on, in the format {key: "KEY", "label": "LABEL"}', 'required': False}), 74: ('wagtail.blocks.TextBlock', (), {'help_text': 'A JSON object with style overrides for the underlying Highcharts chart. No object merging is done, nested objects should be referenced with dot notation: {"tooltip.shape": "circle"}', 'required': False}), 75: ('wagtail.blocks.IntegerBlock', (), {'blank': True, 'help_text': 'A number to determine how many months of the data are projected values', 'max_value': 12, 'min_value': 0, 'null': True, 'required': False}), 76: ('wagtail.blocks.CharBlock', (), {'help_text': 'Attribution for the data source', 'required': False}), 77: ('wagtail.blocks.CharBlock', (), {'help_text': 'When the underlying data was published', 'required': False}), 78: ('wagtail.blocks.CharBlock', (), {'help_text': 'Custom text for the chart download field. Required to display a download link.', 'required': False}), 79: ('wagtail.blocks.CharBlock', (), {'help_text': 'Location of a file to download, if different from the data source', 'required': False}), 80: ('wagtail.blocks.TextBlock', (), {'help_text': 'General chart information', 'required': False}), 81: ('wagtail.blocks.StructBlock', [[('title', 65), ('subtitle', 27), ('description', 66), ('figure_number', 6), ('chart_type', 67), ('data_source', 68), ('data_series', 69), ('show_all_series_by_default', 70), ('x_axis_source', 71), ('transform', 72), ('x_axis_label', 6), ('y_axis_label', 6), ('filters', 73), ('style_overrides', 74), ('projected_months', 75), ('source_credits', 76), ('date_published', 77), ('download_text', 78), ('download_file', 79), ('notes', 80)]], {}), 82: ('wagtail.blocks.RichTextBlock', (), {'blank': True, 'features': ['ol', 'ul', 'bold', 'italic', 'link', 'document-link'], 'required': False}), 83: ('wagtail.blocks.CharBlock', (), {'blank': True, 'help_text': "Add an optional anchor link tag for this question. Tag should be unique and use dashes or underscores for separation instead of spaces (ie, 'question-one-tag')", 'max_length': 500, 'required': False}), 84: ('wagtail.blocks.CharBlock', (), {'max_length': 500}), 85: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'h3', 'h4', 'link', 'ol', 'ul', 'document-link', 'image', 'embed'], 'label': 'Text'}), 86: ('wagtail.blocks.StructBlock', [[('content', 85)]], {}), 87: ('wagtail.blocks.StreamBlock', [[('text', 86), ('table', 25), ('video_player', 64)]], {}), 88: ('wagtail.blocks.StructBlock', [[('anchor_tag', 83), ('question', 84), ('answer_content', 87)]], {}), 89: ('wagtail.blocks.ListBlock', (88,), {}), 90: ('wagtail.blocks.StructBlock', [[('description', 82), ('questions', 89)]], {'label': 'FAQ schema'}), 91: ('wagtail.blocks.CharBlock', (), {'label': 'Title of How To section', 'max_length': 500}), 92: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')], 'help_text': 'Choose a tag for the title of the How To section.', 'label': 'Tag for How To section title'}), 93: ('wagtail.blocks.BooleanBlock', (), {'default': True, 'help_text': 'The How To schema requires a title to let search engines understand what it is about. If you do not want the title to be displayed in the page, uncheck this box and the title content will only be made available to crawlers and screen readers.', 'label': 'Show How To section title', 'required': False}), 94: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4'), ('b', 'Bold'), ('p', 'Paragraph')], 'help_text': 'Choose a tag for the title of each HowTo step.', 'label': 'Tag for step titles'}), 95: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Check this box to display numbers before step titles. ', 'label': 'Show numbers for steps', 'required': False}), 96: ('wagtail.blocks.CharBlock', (), {'blank': True, 'help_text': "Add an optional anchor link tag to allow linking directly to this step. Tag should be unique and use dashes or underscores for separation instead of spaces (ie, 'step-one-tag').", 'max_length': 500, 'required': False}), 97: ('wagtail.blocks.CharBlock', (), {'help_text': 'Enter a title for this HowTo step. You do not need to include a number in the title -- numbers will be added automatically in the template if the show numbers checkbox is checked.', 'max_length': 500}), 98: ('wagtail.blocks.StructBlock', [[('anchor_tag', 96), ('title', 97), ('step_content', 87)]], {}), 99: ('wagtail.blocks.ListBlock', (98,), {}), 100: ('wagtail.blocks.StructBlock', [[('title', 91), ('title_tag', 92), ('show_title', 93), ('description', 82), ('step_title_tag', 94), ('has_numbers', 95), ('steps', 99)]], {'label': 'HowTo schema', 'max_num': 1})}),
+ ),
+ migrations.AlterField(
+ model_name='legacyblogpage',
+ name='content',
+ field=wagtail.fields.StreamField([('full_width_text', 42), ('info_unit_group', 53), ('expandable', 56), ('expandable_group', 61), ('well', 41), ('video_player', 64), ('email_signup', 39), ('simple_chart', 81), ('faq_schema', 90), ('how_to_schema', 100), ('content', 101), ('reusable_text', 37)], block_lookup={0: ('wagtail.blocks.RichTextBlock', (), {'icon': 'edit'}), 1: ('wagtail.blocks.RichTextBlock', (), {}), 2: ('wagtail.blocks.CharBlock', (), {'help_text': '\n ID will be auto-generated on save.\n However, you may enter some human-friendly text that\n will be incorporated to make it easier to read.\n ', 'label': 'ID for this content block', 'required': False}), 3: ('wagtail.blocks.StructBlock', [[('link_id', 2)]], {}), 4: ('wagtail.blocks.StructBlock', [[('content_block', 1), ('anchor_link', 3)]], {}), 5: ('wagtail_footnotes.blocks.RichTextBlockWithFootnotes', (), {'features': ['anchor-identifier', 'h2', 'h3', 'h4', 'h5', 'hr', 'ol', 'ul', 'bold', 'italic', 'superscript', 'blockquote', 'link', 'document-link', 'image', 'icon', 'footnotes']}), 6: ('wagtail.blocks.CharBlock', (), {'required': False}), 7: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4'), ('h5', 'H5')]}), 8: ('wagtail.blocks.CharBlock', (), {'help_text': 'Input the name of an icon to appear to the left of the heading. E.g., approved, help-round, etc. See full list of icons', 'required': False}), 9: ('wagtail.blocks.StructBlock', [[('text', 6), ('level', 7), ('icon', 8)]], {'required': False}), 10: ('wagtail.images.blocks.ImageChooserBlock', (), {'required': False}), 11: ('wagtail.blocks.CharBlock', (), {'help_text': "No character limit, but be as succinct as possible. If the image is decorative (i.e., a screenreader wouldn't have anything useful to say about it), leave this field blank.", 'required': False}), 12: ('wagtail.blocks.StructBlock', [[('upload', 10), ('alt', 11)]], {}), 13: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('full', 'Full width'), (470, '470px'), (270, '270px'), (170, '170px')]}), 14: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('right', 'right'), ('left', 'left')], 'help_text': 'Does not apply if the image is full-width'}), 15: ('wagtail.blocks.RichTextBlock', (), {'label': 'Caption', 'required': False}), 16: ('wagtail.blocks.BooleanBlock', (), {'default': True, 'help_text': 'Check to add a horizontal rule line to bottom of inset.', 'label': 'Has bottom rule line', 'required': False}), 17: ('wagtail.blocks.StructBlock', [[('image', 12), ('image_width', 13), ('image_position', 14), ('text', 15), ('is_bottom_rule', 16)]], {}), 18: ('wagtail.blocks.MultipleChoiceBlock', [], {'choices': [('is_full_width', 'Display the table at full width'), ('stack_on_mobile', 'Stack the table columns on mobile')], 'required': False}), 19: ('wagtail.blocks.CharBlock', (), {}), 20: ('wagtail.blocks.FloatBlock', (), {}), 21: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'ol', 'ul', 'link', 'document-link', 'superscript']}), 22: ('wagtail_footnotes.blocks.RichTextBlockWithFootnotes', (), {'features': ['bold', 'italic', 'ol', 'ul', 'link', 'document-link', 'superscript', 'footnotes']}), 23: ('wagtail.contrib.typed_table_block.blocks.TypedTableBlock', [[('text', 19), ('numeric', 20), ('rich_text', 21), ('rich_text_with_footnotes', 22)]], {}), 24: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'link', 'document-link'], 'required': False}), 25: ('wagtail.blocks.StructBlock', [[('heading', 9), ('text_introduction', 6), ('options', 18), ('data', 23), ('caption', 24)]], {}), 26: ('wagtail.blocks.TextBlock', (), {}), 27: ('wagtail.blocks.TextBlock', (), {'required': False}), 28: ('wagtail.blocks.StructBlock', [[('body', 26), ('citation', 27)]], {}), 29: ('wagtail.blocks.RichTextBlock', (), {'required': False}), 30: ('wagtail.blocks.CharBlock', (), {'help_text': 'Add an ARIA label if the link text does not describe the destination of the link (e.g. has ambiguous text like "Learn more" that is not descriptive on its own).', 'required': False}), 31: ('wagtail.blocks.CharBlock', (), {'default': '/', 'required': False}), 32: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'required': False}), 33: ('wagtail.blocks.StructBlock', [[('text', 6), ('aria_label', 30), ('url', 31), ('is_link_boldface', 32)]], {}), 34: ('wagtail.blocks.StructBlock', [[('slug_text', 6), ('paragraph_text', 29), ('button', 33)]], {}), 35: ('wagtail.blocks.ListBlock', (33,), {}), 36: ('wagtail.blocks.StructBlock', [[('heading', 6), ('paragraph', 29), ('links', 35)]], {}), 37: ('v1.blocks.ReusableTextChooserBlock', ('v1.ReusableText',), {}), 38: ('v1.blocks.ReusableNotificationChooserBlock', ('v1.ReusableNotification',), {}), 39: ('v1.blocks.EmailSignUpChooserBlock', (), {}), 40: ('wagtail.blocks.RichTextBlock', (), {'label': 'Well', 'required': False}), 41: ('wagtail.blocks.StructBlock', [[('content', 40)]], {}), 42: ('wagtail.blocks.StreamBlock', [[('content', 0), ('content_with_anchor', 4), ('content_with_footnotes', 5), ('heading', 9), ('image', 17), ('table', 25), ('quote', 28), ('cta', 34), ('related_links', 36), ('reusable_text', 37), ('reusable_notification', 38), ('email_signup', 39), ('well', 41)]], {}), 43: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('50-50', '50/50'), ('33-33-33', '33/33/33'), ('25-75', '25/75')], 'help_text': 'Choose the number and width of info unit columns.', 'label': 'Format'}), 44: ('wagtail.blocks.BooleanBlock', (), {'default': True, 'help_text': "Check this to link all images and headings to the URL of the first link in their unit's list, if there is a link.", 'required': False}), 45: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Check this to add a horizontal rule line to top of info unit group.', 'required': False}), 46: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Check this to show horizontal rule lines between info units.', 'label': 'Show rule lines between items', 'required': False}), 47: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('none', 'None'), ('rounded', 'Rounded corners'), ('circle', 'Circle')], 'help_text': 'Adds a border-radius class to images in this group, allowing for a rounded or circular border.', 'label': 'Border radius for images?', 'required': False}), 48: ('wagtail.blocks.StructBlock', [[('text', 6), ('level', 7), ('icon', 8)]], {'default': {'level': 'h3'}, 'required': False}), 49: ('wagtail.blocks.RichTextBlock', (), {'blank': True, 'required': False}), 50: ('wagtail.blocks.ListBlock', (33,), {'required': False}), 51: ('wagtail.blocks.StructBlock', [[('image', 12), ('heading', 48), ('body', 49), ('links', 50)]], {}), 52: ('wagtail.blocks.ListBlock', (51,), {'default': []}), 53: ('wagtail.blocks.StructBlock', [[('format', 43), ('heading', 9), ('intro', 29), ('link_image_and_heading', 44), ('has_top_rule_line', 45), ('lines_between_items', 46), ('border_radius_image', 47), ('info_units', 52)]], {}), 54: ('wagtail.blocks.BooleanBlock', (), {'required': False}), 55: ('wagtail.blocks.StreamBlock', [[('paragraph', 29), ('well', 41), ('links', 33), ('info_unit_group', 53)]], {'blank': True}), 56: ('wagtail.blocks.StructBlock', [[('label', 6), ('icon', 6), ('is_bordered', 54), ('is_midtone', 54), ('is_expanded', 54), ('is_expanded_padding', 54), ('content', 55)]], {}), 57: ('wagtail.blocks.CharBlock', (), {'help_text': 'Added as an <h3>
at the top of this block. Also adds a wrapping <div>
whose id
attribute comes from a slugified version of this heading, creating an anchor that can be used when linking to this part of the page.', 'required': False}), 58: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Check this to add a horizontal rule line to top of expandable group.', 'required': False}), 59: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Check this to add FAQ schema markup to expandables.', 'label': 'Uses FAQ schema', 'required': False}), 60: ('wagtail.blocks.ListBlock', (56,), {}), 61: ('wagtail.blocks.StructBlock', [[('heading', 57), ('body', 29), ('is_accordion', 54), ('has_top_rule_line', 58), ('is_faq', 59), ('expandables', 60)]], {}), 62: ('wagtail.blocks.RegexBlock', (), {'error_messages': {'invalid': 'The YouTube video ID is in the wrong format.'}, 'help_text': 'Enter the YouTube video ID, which is located at the end of the video URL, after "v=". For example, the video ID for https://www.youtube.com/watch?v=1V0Ax9OIc84 is 1V0Ax9OIc84.', 'label': 'YouTube video ID', 'regex': '^[\\w-]{11}$', 'required': False}), 63: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Optional thumbnail image to show before and after the video plays. If the thumbnail image is not set here, the video player will default to showing the thumbnail that was set in (or automatically chosen by) YouTube.', 'required': False}), 64: ('wagtail.blocks.StructBlock', [[('video_id', 62), ('thumbnail_image', 63)]], {}), 65: ('wagtail.blocks.CharBlock', (), {'required': True}), 66: ('wagtail.blocks.TextBlock', (), {'help_text': 'Accessible description of the chart content', 'required': True}), 67: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('bar', 'Bar'), ('datetime', 'Date/time'), ('line', 'Line'), ('tilemap', 'Tile grid map')]}), 68: ('wagtail.blocks.TextBlock', (), {'help_text': "URL of the chart's data source or an array of JSON data", 'required': True, 'rows': 2}), 69: ('wagtail.blocks.TextBlock', (), {'help_text': 'For charts pulling from a separate source file, include a list of the column headers (from a CSV file) or keys (from a JSON file) to include in the chart as ["HEADER/KEY1", "HEADER/KEY2"]. To change how the data is labeled in the chart, include the correct labels with the format [{"key": "HEADER/KEY1", "label": "NEWLABEL"}, {"key": "HEADER/KEY2", "label": "NEWLABEL2"}]', 'required': False}), 70: ('wagtail.blocks.BooleanBlock', (), {'default': True, 'help_text': 'Uncheck this option to initially only show the first data series in the chart. Leave checked to show all data series by default. Users can always turn data series on or off by interacting with the chart legend. ', 'required': False}), 71: ('wagtail.blocks.TextBlock', (), {'help_text': 'The column header (CSV), key or data array (JSON) to include as the source of x-axis values.', 'required': False}), 72: ('wagtail.blocks.CharBlock', (), {'help_text': "Name the javascript function in chart-hooks.js to run on the provided data before handing it to the chart. Can also provide '___'-separated arguments to this function which are passed in as arguments 2 to n", 'required': False}), 73: ('wagtail.blocks.TextBlock', (), {'help_text': 'If the chart needs the option for users to filter the data shown, for example by date or geographic region, provide the JSON objects to filter on, in the format {key: "KEY", "label": "LABEL"}', 'required': False}), 74: ('wagtail.blocks.TextBlock', (), {'help_text': 'A JSON object with style overrides for the underlying Highcharts chart. No object merging is done, nested objects should be referenced with dot notation: {"tooltip.shape": "circle"}', 'required': False}), 75: ('wagtail.blocks.IntegerBlock', (), {'blank': True, 'help_text': 'A number to determine how many months of the data are projected values', 'max_value': 12, 'min_value': 0, 'null': True, 'required': False}), 76: ('wagtail.blocks.CharBlock', (), {'help_text': 'Attribution for the data source', 'required': False}), 77: ('wagtail.blocks.CharBlock', (), {'help_text': 'When the underlying data was published', 'required': False}), 78: ('wagtail.blocks.CharBlock', (), {'help_text': 'Custom text for the chart download field. Required to display a download link.', 'required': False}), 79: ('wagtail.blocks.CharBlock', (), {'help_text': 'Location of a file to download, if different from the data source', 'required': False}), 80: ('wagtail.blocks.TextBlock', (), {'help_text': 'General chart information', 'required': False}), 81: ('wagtail.blocks.StructBlock', [[('title', 65), ('subtitle', 27), ('description', 66), ('figure_number', 6), ('chart_type', 67), ('data_source', 68), ('data_series', 69), ('show_all_series_by_default', 70), ('x_axis_source', 71), ('transform', 72), ('x_axis_label', 6), ('y_axis_label', 6), ('filters', 73), ('style_overrides', 74), ('projected_months', 75), ('source_credits', 76), ('date_published', 77), ('download_text', 78), ('download_file', 79), ('notes', 80)]], {}), 82: ('wagtail.blocks.RichTextBlock', (), {'blank': True, 'features': ['ol', 'ul', 'bold', 'italic', 'link', 'document-link'], 'required': False}), 83: ('wagtail.blocks.CharBlock', (), {'blank': True, 'help_text': "Add an optional anchor link tag for this question. Tag should be unique and use dashes or underscores for separation instead of spaces (ie, 'question-one-tag')", 'max_length': 500, 'required': False}), 84: ('wagtail.blocks.CharBlock', (), {'max_length': 500}), 85: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'h3', 'h4', 'link', 'ol', 'ul', 'document-link', 'image', 'embed'], 'label': 'Text'}), 86: ('wagtail.blocks.StructBlock', [[('content', 85)]], {}), 87: ('wagtail.blocks.StreamBlock', [[('text', 86), ('table', 25), ('video_player', 64)]], {}), 88: ('wagtail.blocks.StructBlock', [[('anchor_tag', 83), ('question', 84), ('answer_content', 87)]], {}), 89: ('wagtail.blocks.ListBlock', (88,), {}), 90: ('wagtail.blocks.StructBlock', [[('description', 82), ('questions', 89)]], {'label': 'FAQ schema'}), 91: ('wagtail.blocks.CharBlock', (), {'label': 'Title of How To section', 'max_length': 500}), 92: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4')], 'help_text': 'Choose a tag for the title of the How To section.', 'label': 'Tag for How To section title'}), 93: ('wagtail.blocks.BooleanBlock', (), {'default': True, 'help_text': 'The How To schema requires a title to let search engines understand what it is about. If you do not want the title to be displayed in the page, uncheck this box and the title content will only be made available to crawlers and screen readers.', 'label': 'Show How To section title', 'required': False}), 94: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4'), ('b', 'Bold'), ('p', 'Paragraph')], 'help_text': 'Choose a tag for the title of each HowTo step.', 'label': 'Tag for step titles'}), 95: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Check this box to display numbers before step titles. ', 'label': 'Show numbers for steps', 'required': False}), 96: ('wagtail.blocks.CharBlock', (), {'blank': True, 'help_text': "Add an optional anchor link tag to allow linking directly to this step. Tag should be unique and use dashes or underscores for separation instead of spaces (ie, 'step-one-tag').", 'max_length': 500, 'required': False}), 97: ('wagtail.blocks.CharBlock', (), {'help_text': 'Enter a title for this HowTo step. You do not need to include a number in the title -- numbers will be added automatically in the template if the show numbers checkbox is checked.', 'max_length': 500}), 98: ('wagtail.blocks.StructBlock', [[('anchor_tag', 96), ('title', 97), ('step_content', 87)]], {}), 99: ('wagtail.blocks.ListBlock', (98,), {}), 100: ('wagtail.blocks.StructBlock', [[('title', 91), ('title_tag', 92), ('show_title', 93), ('description', 82), ('step_title_tag', 94), ('has_numbers', 95), ('steps', 99)]], {'label': 'HowTo schema', 'max_num': 1}), 101: ('wagtail.blocks.RawHTMLBlock', (), {'help_text': 'Content from WordPress unescaped.'})}),
+ ),
+ ]
diff --git a/cfgov/v1/models/blog_page.py b/cfgov/v1/models/blog_page.py
index eb265bee892..67720ea3f6c 100644
--- a/cfgov/v1/models/blog_page.py
+++ b/cfgov/v1/models/blog_page.py
@@ -14,6 +14,7 @@ class BlogContent(blocks.StreamBlock):
full_width_text = organisms.FullWidthText()
info_unit_group = organisms.InfoUnitGroup()
expandable = organisms.Expandable()
+ expandable_group = organisms.ExpandableGroup()
well = organisms.Well()
video_player = organisms.VideoPlayer()
email_signup = v1_blocks.EmailSignUpChooserBlock()