diff --git a/public/admin.js b/public/admin.js index f189528..fee477a 100644 --- a/public/admin.js +++ b/public/admin.js @@ -959,25 +959,51 @@ async function printMonthReport(studentId, monthMonday, monthRef) { async function printCourse(courseId) { const course = await api(`/api/admin/courses/${courseId}`); + + function renderItemBody(it) { + let html = ''; + if (it.body) { + html += `
${it.body.split(/\n\n+/).map((p) => `

${esc(p.trim())}

`).join('')}
`; + } + if (it.type === 'quiz' && it.questions?.length) { + html += `
    ${it.questions.map((q, i) => { + const choices = q.choices?.length + ? `` + : ''; + return `
  1. ${esc(q.prompt)}${choices}
  2. `; + }).join('')}
`; + } + return html; + } + const unitBlocks = course.units.map((u) => { - const items = u.items.map((it) => - `${TYPE_ICON[it.type] || ''} ${esc(it.title)}${TYPE_LABEL[it.type] || ''}` - ).join(''); - return `

${esc(u.name)}

- ${items || ''}
ItemType
No items
`; + const items = u.items.map((it) => ` +
+
${TYPE_ICON[it.type] || ''} ${esc(it.title)} ${TYPE_LABEL[it.type] || ''}${it.points ? ` ${it.points} pts` : ''}
+ ${renderItemBody(it)} +
`).join(''); + return `

${esc(u.name)}

${items || '

No items.

'}
`; }).join(''); const win = window.open('', '_blank'); win.document.write(`${esc(course.name)} -

${esc(course.name)}${course.subject ? ` — ${esc(course.subject)}` : ''}

+

${esc(course.name)}${course.subject ? ` — ${esc(course.subject)}` : ''}

${unitBlocks || '

No units in this course.

'}