Skip to content

Commit d394c78

Browse files
Merge pull request #27 from hotosm/feat/ind-member-page
created individual member page + improved existing page structure
2 parents da53cf4 + 35db98d commit d394c78

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1184
-175
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
# Generated by Django 4.2.7 on 2024-06-04 23:15
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('impact_areas', '0013_individualimpactareapage_external_icon_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.RemoveField(
14+
model_name='individualimpactareapage',
15+
name='black_dogear_box_link_text',
16+
),
17+
migrations.RemoveField(
18+
model_name='individualimpactareapage',
19+
name='black_dogear_box_link_url',
20+
),
21+
migrations.RemoveField(
22+
model_name='individualimpactareapage',
23+
name='black_dogear_box_title',
24+
),
25+
migrations.RemoveField(
26+
model_name='individualimpactareapage',
27+
name='explore_impact_areas_text',
28+
),
29+
migrations.RemoveField(
30+
model_name='individualimpactareapage',
31+
name='load_more_projects_text',
32+
),
33+
migrations.RemoveField(
34+
model_name='individualimpactareapage',
35+
name='projects_title',
36+
),
37+
migrations.RemoveField(
38+
model_name='individualimpactareapage',
39+
name='red_dogear_box_link_text',
40+
),
41+
migrations.RemoveField(
42+
model_name='individualimpactareapage',
43+
name='red_dogear_box_link_url',
44+
),
45+
migrations.RemoveField(
46+
model_name='individualimpactareapage',
47+
name='red_dogear_box_title',
48+
),
49+
migrations.RemoveField(
50+
model_name='individualimpactareapage',
51+
name='use_cases_title',
52+
),
53+
migrations.RemoveField(
54+
model_name='individualimpactareapage',
55+
name='view_all_projects_link',
56+
),
57+
migrations.RemoveField(
58+
model_name='individualimpactareapage',
59+
name='view_all_projects_text',
60+
),
61+
migrations.AddField(
62+
model_name='impactareaspage',
63+
name='black_dogear_box_link_text',
64+
field=models.CharField(default='Get Involved with HOT'),
65+
),
66+
migrations.AddField(
67+
model_name='impactareaspage',
68+
name='black_dogear_box_link_url',
69+
field=models.URLField(blank=True),
70+
),
71+
migrations.AddField(
72+
model_name='impactareaspage',
73+
name='black_dogear_box_title',
74+
field=models.CharField(default='Check many opportunities to get involved with HOT!'),
75+
),
76+
migrations.AddField(
77+
model_name='impactareaspage',
78+
name='explore_impact_areas_text',
79+
field=models.CharField(default='Explore Other Impact Areas'),
80+
),
81+
migrations.AddField(
82+
model_name='impactareaspage',
83+
name='load_more_projects_text',
84+
field=models.CharField(default='Load More Projects'),
85+
),
86+
migrations.AddField(
87+
model_name='impactareaspage',
88+
name='projects_title',
89+
field=models.CharField(default='Projects'),
90+
),
91+
migrations.AddField(
92+
model_name='impactareaspage',
93+
name='red_dogear_box_link_text',
94+
field=models.CharField(default='View Tools & Resources'),
95+
),
96+
migrations.AddField(
97+
model_name='impactareaspage',
98+
name='red_dogear_box_link_url',
99+
field=models.URLField(blank=True),
100+
),
101+
migrations.AddField(
102+
model_name='impactareaspage',
103+
name='red_dogear_box_title',
104+
field=models.CharField(default='Learn more about Tools & Resources and Data Access'),
105+
),
106+
migrations.AddField(
107+
model_name='impactareaspage',
108+
name='use_cases_title',
109+
field=models.CharField(default='Use Cases'),
110+
),
111+
migrations.AddField(
112+
model_name='impactareaspage',
113+
name='view_all_projects_link',
114+
field=models.URLField(blank=True),
115+
),
116+
migrations.AddField(
117+
model_name='impactareaspage',
118+
name='view_all_projects_text',
119+
field=models.CharField(default='View all projects'),
120+
),
121+
]

app/impact_areas/models.py

+45-33
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ def get_context(self, request, *args, **kwargs):
4242
context['other_impact_areas'] = other_impact_areas
4343
return context
4444

45+
parent_page_type = [
46+
'impact_areas.ImpactAreasPage'
47+
]
48+
4549
header_image = models.ForeignKey(
4650
"wagtailimages.Image",
4751
null=True,
@@ -71,24 +75,8 @@ def get_context(self, request, *args, **kwargs):
7175
intro = RichTextField(blank=True)
7276
description = RichTextField(blank=True)
7377

74-
use_cases_title = models.CharField(default="Use Cases")
7578
use_cases = StreamField(UseCaseBlock(), use_json_field=True, blank=True, null=True)
7679

77-
projects_title = models.CharField(default="Projects")
78-
view_all_projects_text = models.CharField(default="View all projects")
79-
view_all_projects_link = models.URLField(blank=True)
80-
load_more_projects_text = models.CharField(default="Load More Projects")
81-
82-
explore_impact_areas_text = models.CharField(default="Explore Other Impact Areas")
83-
84-
red_dogear_box_title = models.CharField(blank=True)
85-
red_dogear_box_link_text = models.CharField(blank=True)
86-
red_dogear_box_link_url = models.URLField(blank=True)
87-
88-
black_dogear_box_title = models.CharField(blank=True)
89-
black_dogear_box_link_text = models.CharField(blank=True)
90-
black_dogear_box_link_url = models.URLField(blank=True)
91-
9280
content_panels = Page.content_panels + [
9381
MultiFieldPanel([
9482
FieldPanel('header_image'),
@@ -101,24 +89,8 @@ def get_context(self, request, *args, **kwargs):
10189
FieldPanel('description'),
10290
], heading="Body"),
10391
MultiFieldPanel([
104-
FieldPanel('use_cases_title'),
10592
FieldPanel('use_cases'),
10693
], heading="Use Cases"),
107-
MultiFieldPanel([
108-
FieldPanel('projects_title'),
109-
FieldPanel('view_all_projects_text'),
110-
FieldPanel('view_all_projects_link'),
111-
FieldPanel('load_more_projects_text'),
112-
], heading="Projects"),
113-
FieldPanel('explore_impact_areas_text'),
114-
MultiFieldPanel([
115-
FieldPanel('red_dogear_box_title'),
116-
FieldPanel('red_dogear_box_link_text'),
117-
FieldPanel('red_dogear_box_link_url'),
118-
FieldPanel('black_dogear_box_title'),
119-
FieldPanel('black_dogear_box_link_text'),
120-
FieldPanel('black_dogear_box_link_url'),
121-
], heading="Dogear Boxes"),
12294
]
12395

12496

@@ -134,6 +106,8 @@ class ImpactAreaBlock(StreamBlock):
134106

135107

136108
class ImpactAreasPage(Page):
109+
max_count = 1
110+
137111
intro = RichTextField(blank=True)
138112

139113
image = models.ForeignKey(
@@ -147,10 +121,48 @@ class ImpactAreasPage(Page):
147121

148122
impact_area_blocks = StreamField(ImpactAreaBlock(), use_json_field=True, null=True)
149123

124+
# > IMPACT AREA SHARED FIELDS
125+
use_cases_title = models.CharField(default="Use Cases")
126+
127+
projects_title = models.CharField(default="Projects")
128+
view_all_projects_text = models.CharField(default="View all projects")
129+
view_all_projects_link = models.URLField(blank=True)
130+
load_more_projects_text = models.CharField(default="Load More Projects")
131+
132+
explore_impact_areas_text = models.CharField(default="Explore Other Impact Areas")
133+
134+
red_dogear_box_title = models.CharField(default="Learn more about Tools & Resources and Data Access")
135+
red_dogear_box_link_text = models.CharField(default="View Tools & Resources")
136+
red_dogear_box_link_url = models.URLField(blank=True)
137+
138+
black_dogear_box_title = models.CharField(default="Check many opportunities to get involved with HOT!")
139+
black_dogear_box_link_text = models.CharField(default="Get Involved with HOT")
140+
black_dogear_box_link_url = models.URLField(blank=True)
141+
150142
content_panels = Page.content_panels + [
151143
MultiFieldPanel([
152144
FieldPanel('image'),
153145
FieldPanel('intro')
154146
], heading="Header section"),
155-
FieldPanel('impact_area_blocks')
147+
FieldPanel('impact_area_blocks'),
148+
MultiFieldPanel([
149+
MultiFieldPanel([
150+
FieldPanel('use_cases_title'),
151+
], heading="Use Cases"),
152+
MultiFieldPanel([
153+
FieldPanel('projects_title'),
154+
FieldPanel('view_all_projects_text'),
155+
FieldPanel('view_all_projects_link'),
156+
FieldPanel('load_more_projects_text'),
157+
], heading="Projects"),
158+
FieldPanel('explore_impact_areas_text'),
159+
MultiFieldPanel([
160+
FieldPanel('red_dogear_box_title'),
161+
FieldPanel('red_dogear_box_link_text'),
162+
FieldPanel('red_dogear_box_link_url'),
163+
FieldPanel('black_dogear_box_title'),
164+
FieldPanel('black_dogear_box_link_text'),
165+
FieldPanel('black_dogear_box_link_url'),
166+
], heading="Dogear Boxes"),
167+
], heading="Impact Area Shared Fields"),
156168
]

app/impact_areas/templates/impact_areas/individual_impact_area_page.html

+7-7
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
</div>
2727

2828
{% comment %} USE CASES {% endcomment %}
29-
{% include "ui/components/SectionHeadingWithUnderline.html" with title=page.use_cases_title %}
29+
{% include "ui/components/SectionHeadingWithUnderline.html" with title=page.get_parent.specific.use_cases_title %}
3030
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8 my-10">
3131
{% for case in page.use_cases %}
3232
{% include "./components/UseCaseBox.html" with number=forloop.counter body=case.value.description linktext=case.value.link_text linkurl=case.value.link_url %}
@@ -37,10 +37,10 @@
3737
<div class="my-20">
3838
<div class="grid grid-cols-1 md:grid-cols-2 gap-y-4">
3939
<div>
40-
{% include "ui/components/SectionHeadingWithUnderline.html" with title=page.projects_title %}
40+
{% include "ui/components/SectionHeadingWithUnderline.html" with title=page.get_parent.specific.projects_title %}
4141
</div>
4242
<p class="md:text-right">
43-
{% include "ui/components/BaseLink.html" with linktext=page.view_all_projects_text linkurl=page.view_all_projects_link %}
43+
{% include "ui/components/BaseLink.html" with linktext=page.get_parent.specific.view_all_projects_text linkurl=page.view_all_projects_link %}
4444
</p>
4545
</div>
4646
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-x-8 mt-10" id="projects-list">
@@ -58,7 +58,7 @@
5858
hx-select-oob="#projects-list:beforeend, #next-project:outerHTML"
5959
>
6060
<span class="border-b-hot-red border-b-2 pb-1 font-medium mr-4 text-intro">
61-
Load More Projects
61+
{{page.get_parent.specific.load_more_projects_text}}
6262
</span>
6363
{% include "ui/components/icon_svgs/LinkCaret.html" with class="rotate-90 text-hot-red" %}
6464
</button>
@@ -69,7 +69,7 @@
6969
{% comment %} OTHER IMPACT AREAS {% endcomment %}
7070
<div class="my-20">
7171
<h1 class="text-h2 font-bold">
72-
{{ page.explore_impact_areas_text }}
72+
{{ page.get_parent.specific.explore_impact_areas_text }}
7373
</h1>
7474
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-5 gap-6 mt-10">
7575
{% for area in other_impact_areas %}
@@ -91,10 +91,10 @@ <h1 class="text-h2 font-bold">
9191
{% comment %} DOGEAR BOXES {% endcomment %}
9292
<div class="grid grid-cols-1 md:grid-cols-2 text-white my-10 gap-8">
9393
<div>
94-
{% include "ui/components/dogear_boxes/DogearRed.html" with title=page.red_dogear_box_title linktext=page.red_dogear_box_link_text linkurl=page.red_dogear_box_link_url %}
94+
{% include "ui/components/dogear_boxes/DogearRed.html" with title=page.get_parent.specific.red_dogear_box_title linktext=page.get_parent.specific.red_dogear_box_link_text linkurl=page.get_parent.specific.red_dogear_box_link_url %}
9595
</div>
9696
<div>
97-
{% include "ui/components/dogear_boxes/DogearBlack.html" with title=page.black_dogear_box_title linktext=page.black_dogear_box_link_text linkurl=page.black_dogear_box_link_url %}
97+
{% include "ui/components/dogear_boxes/DogearBlack.html" with title=page.get_parent.specific.black_dogear_box_title linktext=page.get_parent.specific.black_dogear_box_link_text linkurl=page.get_parent.specific.black_dogear_box_link_url %}
9898
</div>
9999
</div>
100100
</div>

app/members/__init__.py

Whitespace-only changes.

app/members/admin.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

app/members/apps.py

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class MembersConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'app.members'
+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Generated by Django 4.2.7 on 2024-06-03 23:02
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
import wagtail.blocks
6+
import wagtail.fields
7+
8+
9+
class Migration(migrations.Migration):
10+
11+
initial = True
12+
13+
dependencies = [
14+
('wagtailcore', '0089_log_entry_data_json_null_to_object'),
15+
('wagtailimages', '0025_alter_image_file_alter_rendition_file'),
16+
]
17+
18+
operations = [
19+
migrations.CreateModel(
20+
name='MemberOwnerPage',
21+
fields=[
22+
('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')),
23+
('on_the_web_title', models.CharField(default='On the Web')),
24+
('posts_title', models.CharField(default='Posts')),
25+
('project_contribution_title', models.CharField(default='Project Contribution')),
26+
],
27+
options={
28+
'abstract': False,
29+
},
30+
bases=('wagtailcore.page',),
31+
),
32+
migrations.CreateModel(
33+
name='IndividualMemberPage',
34+
fields=[
35+
('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')),
36+
('position', models.CharField()),
37+
('location', models.CharField()),
38+
('introduction', wagtail.fields.RichTextField()),
39+
('on_the_web_links', wagtail.fields.StreamField([('blocks', wagtail.blocks.StructBlock([('link_text', wagtail.blocks.CharBlock(required=True)), ('link_url', wagtail.blocks.URLBlock(blank=True, required=False))]))], blank=True, use_json_field=True)),
40+
('image', models.ForeignKey(blank=True, help_text='An image of the member', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image')),
41+
],
42+
options={
43+
'abstract': False,
44+
},
45+
bases=('wagtailcore.page',),
46+
),
47+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Generated by Django 4.2.7 on 2024-06-03 23:26
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('mapping_hubs', '0008_alter_individualmappinghubpage_dogear_boxes'),
11+
('members', '0001_initial'),
12+
]
13+
14+
operations = [
15+
migrations.RemoveField(
16+
model_name='individualmemberpage',
17+
name='location',
18+
),
19+
migrations.AddField(
20+
model_name='individualmemberpage',
21+
name='location_hub',
22+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='mapping_hubs.individualmappinghubpage'),
23+
),
24+
]

app/members/migrations/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)