diff --git a/src/views.rs b/src/views.rs index a49760a..4198b44 100644 --- a/src/views.rs +++ b/src/views.rs @@ -785,7 +785,7 @@ fn palette(questions: &[Question], answers: &[(i64, String, bool)]) -> String { let sel = a.map(|(_, s, _)| !s.trim().is_empty()).unwrap_or(false); let rev = a.map(|(_, _, r)| *r).unwrap_or(false); let cls = match (sel, rev) { - (true, true) => "pal rev", + (true, true) => "pal ansrev", (true, false) => "pal ans", _ => "pal", }; @@ -828,31 +828,56 @@ pub fn attempt(ctx: &Ctx, user: &str, attempt_id: &str, questions: &[Question], .collect() }; format!( - r#"
+ r#"
- question {n} of {total} · {subj} - {qt} · +4 / −1{revflag} + question {n} + {subj} · {qtword} · +4 / −1{revflag}
-
{stem}
+
{stem}
{qopts}
{sub2} · {ch} · {year} {shift} · {difficulty}
{opts} -
- - - - +
+
+ + + + +
+
+ + + +
"#, hidden = if i == 0 { "" } else { " hidden" }, + rev0 = if rev { "1" } else { "0" }, prevdis = if i == 0 { " disabled" } else { "" }, revcls = if rev { " danger" } else { "" }, - total = questions.len(), n = i + 1, subj = esc(&q.subject), ch = esc(&q.chapter), - qt = esc(&q.qtype), - revflag = if rev { " · marked" } else { "" }, + qtword = if q.qtype == "NUM" { "numerical" } else { "single correct" }, + revflag = format!(" · marked", h = if rev { "" } else { " hidden" }), stem = rich(&q.stem), + qopts = if q.qtype == "NUM" { + String::new() + } else { + // Read-only option text inside the white card (mirrors the + // typeset block; the pills below are the click targets). + let items: String = ["A", "B", "C", "D"] + .iter() + .enumerate() + .map(|(k, _letter)| { + format!( + "

({n}) {t}

", + n = k + 1, + t = rich(&q.opts[k]), + ) + }) + .collect(); + items + }, sub2 = esc(&q.subtopic), year = q.year, shift = esc(&q.shift), @@ -886,6 +911,11 @@ pub fn attempt(ctx: &Ctx, user: &str, attempt_id: &str, questions: &[Question], r#"
{title}{n} questions
+
+ candidate + {user} + +
time left
{dur}
@@ -896,12 +926,14 @@ pub fn attempt(ctx: &Ctx, user: &str, attempt_id: &str, questions: &[Question],
{qs}