Skip to content

Commit f2e32fb

Browse files
committed
Add fallback for role descriptions
1 parent b352151 commit f2e32fb

File tree

4 files changed

+60
-13
lines changed

4 files changed

+60
-13
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/i18n.rs

+58-5
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,42 @@ impl Default for TeamHelper {
107107
}
108108
}
109109

110+
enum TeamHelperParam {
111+
/// `{{team-text team name}}`
112+
Name,
113+
114+
/// `{{team-text team description}}`
115+
Description,
116+
117+
/// `{{team-text team role (lookup member.roles 0)}}`
118+
Role(String),
119+
}
120+
121+
impl TeamHelperParam {
122+
fn fluent_id(&self, team_name: &str) -> String {
123+
match self {
124+
TeamHelperParam::Name => format!("governance-team-{team_name}-name"),
125+
TeamHelperParam::Description => format!("governance-team-{team_name}-description"),
126+
TeamHelperParam::Role(role_id) => format!("governance-role-{role_id}"),
127+
}
128+
}
129+
130+
fn english<'a>(&self, team: &'a serde_json::Value) -> &'a str {
131+
match self {
132+
TeamHelperParam::Name => team["website_data"]["name"].as_str().unwrap(),
133+
TeamHelperParam::Description => team["website_data"]["description"].as_str().unwrap(),
134+
TeamHelperParam::Role(role_id) => {
135+
for role in team["roles"].as_array().unwrap() {
136+
if role["id"] == *role_id {
137+
return role["description"].as_str().unwrap();
138+
}
139+
}
140+
panic!("no role {:?}", role_id);
141+
}
142+
}
143+
}
144+
}
145+
110146
impl HelperDef for TeamHelper {
111147
fn call<'reg: 'rc, 'rc>(
112148
&self,
@@ -137,6 +173,25 @@ impl HelperDef for TeamHelper {
137173
"{{team-text}} takes only identifier parameters",
138174
));
139175
};
176+
177+
let param = match id.as_str() {
178+
"name" => TeamHelperParam::Name,
179+
"description" => TeamHelperParam::Description,
180+
"role" => {
181+
let Some(role_id) = h.param(2) else {
182+
return Err(RenderError::new(
183+
"{{team-text}} requires a third parameter for the role id",
184+
));
185+
};
186+
TeamHelperParam::Role(role_id.value().as_str().unwrap().to_owned())
187+
}
188+
unrecognized => {
189+
return Err(RenderError::new(format!(
190+
"unrecognized {{{{team-text}}}} param {unrecognized:?}",
191+
)));
192+
}
193+
};
194+
140195
let team = rcx
141196
.evaluate(context, name)
142197
.map_err(|e| RenderError::from_error(&format!("Cannot find team {}", name), e))?;
@@ -148,22 +203,20 @@ impl HelperDef for TeamHelper {
148203
.expect("Language must be string");
149204
let team_name = team.as_json()["name"].as_str().unwrap();
150205

151-
let fluent_id = format!("governance-team-{}-{}", team_name, id);
152-
153206
// English uses the team data directly, so that it gets autoupdated
154207
if lang == "en-US" {
155-
let english = team.as_json()["website_data"][id].as_str().unwrap();
208+
let english = param.english(team.as_json());
156209
out.write(english)
157210
.map_err(|e| RenderError::from_error("failed to render English team data", e))?;
158211
} else if let Some(value) = self.i18n.lookup_no_default_fallback(
159212
&lang.parse().expect("language must be valid"),
160-
&fluent_id,
213+
&param.fluent_id(team_name),
161214
None,
162215
) {
163216
out.write(&value)
164217
.map_err(|e| RenderError::from_error("failed to render translated team data", e))?;
165218
} else {
166-
let english = team.as_json()["website_data"][id].as_str().unwrap();
219+
let english = param.english(team.as_json());
167220
out.write(english)
168221
.map_err(|e| RenderError::from_error("failed to render", e))?;
169222
}

src/main.rs

-6
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ use sass_rs::{compile_file, Options};
5959
use category::Category;
6060

6161
use caching::CachedNamedFile;
62-
use handlebars::handlebars_helper;
6362
use handlebars_fluent::{loader::Loader, FluentHelper};
6463
use i18n::{create_loader, LocaleInfo, SupportedLocale, TeamHelper, EXPLICIT_LOCALE_INFO};
6564

@@ -492,11 +491,6 @@ async fn rocket() -> _ {
492491
engine
493492
.handlebars
494493
.register_helper("encode-zulip-stream", Box::new(encode_zulip_stream));
495-
496-
handlebars_helper!(concat: |x: String, y: String| x + &y);
497-
engine
498-
.handlebars
499-
.register_helper("concat", Box::new(concat));
500494
});
501495

502496
let rust_version = RustVersion::fetch().await.unwrap_or_default();

templates/governance/group-team.html.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
<div>{{fluent "governance-user-team-leader"}}</div>
6363
{{else}}
6464
{{#if member.roles}}
65-
<div>{{fluent (concat "governance-role-" (lookup member.roles 0))}}</div>
65+
<div>{{team-text team role (lookup member.roles 0)}}</div>
6666
{{/if}}
6767
{{/if}}
6868
</div>

0 commit comments

Comments
 (0)