Skip to content

feat(documents): OpenDocument (ODT) Viewer - #146

Merged
slaveofcode merged 2 commits into
developfrom
feat/documents-odt-viewer
Aug 3, 2026
Merged

feat(documents): OpenDocument (ODT) Viewer#146
slaveofcode merged 2 commits into
developfrom
feat/documents-odt-viewer

Conversation

@slaveofcode

Copy link
Copy Markdown
Owner

What

New OpenDocument (ODT) Viewer in the Documents category — opens .odt files (LibreOffice / OpenOffice Writer, Google Docs export) entirely client-side: headings, lists, tables, images, links and inline formatting (bold/italic/underline, colours, alignment). Print / Save as PDF. Nothing is uploaded.

Why a custom parser (per your choice)

No AGPL WebODF and no ~50MB office engine. A small ODF→HTML parser unzips the .odt with fflate (already a dep) and parses content.xml/styles.xml with the browser's native DOMParser. Zero new dependencies, no license encumbrance on the site.

Safety

Output is safe by construction: only a fixed tag whitelist is emitted, every text node and attribute value is escaped, hrefs are scheme-checked (javascript: dropped), and inline CSS values are validated (no url()/expression()/attribute-breakout). Image blob URLs are tracked and revoked on unmount / reset / error.

Details

  • src/tools/documents/odt.lib.ts — pure unzipOdt + odtToHtml(content, styles, resolveImage); 9 unit tests (headings, spans, alignment, escaping, ordered/unordered lists, table colspan, image resolve, javascript: stripping, unzip)
  • src/islands/documents/OdtViewer.tsx — thin island; blob-URL image resolver + full cleanup
  • Registered odt-viewer (beta); EN + ID SEO + OG
  • 669 tests pass · 0 lint errors · build green (/tools/odt-viewer + /id/...)

🤖 Generated with Claude Code

slaveofcode and others added 2 commits August 3, 2026 06:30
Promote to production: EPUB Reader
Open and read .odt (OpenDocument Text) files entirely client-side —
headings, lists, tables, images, links and inline formatting. Print /
Save as PDF supported. Nothing is uploaded.

License-clean by design: no AGPL WebODF and no heavy engine. A custom
ODF->HTML parser unzips the .odt with fflate (already a dep) and parses
content.xml/styles.xml with the browser's native DOMParser. Output is
safe by construction — fixed tag whitelist, every text node and attribute
escaped, hrefs scheme-checked (javascript: dropped), inline CSS values
validated. Image blob URLs are tracked and revoked on unmount/reset/error.

Pure lib src/tools/documents/odt.lib.ts with 9 unit tests. Bilingual
(EN + ID) UI, SEO and OG.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ubfx4XocHcECaL8twp9zsr
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
goodwebtools c1a8d3d Aug 03 2026, 12:03 AM

@slaveofcode
slaveofcode merged commit ccf20b1 into develop Aug 3, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant