- {% include "ui/components/sections/NavyBackgroundWithImage.html" with image=page.job_opportunities_image title=page.job_opportunities_title description=page.job_opportunities_description button_text=page.job_opportunities_button_text button_link=page.job_opportunities_button_link %}
+ {% include "ui/components/sections/NavyBackgroundWithImage.html" with image=page.job_opportunities_image title=page.job_opportunities_title description=page.job_opportunities_description button_text=page.job_opportunities_button_text button_link=page.job_opportunities_button_link imageright=True %}
diff --git a/app/tech/migrations/0004_alter_individualtechstackpage_link_blocks_and_more.py b/app/tech/migrations/0004_alter_individualtechstackpage_link_blocks_and_more.py
new file mode 100644
index 0000000..85362ba
--- /dev/null
+++ b/app/tech/migrations/0004_alter_individualtechstackpage_link_blocks_and_more.py
@@ -0,0 +1,41 @@
+# Generated by Django 4.2.7 on 2024-09-03 21:39
+
+from django.db import migrations
+import wagtail.blocks
+import wagtail.documents.blocks
+import wagtail.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('tech', '0003_techproductsuitepage_product_suite_learn_more_text_and_more'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='individualtechstackpage',
+ name='link_blocks',
+ field=wagtail.fields.StreamField([('blocks', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock()), ('linktext', wagtail.blocks.CharBlock()), ('linkurl', wagtail.blocks.StreamBlock([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())]))]))], blank=True, null=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='techproductsuitepage',
+ name='black_box_link_url',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='techproductsuitepage',
+ name='go_back_link',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='techproductsuitepage',
+ name='red_box_link_url',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='techproductsuitepage',
+ name='tech_stack_cta_button_link_url',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ ]
diff --git a/app/tools_and_resources/migrations/0006_alter_openmappingsolutionspage_cta_button_link_and_more.py b/app/tools_and_resources/migrations/0006_alter_openmappingsolutionspage_cta_button_link_and_more.py
new file mode 100644
index 0000000..21f0733
--- /dev/null
+++ b/app/tools_and_resources/migrations/0006_alter_openmappingsolutionspage_cta_button_link_and_more.py
@@ -0,0 +1,37 @@
+# Generated by Django 4.2.7 on 2024-09-03 21:39
+
+from django.db import migrations
+import wagtail.blocks
+import wagtail.documents.blocks
+import wagtail.fields
+import wagtail.images.blocks
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('tools_and_resources', '0005_alter_openmappingsolutionspage_solutions'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='openmappingsolutionspage',
+ name='cta_button_link',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='openmappingsolutionspage',
+ name='solutions',
+ field=wagtail.fields.StreamField([('solution', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock()), ('banner', wagtail.images.blocks.ImageChooserBlock()), ('description', wagtail.blocks.RichTextBlock()), ('items', wagtail.blocks.StreamBlock([('item', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock()), ('description', wagtail.blocks.RichTextBlock()), ('links', wagtail.blocks.StreamBlock([('link', wagtail.blocks.StructBlock([('linktext', wagtail.blocks.CharBlock()), ('linkurl', wagtail.blocks.StreamBlock([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], required=False))]))], required=False))]))]))]))], blank=True, null=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='resourceandlearningpage',
+ name='large_panels',
+ field=wagtail.fields.StreamField([('panel', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('title', wagtail.blocks.CharBlock()), ('description', wagtail.blocks.RichTextBlock()), ('link_text', wagtail.blocks.CharBlock()), ('link', wagtail.blocks.StreamBlock([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], required=False))]))], blank=True, null=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='toolsandresourcespage',
+ name='large_panels',
+ field=wagtail.fields.StreamField([('panel', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock()), ('title', wagtail.blocks.CharBlock()), ('description', wagtail.blocks.RichTextBlock()), ('link_text', wagtail.blocks.CharBlock()), ('link', wagtail.blocks.StreamBlock([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], required=False))]))], blank=True, null=True, use_json_field=True),
+ ),
+ ]
diff --git a/app/ui/templates/ui/components/BaseLinkNoUnderline.html b/app/ui/templates/ui/components/BaseLinkNoUnderline.html
new file mode 100644
index 0000000..a956ca3
--- /dev/null
+++ b/app/ui/templates/ui/components/BaseLinkNoUnderline.html
@@ -0,0 +1,4 @@
+
+ {{linktext}}
+ {% include "ui/components/icon_svgs/LinkCaret.html" with class="ml-2" %}
+
\ No newline at end of file
diff --git a/app/ui/templates/ui/components/carousel/CarouselShellGeneric.html b/app/ui/templates/ui/components/carousel/CarouselShellGeneric.html
new file mode 100644
index 0000000..ca1f692
--- /dev/null
+++ b/app/ui/templates/ui/components/carousel/CarouselShellGeneric.html
@@ -0,0 +1,55 @@
+{% load wagtailimages_tags %}
+
+
+ {% if title %}
+
+ {% include "ui/components/SectionHeadingWithUnderline.html" %}
+
+ {% endif %}
+
+
+
+ {% include "ui/components/icon_svgs/LinkCaret.html" with class="rotate-180" %}
+
+
+
+
+ {% include "ui/components/icon_svgs/LinkCaret.html" %}
+
+
+
+
+
+
+ {% for item in items %}
+
+ {% block individual_item %}
+ {% endblock %}
+
+ {% endfor %}
+
+
+
+
+
+ {% include "ui/components/icon_svgs/LinkCaret.html" with class="rotate-180" %}
+
+
+
+
+ {% include "ui/components/icon_svgs/LinkCaret.html" %}
+
+
+
+
\ No newline at end of file
diff --git a/app/ui/templates/ui/components/carousel/CarouselStaffTestimonial.html b/app/ui/templates/ui/components/carousel/CarouselStaffTestimonial.html
new file mode 100644
index 0000000..946c820
--- /dev/null
+++ b/app/ui/templates/ui/components/carousel/CarouselStaffTestimonial.html
@@ -0,0 +1,72 @@
+{% extends "ui/components/carousel/CarouselShellGeneric.html" %}
+{% load wagtailimages_tags %}
+
+{% block individual_item %}
+
+
“
+
{{item.value.description}}
+
+ {% if item.value.image_override %}
+ {% image item.value.image_override original class="rounded-full aspect-square object-cover w-12 h-12" %}
+ {% else %}
+ {% if item.value.member %}
+ {% image item.value.member.image original class="rounded-full aspect-square object-cover w-12 h-12" %}
+ {% endif %}
+ {% endif %}
+
+
+ {% if item.value.name_override %}{{item.value.name_override}}{% else %}{% if item.value.member %}{{item.value.member.title}}{% endif %}{% endif %}
+
+ {% comment %} it's times like these that you really wish django let you use brackets in if statements. but alas {% endcomment %}
+ {% if item.value.title_override or item.value.hub_override %}
+ ,
+ {% else %}
+ {% if item.value.member %}
+ {% if item.value.member.location_hub or item.value.member.position %}
+ ,
+ {% endif %}
+ {% endif %}
+ {% endif %}
+
+ {% if item.value.title_override %}
+ {{item.value.title_override}}
+ {% if item.value.hub_override or item.value.member and item.value.member.position %}-{% endif %}
+ {% else %}
+ {% if item.value.member and item.value.member.position %}
+ {{item.value.member.position}}
+ {% if item.value.hub_override or item.value.member and item.value.member.position %}-{% endif %}
+ {% endif %}
+ {% endif %}
+
+ {% if item.value.hub_override %}
+ {{item.value.hub_override.title}}
+ {% else %}
+ {% if item.value.member and item.value.member.location_hub %}
+ {{item.value.member.location_hub.title}}
+ {% endif %}
+ {% endif %}
+
+
+
+ {% if item.value.title_override %}
+ {{item.value.title_override}}
+ {% if item.value.hub_override or item.value.member and item.value.member.position %}-{% endif %}
+ {% else %}
+ {% if item.value.member and item.value.member.position %}
+ {{item.value.member.position}}
+ {% if item.value.hub_override or item.value.member and item.value.member.position %}-{% endif %}
+ {% endif %}
+ {% endif %}
+
+ {% if item.value.hub_override %}
+ {{item.value.hub_override.title}}
+ {% else %}
+ {% if item.value.member and item.value.member.location_hub %}
+ {{item.value.member.location_hub.title}}
+ {% endif %}
+ {% endif %}
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/ui/templates/ui/components/events/EventPreviewBlockEvent.html b/app/ui/templates/ui/components/events/EventPreviewBlockEvent.html
index 791d142..0335714 100644
--- a/app/ui/templates/ui/components/events/EventPreviewBlockEvent.html
+++ b/app/ui/templates/ui/components/events/EventPreviewBlockEvent.html
@@ -40,10 +40,7 @@
-
- {{event.get_parent.specific.event_read_more_text}}
- {% include "ui/components/icon_svgs/LinkCaret.html" with class="ml-2" %}
-
+ {% include "ui/components/BaseLinkNoUnderline.html" with linktext=event.get_parent.specific.event_read_more_text linkurl=event.url %}
{% if event.rsvp_link %}
diff --git a/app/ui/templates/ui/components/sections/LinkListSection.html b/app/ui/templates/ui/components/sections/LinkListSection.html
index f06fe00..4aff05a 100644
--- a/app/ui/templates/ui/components/sections/LinkListSection.html
+++ b/app/ui/templates/ui/components/sections/LinkListSection.html
@@ -19,7 +19,7 @@
{{title}}
{% else %}
{{link.value.text}}
- {% include "ui/components/icon_svgs/ExternalLinkIcon.html" with class="mb-1" %}
+ {% include "ui/components/icon_svgs/ExternalLinkIcon.html" with class="mb-1" %}
{% endif %}
diff --git a/app/who_we_are/migrations/0006_alter_whowearepage_black_box_link_and_more.py b/app/who_we_are/migrations/0006_alter_whowearepage_black_box_link_and_more.py
new file mode 100644
index 0000000..2a40e58
--- /dev/null
+++ b/app/who_we_are/migrations/0006_alter_whowearepage_black_box_link_and_more.py
@@ -0,0 +1,56 @@
+# Generated by Django 4.2.7 on 2024-09-03 21:39
+
+from django.db import migrations
+import wagtail.blocks
+import wagtail.documents.blocks
+import wagtail.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('who_we_are', '0005_remove_whowearepage_black_box_link_url_and_more'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='whowearepage',
+ name='black_box_link',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='whowearepage',
+ name='learn_more_button_link',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='whowearepage',
+ name='our_approach_button_link',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='whowearepage',
+ name='our_people_links',
+ field=wagtail.fields.StreamField([('link_block', wagtail.blocks.StructBlock([('text', wagtail.blocks.CharBlock()), ('link', wagtail.blocks.StreamBlock([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, required=False))]))], blank=True, null=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='whowearepage',
+ name='our_policies_links',
+ field=wagtail.fields.StreamField([('link_block', wagtail.blocks.StructBlock([('text', wagtail.blocks.CharBlock()), ('link', wagtail.blocks.StreamBlock([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, required=False))]))], blank=True, null=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='whowearepage',
+ name='partners_view_all_link',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='whowearepage',
+ name='red_box_link',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='whowearepage',
+ name='work_hot_button_url',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ ]
diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js
index 36fb3b6..7aa816e 100644
--- a/frontend/tailwind.config.js
+++ b/frontend/tailwind.config.js
@@ -31,6 +31,7 @@ module.exports = {
archivo: "var(--font-archivo)",
},
fontSize: {
+ hxl: "var(--font-size-hxl)",
h1: "var(--font-size-h1)", // 56pt
h2: "var(--font-size-h2)", // 48pt
h3: "var(--font-size-h3)", // 38pt
diff --git a/home/migrations/0034_alter_homepage_carousel_alter_homepage_e404_links_and_more.py b/home/migrations/0034_alter_homepage_carousel_alter_homepage_e404_links_and_more.py
new file mode 100644
index 0000000..6661291
--- /dev/null
+++ b/home/migrations/0034_alter_homepage_carousel_alter_homepage_e404_links_and_more.py
@@ -0,0 +1,66 @@
+# Generated by Django 4.2.7 on 2024-09-03 21:39
+
+from django.db import migrations
+import wagtail.blocks
+import wagtail.documents.blocks
+import wagtail.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('home', '0033_remove_homepage_get_involved_button_link_and_more'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='homepage',
+ name='carousel',
+ field=wagtail.fields.StreamField([('slides', wagtail.blocks.StructBlock([('header', wagtail.blocks.CharBlock(help_text='Slide header', required=True)), ('body', wagtail.blocks.CharBlock(help_text='Slide body', required=True)), ('action_button', wagtail.blocks.StructBlock([('text', wagtail.blocks.CharBlock(help_text='Text to display on the button', required=True)), ('link', wagtail.blocks.StreamBlock([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, help_text='URL to link to', required=False))], help_text='Button to display on the slide', required=False))]))], blank=True, use_json_field=True, verbose_name='Carousel'),
+ ),
+ migrations.AlterField(
+ model_name='homepage',
+ name='e404_links',
+ field=wagtail.fields.StreamField([('link', wagtail.blocks.StructBlock([('text', wagtail.blocks.CharBlock()), ('link', wagtail.blocks.StreamBlock([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], required=False))]))], blank=True, help_text='Links to be shown on the 404 page.', null=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='homepage',
+ name='footer_bottom_links',
+ field=wagtail.fields.StreamField([('link', wagtail.blocks.StructBlock([('text', wagtail.blocks.CharBlock()), ('link', wagtail.blocks.StreamBlock([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], required=False))]))], blank=True, help_text='The links which show in the bottom right corner of the footer; Privacy Policy, Terms and Conditions, etc.', null=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='homepage',
+ name='get_involved_button_url',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='homepage',
+ name='mapping_hubs_link_link',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='homepage',
+ name='partner_with_us_button_url',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='homepage',
+ name='tools_resources_button_link',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='homepage',
+ name='view_all_news_link',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='homepage',
+ name='view_all_programs_url',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ migrations.AlterField(
+ model_name='homepage',
+ name='who_we_are_button_url',
+ field=wagtail.fields.StreamField([('page', wagtail.blocks.PageChooserBlock()), ('url', wagtail.blocks.URLBlock()), ('document', wagtail.documents.blocks.DocumentChooserBlock())], blank=True, use_json_field=True),
+ ),
+ ]
diff --git a/home/models.py b/home/models.py
index 31f5352..c72b59e 100644
--- a/home/models.py
+++ b/home/models.py
@@ -88,7 +88,7 @@ def get_context(self, request, *args, **kwargs):
e404_links = StreamField([
('link', StructBlock([
('text', CharBlock()),
- ('link', CharBlock(required=False))
+ ('link', LinkOrPageBlock(required=False))
]))
], use_json_field=True, null=True, blank=True, help_text="Links to be shown on the 404 page.")
diff --git a/home/templates/home/components/404Content.html b/home/templates/home/components/404Content.html
index e045c80..a7e8087 100644
--- a/home/templates/home/components/404Content.html
+++ b/home/templates/home/components/404Content.html
@@ -6,7 +6,7 @@
{{home_page.e404_title}}
{% for link in home_page.e404_links %}
- {% include "ui/components/BaseLink.html" with linktext=link.value.text linkurl=link.value.url %}
+ {% include "ui/components/BaseLink.html" with linktext=link.value.text linkurl=link.value.link %}
{% endfor %}
\ No newline at end of file
diff --git a/hot_osm/static/css/hot_osm.css b/hot_osm/static/css/hot_osm.css
index 587bc93..74be538 100644
--- a/hot_osm/static/css/hot_osm.css
+++ b/hot_osm/static/css/hot_osm.css
@@ -22,6 +22,8 @@
font-family: var(--font-archivo);
/* Font Size */
+ --font-size-hxl: 3.11rem;
+ --font-size-h1: 2.55rem;
--font-size-h1: 2.55rem;
--font-size-h2: 2.11rem;
--font-size-h3: 1.77rem;
diff --git a/hot_osm/templates/404.html b/hot_osm/templates/404.html
index 256e653..55b5242 100644
--- a/hot_osm/templates/404.html
+++ b/hot_osm/templates/404.html
@@ -1,8 +1,5 @@
{% extends "base.html" %}
-{% load homepage_tags %}
-{% get_home_page as home_page %}
-
{% block title %}
Page not found
{% endblock title %}
@@ -12,6 +9,8 @@
{% block content %}
404
- {% include "home/components/404Content.html" %}
+
{% endblock content %}
\ No newline at end of file