Skip to content

Commit e69c337

Browse files
committed
Add a funding page with people that have GitHub Sponsors
1 parent 4c869a5 commit e69c337

File tree

5 files changed

+95
-6
lines changed

5 files changed

+95
-6
lines changed

locales/en-US/funding.ftl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## Works in conjunction with team data from teams.ftl
2+
3+
## funding.html.hbs
4+
funding-page-title = Funding
5+
funding-intro = Rust contributors shown on this page can be funded with GitHub Sponsors. Consider sponsoring them if you want to support the development of Rust.

src/main.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::assets::compile_assets;
22
use crate::i18n::{TeamHelper, create_loader};
33
use crate::redirect::create_redirects;
4-
use crate::render::{RenderCtx, render_directory, render_governance, render_index};
4+
use crate::render::{RenderCtx, render_directory, render_funding, render_governance, render_index};
55
use crate::rust_version::fetch_rust_version;
66
use crate::teams::{encode_zulip_stream, load_rust_teams};
77
use anyhow::Context;
@@ -110,8 +110,11 @@ fn main() -> anyhow::Result<()> {
110110
".well-known/security.txt",
111111
)?;
112112

113+
let all_team_members = ctx.teams.all_team_members();
114+
113115
render_index(&ctx)?;
114-
render_governance(&ctx)?;
116+
render_governance(&ctx, &all_team_members)?;
117+
render_funding(&ctx, &all_team_members)?;
115118
render_directory(&ctx, "community")?;
116119
render_directory(&ctx, "learn")?;
117120
render_directory(&ctx, "policies")?;

src/render.rs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::assets::AssetFiles;
22
use crate::fs::{copy_dir_all, ensure_directory};
33
use crate::i18n::{EXPLICIT_LOCALE_INFO, LocaleInfo, SUPPORTED_LOCALES};
44
use crate::rust_version::RustVersion;
5-
use crate::teams::{PageData, RustTeamData};
5+
use crate::teams::{AllTeamMembers, PageData, RustTeamData};
66
use crate::{BaseUrl, ENGLISH, LAYOUT};
77
use anyhow::Context;
88
use handlebars::Handlebars;
@@ -179,7 +179,10 @@ pub fn render_index(render_ctx: &RenderCtx) -> anyhow::Result<()> {
179179
})
180180
}
181181

182-
pub fn render_governance(render_ctx: &RenderCtx) -> anyhow::Result<()> {
182+
pub fn render_governance(
183+
render_ctx: &RenderCtx,
184+
all_team_members: &AllTeamMembers,
185+
) -> anyhow::Result<()> {
183186
let data = render_ctx.teams.index_data();
184187

185188
// Index page
@@ -226,13 +229,12 @@ pub fn render_governance(render_ctx: &RenderCtx) -> anyhow::Result<()> {
226229
})?;
227230

228231
// Page with all team members
229-
let all_team_members_data = render_ctx.teams.all_team_members();
230232
for_all_langs("governance/people/index.html", |dst_path, lang| {
231233
render_ctx
232234
.page(
233235
"governance/all-team-members",
234236
"governance-all-team-members-title",
235-
&all_team_members_data,
237+
all_team_members,
236238
lang,
237239
)
238240
.render(dst_path)
@@ -263,6 +265,22 @@ pub fn render_governance(render_ctx: &RenderCtx) -> anyhow::Result<()> {
263265
Ok(())
264266
}
265267

268+
pub fn render_funding(
269+
render_ctx: &RenderCtx,
270+
all_team_members: &AllTeamMembers,
271+
) -> anyhow::Result<()> {
272+
let data = render_ctx.teams.funding_data(all_team_members);
273+
274+
// Index page
275+
for_all_langs("funding/index.html", |dst_path, lang| {
276+
render_ctx
277+
.page("funding", "funding-page-title", &data, lang)
278+
.render(dst_path)
279+
})?;
280+
281+
Ok(())
282+
}
283+
266284
/// Render all templates found in the given directory.
267285
pub fn render_directory(render_ctx: &RenderCtx, category: &str) -> anyhow::Result<()> {
268286
for dir in std::fs::read_dir(render_ctx.template_dir.join(category))? {

src/teams.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,27 @@ impl RustTeamData {
346346
people
347347
}
348348

349+
pub fn funding_data(&self, all_team_members: &AllTeamMembers) -> FundingData {
350+
let people_with_sponsors = all_team_members
351+
.active
352+
.iter()
353+
.filter_map(|member| {
354+
let person = self.people.get(&member.github)?;
355+
if person.github_sponsors {
356+
Some(FundablePerson {
357+
name: member.name.clone(),
358+
github: member.github.to_string(),
359+
})
360+
} else {
361+
None
362+
}
363+
})
364+
.collect();
365+
FundingData {
366+
people: people_with_sponsors,
367+
}
368+
}
369+
349370
fn get_toplevel_team_url<'a>(&'a self, mut team: &'a Team) -> Option<String> {
350371
while !is_toplevel_team(team) {
351372
let Some(parent) = &team.subteam_of else {
@@ -476,6 +497,17 @@ pub struct PersonData {
476497
alumni_teams: Vec<PersonTeam>,
477498
}
478499

500+
#[derive(Serialize)]
501+
pub struct FundablePerson {
502+
name: String,
503+
github: String,
504+
}
505+
506+
#[derive(Serialize)]
507+
pub struct FundingData {
508+
people: Vec<FundablePerson>,
509+
}
510+
479511
pub fn load_rust_teams() -> anyhow::Result<RustTeamData> {
480512
println!("Downloading Team API data");
481513

templates/funding.html.hbs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{{#*inline "member"}}
2+
<div class="w-100 w-25-l mb3 flex flex-row items-center">
3+
<a class="mr4 w4 h4 flex-shrink-0" href="{{baseurl}}/governance/people/{{member.github}}">
4+
<img class="w-100 h-100 bg-white br2"
5+
src="https://avatars.githubusercontent.com/{{member.github}}"
6+
alt="{{member.name}}">
7+
</a>
8+
<div class="flex flex-column">
9+
<a href="{{baseurl}}/governance/people/{{member.github}}">{{member.name}}</a>
10+
<a href="https://github.com/sponsors/{{member.github}}" class="button button-secondary mt2">Sponsor</a>
11+
</div>
12+
</div>
13+
{{/inline}}
14+
15+
{{#*inline "page"}}
16+
<section class="green" style="padding-bottom: 10px;">
17+
<div class="w-100 mw-none mw-8-m mw9-l center f2 ph3">
18+
<p>{{fluent "funding-intro"}}</p>
19+
</div>
20+
</section>
21+
22+
<section class="green" style="padding-bottom: 15px;">
23+
<div class="w-100 mw-none mw-8-m mw9-l flex flex-column flex-row-l flex-wrap-l center ph3">
24+
{{#each data.people as |member|}}
25+
{{> member member=member baseurl=../baseurl }}
26+
{{/each}}
27+
</div>
28+
</section>
29+
30+
{{/inline}}
31+
{{~> (lookup this "parent")~}}

0 commit comments

Comments
 (0)