picata 0.0.1__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. LICENSE.md +24 -0
  2. README.md +59 -0
  3. components/HelloWorld.tsx +11 -0
  4. entrypoint.tsx +268 -0
  5. manage.py +15 -0
  6. picata/__init__.py +1 -0
  7. picata/apps.py +33 -0
  8. picata/blocks.py +175 -0
  9. picata/helpers/__init__.py +70 -0
  10. picata/helpers/wagtail.py +61 -0
  11. picata/log_utils.py +47 -0
  12. picata/middleware.py +54 -0
  13. picata/migrations/0001_initial.py +264 -0
  14. picata/migrations/0002_alter_article_content_alter_basicpage_content.py +112 -0
  15. picata/migrations/0003_alter_article_content_alter_basicpage_content.py +104 -0
  16. picata/migrations/0004_alter_article_content_alter_basicpage_content.py +105 -0
  17. picata/migrations/0005_socialsettings.py +48 -0
  18. picata/migrations/0006_alter_article_content.py +71 -0
  19. picata/migrations/0007_splitviewpage.py +69 -0
  20. picata/migrations/0008_alter_splitviewpage_content.py +96 -0
  21. picata/migrations/0009_alter_splitviewpage_content.py +111 -0
  22. picata/migrations/0010_alter_splitviewpage_content.py +105 -0
  23. picata/migrations/0011_alter_splitviewpage_options_and_more.py +113 -0
  24. picata/migrations/0012_alter_splitviewpage_content.py +109 -0
  25. picata/migrations/0013_alter_article_content.py +43 -0
  26. picata/migrations/0014_alter_article_content_alter_article_summary.py +24 -0
  27. picata/migrations/0015_alter_article_options_article_tagline_and_more.py +28 -0
  28. picata/migrations/0016_alter_article_options_alter_articletag_options_and_more.py +33 -0
  29. picata/migrations/0017_articletagrelation_alter_article_tags_and_more.py +35 -0
  30. picata/migrations/0018_rename_articletag_pagetag_and_more.py +21 -0
  31. picata/migrations/0019_rename_name_plural_articletype__name_plural.py +18 -0
  32. picata/migrations/0020_rename__name_plural_articletype__pluralised_name.py +18 -0
  33. picata/migrations/0021_rename_article_type_article_page_type.py +18 -0
  34. picata/migrations/0022_homepage.py +28 -0
  35. picata/migrations/__init__.py +0 -0
  36. picata/models.py +486 -0
  37. picata/settings/__init__.py +1 -0
  38. picata/settings/base.py +345 -0
  39. picata/settings/dev.py +94 -0
  40. picata/settings/mypy.py +7 -0
  41. picata/settings/prod.py +12 -0
  42. picata/settings/test.py +6 -0
  43. picata/static/picata/ada-profile.jpg +0 -0
  44. picata/static/picata/ada-social-bear.jpg +0 -0
  45. picata/static/picata/favicon.ico +0 -0
  46. picata/static/picata/fonts/Bitter-Light.ttf +0 -0
  47. picata/static/picata/fonts/Bitter-LightItalic.ttf +0 -0
  48. picata/static/picata/fonts/FiraCode-Light.ttf +0 -0
  49. picata/static/picata/fonts/FiraCode-SemiBold.ttf +0 -0
  50. picata/static/picata/fonts/Sacramento-Regular.ttf +0 -0
  51. picata/static/picata/fonts/ZillaSlab-Bold.ttf +0 -0
  52. picata/static/picata/fonts/ZillaSlab-BoldItalic.ttf +0 -0
  53. picata/static/picata/fonts/ZillaSlab-Light.ttf +0 -0
  54. picata/static/picata/fonts/ZillaSlab-LightItalic.ttf +0 -0
  55. picata/static/picata/fonts/ZillaSlabHighlight-Bold.ttf +0 -0
  56. picata/static/picata/icons.svg +56 -0
  57. picata/templates/picata/3_column.html +28 -0
  58. picata/templates/picata/404.html +11 -0
  59. picata/templates/picata/500.html +13 -0
  60. picata/templates/picata/_post_list.html +24 -0
  61. picata/templates/picata/article.html +20 -0
  62. picata/templates/picata/base.html +135 -0
  63. picata/templates/picata/basic_page.html +10 -0
  64. picata/templates/picata/blocks/icon_link_item.html +7 -0
  65. picata/templates/picata/blocks/icon_link_list.html +4 -0
  66. picata/templates/picata/blocks/icon_link_list_stream.html +3 -0
  67. picata/templates/picata/dl_view.html +18 -0
  68. picata/templates/picata/home_page.html +21 -0
  69. picata/templates/picata/post_listing.html +17 -0
  70. picata/templates/picata/previews/3col.html +73 -0
  71. picata/templates/picata/previews/dl.html +10 -0
  72. picata/templates/picata/previews/split.html +10 -0
  73. picata/templates/picata/previews/theme_gallery.html +158 -0
  74. picata/templates/picata/search_results.html +28 -0
  75. picata/templates/picata/split_view.html +15 -0
  76. picata/templates/picata/tags/site_menu.html +8 -0
  77. picata/templatetags/__init__.py +1 -0
  78. picata/templatetags/absolute_static.py +15 -0
  79. picata/templatetags/menu_tags.py +42 -0
  80. picata/templatetags/stringify.py +23 -0
  81. picata/transformers.py +60 -0
  82. picata/typing/__init__.py +19 -0
  83. picata/typing/wagtail.py +31 -0
  84. picata/urls.py +48 -0
  85. picata/validators.py +36 -0
  86. picata/views.py +80 -0
  87. picata/wagtail_hooks.py +43 -0
  88. picata/wsgi.py +15 -0
  89. picata-0.0.1.dist-info/METADATA +87 -0
  90. picata-0.0.1.dist-info/RECORD +94 -0
  91. picata-0.0.1.dist-info/WHEEL +4 -0
  92. picata-0.0.1.dist-info/licenses/LICENSE.md +24 -0
  93. pygments.sass +382 -0
  94. styles.sass +300 -0
@@ -0,0 +1,113 @@
1
+ # Generated by Django 5.1.4 on 2025-01-04 00:57
2
+
3
+ import wagtail.fields
4
+ from django.db import migrations
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+ dependencies = [
9
+ ("hpk", "0010_alter_splitviewpage_content"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterModelOptions(
14
+ name="splitviewpage",
15
+ options={"verbose_name": "Split-View", "verbose_name_plural": "Split-Views"},
16
+ ),
17
+ migrations.AlterField(
18
+ model_name="splitviewpage",
19
+ name="content",
20
+ field=wagtail.fields.StreamField(
21
+ [("rich_text", 0), ("code", 3), ("image", 4), ("icon_link_lists", 14)],
22
+ blank=True,
23
+ block_lookup={
24
+ 0: ("wagtail.blocks.RichTextBlock", (), {}),
25
+ 1: ("wagtail.blocks.TextBlock", (), {"help_text": None, "required": True}),
26
+ 2: (
27
+ "wagtail.blocks.ChoiceBlock",
28
+ [],
29
+ {
30
+ "choices": [
31
+ ("python", "Python"),
32
+ ("javascript", "JavaScript"),
33
+ ("html", "HTML"),
34
+ ("css", "CSS"),
35
+ ("bash", "Bash"),
36
+ ("plaintext", "Plain Text"),
37
+ ],
38
+ "required": False,
39
+ },
40
+ ),
41
+ 3: ("wagtail.blocks.StructBlock", [[("code", 1), ("language", 2)]], {}),
42
+ 4: ("hpk.blocks.WrappedImageChooserBlock", (), {}),
43
+ 5: (
44
+ "wagtail.blocks.CharBlock",
45
+ (),
46
+ {
47
+ "help_text": "Optional heading for this list (e.g., Social Links).",
48
+ "required": False,
49
+ },
50
+ ),
51
+ 6: (
52
+ "wagtail.blocks.IntegerBlock",
53
+ (),
54
+ {
55
+ "default": 2,
56
+ "help_text": "Heading level for the list (1-6).",
57
+ "max_value": 6,
58
+ "min_value": 1,
59
+ "required": False,
60
+ },
61
+ ),
62
+ 7: (
63
+ "hpk.blocks.HREFBlock",
64
+ (),
65
+ {
66
+ "help_text": "An optional link field",
67
+ "max_length": 255,
68
+ "required": False,
69
+ },
70
+ ),
71
+ 8: (
72
+ "wagtail.blocks.CharBlock",
73
+ (),
74
+ {
75
+ "help_text": "The title for the list item.",
76
+ "max_length": 50,
77
+ "required": True,
78
+ },
79
+ ),
80
+ 9: (
81
+ "wagtail.blocks.CharBlock",
82
+ (),
83
+ {
84
+ "help_text": "Id of the icon in the static/icons.svg file.",
85
+ "max_length": 255,
86
+ "required": False,
87
+ },
88
+ ),
89
+ 10: (
90
+ "wagtail.blocks.StructBlock",
91
+ [[("href_block", 7), ("label", 8), ("icon", 9)]],
92
+ {},
93
+ ),
94
+ 11: ("wagtail.blocks.ListBlock", (10,), {"help_text": "The list of items."}),
95
+ 12: (
96
+ "wagtail.blocks.StructBlock",
97
+ [[("heading", 5), ("heading_level", 6), ("items", 11)]],
98
+ {},
99
+ ),
100
+ 13: (
101
+ "wagtail.blocks.StreamBlock",
102
+ [[("link_list", 12)]],
103
+ {
104
+ "help_text": "Add one or more heading-and-link-list blocks.",
105
+ "required": False,
106
+ },
107
+ ),
108
+ 14: ("wagtail.blocks.StructBlock", [[("lists", 13)]], {}),
109
+ },
110
+ help_text="Main content for the split-view page.",
111
+ ),
112
+ ),
113
+ ]
@@ -0,0 +1,109 @@
1
+ # Generated by Django 5.1.4 on 2025-01-04 02:55
2
+
3
+ import wagtail.fields
4
+ from django.db import migrations
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+ dependencies = [
9
+ ("hpk", "0011_alter_splitviewpage_options_and_more"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="splitviewpage",
15
+ name="content",
16
+ field=wagtail.fields.StreamField(
17
+ [("rich_text", 0), ("code", 3), ("image", 4), ("icon_link_lists", 14)],
18
+ blank=True,
19
+ block_lookup={
20
+ 0: ("wagtail.blocks.RichTextBlock", (), {}),
21
+ 1: ("wagtail.blocks.TextBlock", (), {"help_text": None, "required": True}),
22
+ 2: (
23
+ "wagtail.blocks.ChoiceBlock",
24
+ [],
25
+ {
26
+ "choices": [
27
+ ("python", "Python"),
28
+ ("javascript", "JavaScript"),
29
+ ("html", "HTML"),
30
+ ("css", "CSS"),
31
+ ("bash", "Bash"),
32
+ ("plaintext", "Plain Text"),
33
+ ],
34
+ "required": False,
35
+ },
36
+ ),
37
+ 3: ("wagtail.blocks.StructBlock", [[("code", 1), ("language", 2)]], {}),
38
+ 4: ("hpk.blocks.WrappedImageChooserBlock", (), {}),
39
+ 5: (
40
+ "wagtail.blocks.CharBlock",
41
+ (),
42
+ {
43
+ "help_text": "Optional heading for this list (e.g., Social Links).",
44
+ "required": False,
45
+ },
46
+ ),
47
+ 6: (
48
+ "wagtail.blocks.IntegerBlock",
49
+ (),
50
+ {
51
+ "default": 2,
52
+ "help_text": "Heading level for the list (1-6).",
53
+ "max_value": 6,
54
+ "min_value": 1,
55
+ "required": False,
56
+ },
57
+ ),
58
+ 7: (
59
+ "hpk.blocks.HREFBlock",
60
+ (),
61
+ {
62
+ "help_text": "An optional link field",
63
+ "max_length": 255,
64
+ "required": False,
65
+ },
66
+ ),
67
+ 8: (
68
+ "wagtail.blocks.CharBlock",
69
+ (),
70
+ {
71
+ "help_text": "The title for the list item.",
72
+ "max_length": 50,
73
+ "required": True,
74
+ },
75
+ ),
76
+ 9: (
77
+ "wagtail.blocks.CharBlock",
78
+ (),
79
+ {
80
+ "help_text": "Id of the icon in the static/icons.svg file.",
81
+ "max_length": 255,
82
+ "required": False,
83
+ },
84
+ ),
85
+ 10: (
86
+ "wagtail.blocks.StructBlock",
87
+ [[("href", 7), ("label", 8), ("icon", 9)]],
88
+ {},
89
+ ),
90
+ 11: ("wagtail.blocks.ListBlock", (10,), {"help_text": "The list of items."}),
91
+ 12: (
92
+ "wagtail.blocks.StructBlock",
93
+ [[("heading", 5), ("heading_level", 6), ("items", 11)]],
94
+ {},
95
+ ),
96
+ 13: (
97
+ "wagtail.blocks.StreamBlock",
98
+ [[("link_list", 12)]],
99
+ {
100
+ "help_text": "Add one or more heading-and-link-list blocks.",
101
+ "required": False,
102
+ },
103
+ ),
104
+ 14: ("wagtail.blocks.StructBlock", [[("lists", 13)]], {}),
105
+ },
106
+ help_text="Main content for the split-view page.",
107
+ ),
108
+ ),
109
+ ]
@@ -0,0 +1,43 @@
1
+ # Generated by Django 5.1.4 on 2025-01-08 07:12
2
+
3
+ import wagtail.fields
4
+ from django.db import migrations
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+ dependencies = [
9
+ ("hpk", "0012_alter_splitviewpage_content"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="article",
15
+ name="content",
16
+ field=wagtail.fields.StreamField(
17
+ [("section", 0), ("code", 3), ("image", 4)],
18
+ blank=True,
19
+ block_lookup={
20
+ 0: ("wagtail.blocks.RichTextBlock", (), {}),
21
+ 1: ("wagtail.blocks.TextBlock", (), {"help_text": None, "required": True}),
22
+ 2: (
23
+ "wagtail.blocks.ChoiceBlock",
24
+ [],
25
+ {
26
+ "choices": [
27
+ ("python", "Python"),
28
+ ("javascript", "JavaScript"),
29
+ ("html", "HTML"),
30
+ ("css", "CSS"),
31
+ ("bash", "Bash"),
32
+ ("plaintext", "Plain Text"),
33
+ ],
34
+ "required": False,
35
+ },
36
+ ),
37
+ 3: ("wagtail.blocks.StructBlock", [[("code", 1), ("language", 2)]], {}),
38
+ 4: ("wagtail.images.blocks.ImageChooserBlock", (), {}),
39
+ },
40
+ help_text="Main content for the article.",
41
+ ),
42
+ ),
43
+ ]
@@ -0,0 +1,24 @@
1
+ # Generated by Django 5.1.4 on 2025-01-08 23:41
2
+
3
+ import wagtail.fields
4
+ from django.db import migrations
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('hpk', '0013_alter_article_content'),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name='article',
16
+ name='content',
17
+ field=wagtail.fields.StreamField([('rich_text', 0), ('code', 3), ('image', 4)], blank=True, block_lookup={0: ('wagtail.blocks.RichTextBlock', (), {}), 1: ('wagtail.blocks.TextBlock', (), {'help_text': None, 'required': True}), 2: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('python', 'Python'), ('javascript', 'JavaScript'), ('html', 'HTML'), ('css', 'CSS'), ('bash', 'Bash'), ('plaintext', 'Plain Text')], 'required': False}), 3: ('wagtail.blocks.StructBlock', [[('code', 1), ('language', 2)]], {}), 4: ('wagtail.images.blocks.ImageChooserBlock', (), {})}, help_text='Main content for the article.'),
18
+ ),
19
+ migrations.AlterField(
20
+ model_name='article',
21
+ name='summary',
22
+ field=wagtail.fields.RichTextField(blank=True, help_text='A summary, to be displayed in previews.'),
23
+ ),
24
+ ]
@@ -0,0 +1,28 @@
1
+ # Generated by Django 5.1.4 on 2025-01-08 23:52
2
+
3
+ import wagtail.fields
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('hpk', '0014_alter_article_content_alter_article_summary'),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterModelOptions(
15
+ name='article',
16
+ options={'verbose_name': 'article', 'verbose_name_plural': 'articles'},
17
+ ),
18
+ migrations.AddField(
19
+ model_name='article',
20
+ name='tagline',
21
+ field=models.CharField(blank=True, help_text='A short tagline for the article.'),
22
+ ),
23
+ migrations.AlterField(
24
+ model_name='article',
25
+ name='summary',
26
+ field=wagtail.fields.RichTextField(blank=True, help_text='A summary to be displayed in previews.'),
27
+ ),
28
+ ]
@@ -0,0 +1,33 @@
1
+ # Generated by Django 5.1.4 on 2025-01-09 00:27
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('hpk', '0015_alter_article_options_article_tagline_and_more'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterModelOptions(
14
+ name='article',
15
+ options={},
16
+ ),
17
+ migrations.AlterModelOptions(
18
+ name='articletag',
19
+ options={},
20
+ ),
21
+ migrations.AlterModelOptions(
22
+ name='basicpage',
23
+ options={},
24
+ ),
25
+ migrations.AlterModelOptions(
26
+ name='postgrouppage',
27
+ options={'verbose_name': 'post listing', 'verbose_name_plural': 'post listings'},
28
+ ),
29
+ migrations.AlterModelOptions(
30
+ name='splitviewpage',
31
+ options={'verbose_name': 'split-view page', 'verbose_name_plural': 'split-view pages'},
32
+ ),
33
+ ]
@@ -0,0 +1,35 @@
1
+ # Generated by Django 5.1.4 on 2025-01-10 02:28
2
+
3
+ import django.db.models.deletion
4
+ import modelcluster.contrib.taggit
5
+ import modelcluster.fields
6
+ from django.db import migrations, models
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+
11
+ dependencies = [
12
+ ('hpk', '0016_alter_article_options_alter_articletag_options_and_more'),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.CreateModel(
17
+ name='ArticleTagRelation',
18
+ fields=[
19
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20
+ ('content_object', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='tagged_items', to='hpk.article')),
21
+ ('tag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tagged_items', to='hpk.articletag')),
22
+ ],
23
+ options={
24
+ 'abstract': False,
25
+ },
26
+ ),
27
+ migrations.AlterField(
28
+ model_name='article',
29
+ name='tags',
30
+ field=modelcluster.contrib.taggit.ClusterTaggableManager(blank=True, help_text='Tags for the article.', through='hpk.ArticleTagRelation', to='hpk.ArticleTag', verbose_name='Tags'),
31
+ ),
32
+ migrations.DeleteModel(
33
+ name='ArticleTagItem',
34
+ ),
35
+ ]
@@ -0,0 +1,21 @@
1
+ # Generated by Django 5.1.4 on 2025-01-14 01:13
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('hpk', '0017_articletagrelation_alter_article_tags_and_more'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.RenameModel(
14
+ old_name='ArticleTag',
15
+ new_name='PageTag',
16
+ ),
17
+ migrations.RenameModel(
18
+ old_name='ArticleTagRelation',
19
+ new_name='PageTagRelation',
20
+ ),
21
+ ]
@@ -0,0 +1,18 @@
1
+ # Generated by Django 5.1.5 on 2025-01-18 01:31
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('hpk', '0018_rename_articletag_pagetag_and_more'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.RenameField(
14
+ model_name='articletype',
15
+ old_name='name_plural',
16
+ new_name='_name_plural',
17
+ ),
18
+ ]
@@ -0,0 +1,18 @@
1
+ # Generated by Django 5.1.5 on 2025-01-18 01:34
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('hpk', '0019_rename_name_plural_articletype__name_plural'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.RenameField(
14
+ model_name='articletype',
15
+ old_name='_name_plural',
16
+ new_name='_Pluralised_name',
17
+ ),
18
+ ]
@@ -0,0 +1,18 @@
1
+ # Generated by Django 5.1.5 on 2025-01-18 03:04
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('hpk', '0020_rename__name_plural_articletype__pluralised_name'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.RenameField(
14
+ model_name='article',
15
+ old_name='article_type',
16
+ new_name='page_type',
17
+ ),
18
+ ]
@@ -0,0 +1,28 @@
1
+ # Generated by Django 5.1.5 on 2025-01-20 04:02
2
+
3
+ import django.db.models.deletion
4
+ import wagtail.fields
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ ('hpk', '0021_rename_article_type_article_page_type'),
12
+ ('wagtailcore', '0094_alter_page_locale'),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.CreateModel(
17
+ name='HomePage',
18
+ fields=[
19
+ ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
20
+ ('top_content', wagtail.fields.StreamField([('rich_text', 0), ('image', 1), ('icon_link_lists', 11)], blank=True, block_lookup={0: ('wagtail.blocks.RichTextBlock', (), {}), 1: ('hpk.blocks.WrappedImageChooserBlock', (), {}), 2: ('wagtail.blocks.CharBlock', (), {'help_text': 'Optional heading for this list (e.g., Social Links).', 'required': False}), 3: ('wagtail.blocks.IntegerBlock', (), {'default': 2, 'help_text': 'Heading level for the list (1-6).', 'max_value': 6, 'min_value': 1, 'required': False}), 4: ('hpk.blocks.HREFBlock', (), {'help_text': 'An optional link field', 'max_length': 255, 'required': False}), 5: ('wagtail.blocks.CharBlock', (), {'help_text': 'The title for the list item.', 'max_length': 50, 'required': True}), 6: ('wagtail.blocks.CharBlock', (), {'help_text': 'Id of the icon in the static/icons.svg file.', 'max_length': 255, 'required': False}), 7: ('wagtail.blocks.StructBlock', [[('href', 4), ('label', 5), ('icon', 6)]], {}), 8: ('wagtail.blocks.ListBlock', (7,), {'help_text': 'The list of items.'}), 9: ('wagtail.blocks.StructBlock', [[('heading', 2), ('heading_level', 3), ('items', 8)]], {}), 10: ('wagtail.blocks.StreamBlock', [[('link_list', 9)]], {'help_text': 'Add one or more heading-and-link-list blocks.', 'required': False}), 11: ('wagtail.blocks.StructBlock', [[('lists', 10)]], {})}, help_text="Content stream above 'Recent posts'")),
21
+ ('bottom_content', wagtail.fields.StreamField([('rich_text', 0), ('image', 1), ('icon_link_lists', 11)], blank=True, block_lookup={0: ('wagtail.blocks.RichTextBlock', (), {}), 1: ('hpk.blocks.WrappedImageChooserBlock', (), {}), 2: ('wagtail.blocks.CharBlock', (), {'help_text': 'Optional heading for this list (e.g., Social Links).', 'required': False}), 3: ('wagtail.blocks.IntegerBlock', (), {'default': 2, 'help_text': 'Heading level for the list (1-6).', 'max_value': 6, 'min_value': 1, 'required': False}), 4: ('hpk.blocks.HREFBlock', (), {'help_text': 'An optional link field', 'max_length': 255, 'required': False}), 5: ('wagtail.blocks.CharBlock', (), {'help_text': 'The title for the list item.', 'max_length': 50, 'required': True}), 6: ('wagtail.blocks.CharBlock', (), {'help_text': 'Id of the icon in the static/icons.svg file.', 'max_length': 255, 'required': False}), 7: ('wagtail.blocks.StructBlock', [[('href', 4), ('label', 5), ('icon', 6)]], {}), 8: ('wagtail.blocks.ListBlock', (7,), {'help_text': 'The list of items.'}), 9: ('wagtail.blocks.StructBlock', [[('heading', 2), ('heading_level', 3), ('items', 8)]], {}), 10: ('wagtail.blocks.StreamBlock', [[('link_list', 9)]], {'help_text': 'Add one or more heading-and-link-list blocks.', 'required': False}), 11: ('wagtail.blocks.StructBlock', [[('lists', 10)]], {})}, help_text="Content stream rendered under 'Recent posts'")),
22
+ ],
23
+ options={
24
+ 'verbose_name': 'home page',
25
+ },
26
+ bases=('wagtailcore.page',),
27
+ ),
28
+ ]
File without changes