Presentation download menu: standalone HTML + faithful slide PDF (decktape)
Build and Deploy Verso / deploy (push) Failing after 24m2s
Build and Deploy Verso / deploy (push) Failing after 24m2s
In RevealJS mode the download button becomes a 2-choice menu:
- Standalone HTML: a one-off compile with embed-resources (chalkboard and other
runtime-only plugins are dropped, since they don't survive self-containment),
yielding a single portable .html.
- Slide PDF: render the deck, then print it with decktape (headless Chromium)
to a faithful one-slide-per-page PDF.
Implementation:
- Dockerfile-base: install decktape + headless Chromium (open-source; deps via
playwright install-deps for Ubuntu-Noble correctness). Base-only change.
- QuartoRunner honours options.exportMode ('html-standalone' | 'pdf-slides');
exportMode is threaded web ClsiManager -> CLSI RequestParser -> CompileManager
-> runner.
- New GET /project/:id/presentation-export/:format compiles in the matching
export mode and streams the result as a download (PresentationExportController,
reusing ClsiManager.getOutputFileStream).
- pdf-hybrid-download-button shows the dropdown when the output is output.html;
PDF/LaTeX projects keep the single download button.
- i18n: download_as_standalone_html / download_as_pdf_slides (en + fr +
extracted-translations.json).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -69,6 +69,24 @@ RUN mkdir -p /opt/quarto-extensions \
|
||||
\
|
||||
&& chown -R www-data:www-data /opt/quarto-extensions
|
||||
|
||||
# Install decktape + headless Chromium (for exporting RevealJS decks to PDF)
|
||||
# -----------------------------------------------------------------------
|
||||
# decktape drives a headless Chromium (via Puppeteer) to print the rendered
|
||||
# reveal.js slides to a faithful, one-slide-per-page PDF. Chromium is the
|
||||
# open-source engine (BSD); decktape is MIT, Puppeteer Apache-2.0 — all
|
||||
# permissive and AGPL-compatible. They are invoked as a separate process
|
||||
# (QuartoRunner runs `decktape ...`), never linked into the app.
|
||||
#
|
||||
# Puppeteer downloads its Chromium into PUPPETEER_CACHE_DIR during the global
|
||||
# install; we put it in a world-readable /opt path so the www-data runtime user
|
||||
# can launch it. Playwright is used only as a robust, distro-aware installer for
|
||||
# Chromium's system libraries (handles Ubuntu Noble's t64 package renames).
|
||||
ENV PUPPETEER_CACHE_DIR=/opt/puppeteer
|
||||
RUN npm install -g decktape \
|
||||
&& npx --yes playwright@latest install-deps chromium \
|
||||
&& chmod -R a+rX /opt/puppeteer \
|
||||
&& rm -rf /root/.npm /root/.cache
|
||||
|
||||
# Install TeX Live (for compiling .tex projects with latexmk)
|
||||
# -----------------------------------------------------------------------
|
||||
# Verso compiles .qmd with Quarto and .tex with latexmk; both engines live
|
||||
|
||||
Reference in New Issue
Block a user