feat: edit print templates on the printer page and store them on presets

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-03 22:45:56 -04:00
co-authored by Cursor
parent 1337d9833d
commit c03ffc0833
18 changed files with 904 additions and 293 deletions
+13 -11
View File
@@ -1,16 +1,16 @@
# Page printer
**Created:** 2026-08-29
**Last updated:** 2026-08-31
**Description:** Merge a markdown note onto students, teams, or events and print one page per match. Save the recipe as a print preset.
**Last updated:** 2026-09-03
**Description:** Merge a markdown template onto students, teams, or events and print one page per match. Save the recipe as a print preset.
## Where to open it
Sign in and go to **Tools → Page printer** (`/print`).
## Write a template note
## Write a template
Create a standalone note on **Notes** (not a page note or student note). Use `{{tokens}}` for values. Click a token chip on the printer page to copy it.
Edit the markdown on the printer page. Use `{{tokens}}` for values. **Insert token** opens a searchable list; click a token to insert it at the caret, or use the copy icon to put `{{Name}}` on the clipboard.
```markdown
# Interview — {{FirstName}} {{LastName}}
@@ -64,6 +64,8 @@ Put `{{AnswerSpace}}` where you want ruled write-in lines. Markdown collapses bl
Additional-field tokens use the same names as the Students index columns (for example `{{Interview Time}}`). Those values come from each student's `#Student:{id}` `## Additional fields` table. See [student-notes-import.md](student-notes-import.md).
Templates used to live on **Notes**. After this change they are stored on the print preset. Old template notes can be deleted from Notes once `/print` looks right.
## Filters
Pick **Students**, **Teams**, or **Events**, then optional filters.
@@ -72,18 +74,18 @@ For students: Grade, TSA year, and officer (any / officers only / non-officers).
## Print presets
A print preset stores the *recipe* only: name, template note, entity type, and filters. It does not store merged pages. Each Preview uses the current roster and notes.
A print preset stores the *recipe* only: name, markdown, entity type, and filters. It does not store merged pages. Each Preview uses the current roster and notes.
1. Set the note, entity, and filters.
2. Enter a name and click **Save as**.
1. Write the template, set the entity and filters.
2. Click **Save**. If no preset is selected, enter a name in the dialog.
3. Later, choose a preset, click **Preview**, then **Print**.
4. **Update** overwrites the selected preset. **Delete** removes it.
4. **Save** overwrites the selected preset. **Delete** removes the preset, not the editor text. **New** starts a blank template.
If the template note was removed, the filters still load. Choose another note before Preview.
Switching presets, clicking **New**, or leaving the page asks before discarding unsaved template or filter changes. To keep a copy under a new name, clear the preset (or click **New** after copying the markdown), then **Save**.
## Print
**Preview** builds the pages. **Print** opens the browser print dialog (same as other handouts). Navigation is hidden.
**Preview** builds the pages and opens a lightbox. **Print** (in the lightbox or on the page, while the preview is still current) opens the browser print dialog. Navigation and the editor are hidden.
**New page per record** (on by default, saved with the preset) starts each match on a new sheet. Turn it off to flow records together; `{{PageBreak}}` in the template still works. Content that is taller than one sheet continues naturally.
@@ -91,4 +93,4 @@ If that option is off and the template has **exactly one** markdown table, the h
**Font size (pt)** (default 12) and **Answer lines** (default 3) apply to every page-printer recipe. They are saved on the preset.
If Preview finds more than 75 matches, a warning is shown first.
If Preview finds more than 75 matches, a warning is shown in the preview lightbox.