Repository navigation
v0.9.0
Content written for v0.8
v0.9 updates Compono from v0.4.2 to v0.7.1. Most v0.8 content renders as before. Content that now fails is listed in the admin panel on the first start, with the place of each error. The changes below produce no error, but change what a page shows or the HTML it outputs.
Lines that now start a block. Compono has no escape, so these lines can no longer be written as plain text:
-starts a list,>a quote,---a horizontal rule and|a table row. A-line right after a paragraph line ends the paragraph.- - -is a list item, not a rule.- A line starting with
//is a comment and is left out of the page. - A line of four or more backticks opens a code block.
- A lone
#is plain text, not an empty heading.
Emphasis.
- One-character emphasis is recognized:
*a*,*a*.and**a**bwere plain text.***x***is plain text. - Several emphases in one paragraph render correctly. v0.8 dropped the text between them:
*a* and *b*rendered as ab. - Emphasis inside link text is recognized:
[*a*](/x). - Emphasis, inline code and link text no longer span lines. Inline code is recognized before links.
Whitespace.
- A line that holds only spaces, and a blank line with
\r\nline endings, now start a new paragraph instead of a line break. - A tab inside a line is kept. Spaces at the start and the end of a line are removed.
- Parameter values are no longer trimmed:
" x "is placed with its spaces.
Empty elements. A heading, paragraph, list item, emphasis or code block that resolves to nothing is not output.
Calls that now render.
- Strings with a doubled quote,
"a ""b"" c", and argument binding,{{ A content = B(t = "x") }}, were printed as plain text. - An inline call of a component whose body is a single
LINKor inline call, and some calls the old loop detection rejected by mistake, rendered as errors.
HTML output. These affect custom CSS:
- A code block carries its language as
data-langinstead ofclass="language-…". A code block without a language has no attribute (it waslanguage-plaintext). - Inline code no longer has
style="white-space: pre". - An image without variants is wrapped in
<picture>, like every image.
Errors. Errors are no longer shown to visitors. The part of the page an error affects is left out, and the error is listed in the admin panel.
Changelog
🚀 Features
- 25203b1: feat!: remove deprecated WEB_GRID component and its generated CSS (@abdyek)
- 34db91e: feat(i18n): translate robots.txt settings for all locales (@abdyek)
- d7a4173: feat(media): add local storage image upload limit (@abdyek)
- f41e661: feat(media): add local storage upload limit UI (@abdyek)
- 5e73ffe: feat: activate an installed theme (@abdyek)
- cfaaf68: feat: add contract groups, coverage and references (@abdyek)
- 2322d88: feat: add robots.txt with its setting page (@abdyek)
- 9aeadc0: feat: add the Layout field to the page editor and the 404 screen (@abdyek)
- b9f3603: feat: add the contract record (@abdyek)
- 4f6666a: feat: add the layout binding columns of a page (@abdyek)
- 7681556: feat: add the migration of the 404 page to a system page (@abdyek)
- 5e5b4ed: feat: add the text of the UMONO_LAYOUT error of globals (@abdyek)
- ce8bdf6: feat: add the text of the global's page error count (@abdyek)
- 719c169: feat: add the texts of the Layout field (@abdyek)
- 471f088: feat: add the texts of the published errors list (@abdyek)
- bd5c78b: feat: add the texts of the theme in development (@abdyek)
- 3fc0816: feat: add the texts of the theme management page (@abdyek)
- 064f1de: feat: add the texts of the uncovered pages screen (@abdyek)
- e616575: feat: add the theme management page (@abdyek)
- 7a682fd: feat: answer an unchanged page with 304 (@abdyek)
- a62f10d: feat: check a layout binding before it is saved (@abdyek)
- 6ac2a0d: feat: check dev/dev on every request (@abdyek)
- 7380a93: feat: check the layout binding when a page is saved (@abdyek)
- d12e0b5: feat: compute the base, coverage and offered record of contract groups (@abdyek)
- d13caa8: feat: deactivate a theme (@abdyek)
- 81959ff: feat: delete a contract record (@abdyek)
- 09d7b71: feat: fill the published errors list on the first launch (@abdyek)
- 65d39d2: feat: freeze the DOM of the built-ins and markdown elements (@abdyek)
- 83282aa: feat: generate the Theme API range of umono.json from themecore (@abdyek)
- d0c2dfe: feat: keep the 404 system page out of the ordinary page paths (@abdyek)
- b5cd96a: feat: keep the assets of a checked theme in memory (@abdyek)
- 7ead346: feat: link the errors of the 404 page to its settings screen (@abdyek)
- 5dcde7a: feat: list and reject pending installs (@abdyek)
- dd031df: feat: list the errors of the published pages (@abdyek)
- 1aa4acc: feat: list the installed themes (@abdyek)
- 8ecd124: feat: list the pages that keep a theme from being selected (@abdyek)
- ba4132e: feat: list the themes by contract group (@abdyek)
- 465689b: feat: load dev/dev as the active theme of its group in dev mode (@abdyek)
- 400b4e4: feat: load the active themes at startup (@abdyek)
- 3a920b8: feat: load the admin sidebars 50 items at a time (@abdyek)
- cf17b11: feat: move saved globals to the marked parameter line (@abdyek)
- 1816b4a: feat: offer the layouts of the Layout field (@abdyek)
- c53bf68: feat: read and save the 404 page as the not_found system page (@abdyek)
- 0b76f32: feat: read the sidebar lists a page at a time (@abdyek)
- e1999ec: feat: refuse a global that calls UMONO_LAYOUT (@abdyek)
- 4309db5: feat: render the frozen DOM scenarios (@abdyek)
- e849989: feat: render the pages with their group's active theme (@abdyek)
- ce7c24a: feat: require CLI v0.3.0 (@abdyek)
- 8ebd24b: feat: resolve how a page renders with the themes (@abdyek)
- 70ca516: feat: return Compono diagnostics from ContentCompiler (@abdyek)
- 418c9b5: feat: run the checks of theme activation in order (@abdyek)
- ca07e6f: feat: run the package checks of theme activation (@abdyek)
- 536f426: feat: save the binding of the 404 page and preview an unsaved binding (@abdyek)
- cd15b1c: feat: send a Content-Security-Policy with every page (@abdyek)
- fa1b38c: feat: serve sitemap.xml under the site address (@abdyek)
- ef289b2: feat: serve the assets of the active themes (@abdyek)
- 275f90e: feat: serve the fallback theme under /_theme (@abdyek)
- 817a576: feat: set the site address in the general settings (@abdyek)
- b95cd4d: feat: show Compono diagnostics in the editors (@abdyek)
- 2cb0a15: feat: show how many published pages have errors from a global (@abdyek)
- 541db57: feat: show the theme in development on the theme management page (@abdyek)
- 4a77c47: feat: translate the load more button (@abdyek)
- 8ba113e: feat: translate the site address settings (@abdyek)
- 096f2c5: feat: use the new content of a pending install (@abdyek)
- 9e99f7d: feat: verify a contract against the registry (@abdyek)
- 06668ca: feat: wrap pages in the umono-root shell (@abdyek)
- d4271e2: feat: write the canonical DOM form of Compono output (@abdyek)
🐛 Bug Fixes
- cc46c86: fix(security): bump go toolchain to 1.26.4 for security patches (@abdyek)
- a749283: fix: copy request values so a saved global stays intact (@abdyek)
- 29329b5: fix: go.mod file (@abdyek)
- 9a29847: fix: open the global component editor (@abdyek)
- b9a213b: fix: remove the unused check-slug route (@abdyek)
- 2f011dc: fix: replace the editor area instead of nesting it (@abdyek)
- 78486d4: fix: revalidate /static in a local build (@abdyek)
- f7c3312: fix: show body diagnostics of a global with a required parameter (@abdyek)
- f031e91: fix: show the live preview of the editors (@abdyek)
- 41dc700: fix: sign out with 200 instead of 401 (@abdyek)
- 44c4db9: fix: stop the console error of the live preview (@abdyek)
- d6b0e10: fix: update Compono to v0.7.1 (@abdyek)
- 110ec48: fix: write the nonce without characters HTML escapes (@abdyek)
Others
- dd95a4d: Merge branch 'release/v0.8.2' (@abdyek)
- d4c65a6: Merge pull request #100 from abdyek/feat/frozen-dom (@abdyek)
- 92b7ff2: Merge pull request #101 from abdyek/test/builtin-set-drift (@abdyek)
- 31c2074: Merge pull request #102 from abdyek/test/detector-corpus (@abdyek)
- 7cd348e: Merge pull request #103 from abdyek/test/toml-conformance (@abdyek)
- fd3f799: Merge pull request #104 from abdyek/fix/global-required-param-diagnostics (@abdyek)
- 6d5d250: Merge pull request #105 from abdyek/fix/compono-v0.7.1 (@abdyek)
- aeac908: Merge pull request #106 from abdyek/feat/contract-model (@abdyek)
- 478ddbe: Merge pull request #107 from abdyek/feat/page-binding (@abdyek)
- f7c17fb: Merge pull request #108 from abdyek/feat/not-found-system-page (@abdyek)
- 4a50d67: Merge pull request #109 from abdyek/feat/contract-groups (@abdyek)
- 451dbc1: Merge pull request #110 from abdyek/feat/theme-package-checks (@abdyek)
- c035b03: Merge pull request #111 from abdyek/feat/theme-activation (@abdyek)
- ed9b786: Merge pull request #112 from abdyek/feat/theme-deactivation (@abdyek)
- 90ef6bf: Merge pull request #113 from abdyek/feat/pending-installs (@abdyek)
- df553c4: Merge pull request #114 from abdyek/feat/apply-pending-install (@abdyek)
- 5c123ae: Merge pull request #115 from abdyek/feat/load-active-themes (@abdyek)
- e1f3213: Merge pull request #116 from abdyek/feat/delete-contract-record (@abdyek)
- d940da6: Merge pull request #117 from abdyek/feat/theme-asset-serving (@abdyek)
- 8a9ca02: Merge pull request #118 from abdyek/feat/page-render-resolution (@abdyek)
- 48a9901: Merge pull request #119 from abdyek/feat/render-with-themes (@abdyek)
- d99957e: Merge pull request #120 from abdyek/refactor/render-root (@abdyek)
- ce6cbb3: Merge pull request #121 from abdyek/test/frozen-dom-scenarios (@abdyek)
- c42027c: Merge pull request #122 from abdyek/test/official-contract-scenarios (@abdyek)
- 102cfe1: Merge pull request #123 from abdyek/feat/theme-list (@abdyek)
- 0915ee8: Merge pull request #124 from abdyek/feat/binding-validation (@abdyek)
- 8e32739: Merge pull request #125 from abdyek/feat/global-layout-call (@abdyek)
- a2d2f85: Merge pull request #126 from abdyek/feat/binding-interface (@abdyek)
- 9f9e0b8: Merge pull request #127 from abdyek/feat/e2e-tests (@abdyek)
- ae39516: Merge pull request #128 from abdyek/feat/e2e-ci (@abdyek)
- a57614f: Merge pull request #129 from abdyek/feat/e2e-regression (@abdyek)
- 8ed2879: Merge pull request #130 from abdyek/refactor/build-app (@abdyek)
- 8bbd8d2: Merge pull request #131 from abdyek/fix/immutable-request-values (@abdyek)
- 4158245: Merge pull request #132 from abdyek/fix/component-editor (@abdyek)
- d54f4ae: Merge pull request #133 from abdyek/fix/live-preview (@abdyek)
- ebd11b1: Merge pull request #134 from abdyek/fix/preview-indicator (@abdyek)
- a1c0e20: Merge pull request #135 from abdyek/fix/static-cache-in-dev (@abdyek)
- afb0f67: Merge pull request #136 from abdyek/fix/remove-check-slug (@abdyek)
- 8f3ab18: Merge pull request #137 from abdyek/fix/logout-status (@abdyek)
- 91e5c56: Merge pull request #138 from abdyek/feat/uncovered-pages-list (@abdyek)
- 818a029: Merge pull request #139 from abdyek/fix/editor-area-swap (@abdyek)
- 0e6241e: Merge pull request #140 from abdyek/build/themecore-v0.2.0 (@abdyek)
- 5e68fa6: Merge pull request #141 from abdyek/feat/theme-dev-mode (@abdyek)
- 17cf4ac: Merge pull request #142 from abdyek/feat/theme-dev-per-request (@abdyek)
- 7ec70bb: Merge pull request #143 from abdyek/feat/theme-dev-admin (@abdyek)
- 9166b59: Merge pull request #144 from abdyek/feat/min-cli-v0.3.0 (@abdyek)
- 14ac49a: Merge pull request #66 from abdyek/chore/update-compono-v0.5.0 (@abdyek)
- b7b5d71: Merge pull request #67 from abdyek/feat/local-storage-upload-limit (@abdyek)
- 22e6c69: Merge pull request #68 from abdyek/chore/update-go-main (@abdyek)
- e637630: Merge pull request #69 from abdyek/feat/remove-web-grid (@abdyek)
- 17b694f: Merge pull request #72 from abdyek/fix/bump-go-1.26.5 (@abdyek)
- 95624ef: Merge pull request #74 from abdyek/fix/go-mod-file (@abdyek)
- 7e2a675: Merge pull request #75 from abdyek/feat/robots.txt (@abdyek)
- 0a4965c: Merge pull request #77 from abdyek/release/v0.8.5 (@abdyek)
- 87f3eef: Merge pull request #79 from abdyek/fix/bump-go-1.26.6 (@abdyek)
- 7b12890: Merge pull request #80 from umono-cms/release/v0.8.7 (@abdyek)
- dfc8424: Merge pull request #81 from abdyek/ci/test-workflow (@abdyek)
- a9b0292: Merge pull request #82 from abdyek/refactor/compono-v0.7 (@abdyek)
- 4ec5075: Merge pull request #83 from abdyek/feat/global-param-line-migration (@abdyek)
- 9ac6902: Merge pull request #84 from abdyek/refactor/lock-free-renders (@abdyek)
- 317fecc: Merge pull request #85 from abdyek/feat/compiler-diagnostics (@abdyek)
- 81a6d87: Merge pull request #86 from abdyek/feat/sidebar-pagination (@abdyek)
- 855effc: Merge pull request #87 from abdyek/feat/sitemap (@abdyek)
- 7eacd48: Merge pull request #88 from abdyek/refactor/drop-v0.8-leftovers (@abdyek)
- 87cf9c0: Merge pull request #89 from abdyek/feat/shell (@abdyek)
- 7a65071: Merge pull request #90 from abdyek/feat/editor-diagnostics (@abdyek)
- e0d8b3b: Merge pull request #91 from abdyek/feat/published-diagnostics (@abdyek)
- 4bd6571: Merge pull request #92 from abdyek/feat/fill-diagnostics-on-first-launch (@abdyek)
- e7a8442: Merge pull request #93 from abdyek/test/public-render-diagnostics (@abdyek)
- 92c03f3: Merge pull request #94 from abdyek/feat/global-page-error-count (@abdyek)
- b404af4: Merge pull request #95 from abdyek/feat/fallback-theme (@abdyek)
- 9adfd6e: Merge pull request #96 from abdyek/feat/page-csp (@abdyek)
- 77e8f67: Merge pull request #97 from abdyek/feat/page-etag (@abdyek)
- 711865e: Merge pull request #98 from abdyek/feat/umono-json-theme-api (@abdyek)
- 4fe1194: Merge pull request #99 from abdyek/feat/canonical-dom (@abdyek)
- 86feeed: build: require themecore v0.2.0 (@abdyek)
- 2c8b8f7: chore: update compono v0.5.0 (@abdyek)
- b56284f: ci: run tests on pull requests and before releases (@abdyek)
- dbece09: ci: run the end-to-end tests in a separate job (@abdyek)
- 2e6cea1: docs: describe the theme development mode (@abdyek)
- 0e7d498: docs: explain how to run the end-to-end tests (@abdyek)
- 0b236cb: docs: explain the traces and screenshots of failing end-to-end tests (@abdyek)
- d7886fc: refactor: build the app in newApp (@abdyek)
- 29067dd: refactor: drop OptimizeHTML (@abdyek)
- 850ed10: refactor: drop the v0.8 scripts and page.html inline styling (@abdyek)
- 45c5daf: refactor: move to compono v0.7.0 (@abdyek)
- 6a91063: refactor: render in Go (@abdyek)
- aea52a7: refactor: render without waiting on other renders (@abdyek)
- b80b8c8: test: add the end-to-end test infrastructure with Playwright (@abdyek)
- fb3e598: test: answer an unchanged page with 304 (@abdyek)
- 89b8985: test: compile while globals change (@abdyek)
- 4141879: test: count the published pages with errors from a global (@abdyek)
- 7167579: test: describe diagnostics returned by ContentCompiler (@abdyek)
- 0d6fc91: test: describe global components given per conversion (@abdyek)
- bb64dce: test: describe paged lists of pages, globals and media (@abdyek)
- 722667a: test: describe the canonical DOM form (@abdyek)
- 1cc7934: test: describe the diagnostics an editor shows (@abdyek)
- 037ff3a: test: describe the global parameter line migration (@abdyek)
- e1ce022: test: describe the shell files under /_umono/ (@abdyek)
- c1a7abb: test: describe the site address and sitemap.xml (@abdyek)
- 8b4a880: test: describe the stored diagnostics of the published pages (@abdyek)
- f2d0a22: test: expect Compono's output unchanged (@abdyek)
- dacfa86: test: expect a single editor area after an editor swap (@abdyek)
- f1f106c: test: expect dev/dev to be checked on every request (@abdyek)
- 7d80948: test: expect the dev mode of dev/dev (@abdyek)
- cf3811e: test: expect the theme in development to keep only its own contract record (@abdyek)
- 4cf13fc: test: expect the theme management page to show the theme in development (@abdyek)
- 0cd5095: test: fail on the console error of the live preview (@abdyek)
- 7a090ed: test: fill the published errors list once on the first launch (@abdyek)
- ebbaeb0: test: freeze the DOM of the built-ins and markdown elements (@abdyek)
- 8fdbbc1: test: freeze the address forms and the render without attributes.toml (@abdyek)
- 4dd35cc: test: freeze the matching and injection scenarios (@abdyek)
- 886affc: test: freeze the official contracts umono/page@v0.1 and umono/blog@v0.1 (@abdyek)
- 25d1c50: test: keep diagnostics out of the public render and the list (@abdyek)
- 23291c7: test: keep the Theme API range of umono.json in step with themecore (@abdyek)
- 2c29a49: test: keep themecore's built-in set within Compono (@abdyek)
- f4277fb: test: list the pages bound to a newer minor than a theme (@abdyek)
- 5d62282: test: open, edit and delete a global in its editor (@abdyek)
- 283435d: test: pin body diagnostics of a global with a required parameter (@abdyek)
- f593fc7: test: pin contract groups, coverage and references (@abdyek)
- c50de24: test: pin how a page renders with the themes (@abdyek)
- 86a2429: test: pin how the list of published errors shows the 404 page (@abdyek)
- 8b175ab: test: pin loading the active themes at startup (@abdyek)
- a05a436: test: pin reading a frozen DOM scenario (@abdyek)
- f275762: test: pin serving the assets of the active themes (@abdyek)
- 40a4ce6: test: pin that a global cannot call UMONO_LAYOUT (@abdyek)
- be6ee19: test: pin that activation writes the record and active_themes together (@abdyek)
- 2c4f6ae: test: pin that pages, the 404 page and diagnostics render with the themes (@abdyek)
- 84b23c7: test: pin that saving a page checks its layout binding (@abdyek)
- 4743821: test: pin that the 404 page is read from and saved to the system page (@abdyek)
- b15574a: test: pin that the 404 system page is not an ordinary page (@abdyek)
- fc1753e: test: pin the Layout field of the page editor and the 404 screen (@abdyek)
- 28deb2c: test: pin the admin flows that work today (@abdyek)
- d47c685: test: pin the base, selectability and offered record of a group (@abdyek)
- fdf1f0b: test: pin the binding of the 404 page and the bound preview (@abdyek)
- 0afefe8: test: pin the contract request to the registry (@abdyek)
- bc613e1: test: pin the deletion of a contract record (@abdyek)
- c039289: test: pin the identity of a contract record (@abdyek)
- f0190fd: test: pin the layout binding columns of a page (@abdyek)
- d5446b8: test: pin the listing and rejection of pending installs (@abdyek)
- b9d553e: test: pin the move of the 404 page to a system page (@abdyek)
- 718fcc6: test: pin the options of the Layout field (@abdyek)
- 0719ed2: test: pin the order and the contract check of theme activation (@abdyek)
- fd8e575: test: pin the package checks of theme activation (@abdyek)
- 9681ec0: test: pin the production render of (@abdyek)
- 540df3c: test: pin the save checks of a layout binding (@abdyek)
- bf60bb8: test: pin the theme list of the management page (@abdyek)
- 45eac71: test: pin the theme management page and its activation (@abdyek)
- ff29901: test: pin theme deactivation (@abdyek)
- ae5dc0a: test: pin using the new content of a pending install (@abdyek)
- e2d1e6e: test: put the second layout call of the root test in the root (@abdyek)
- d31fc70: test: render a global saved in the admin UI (@abdyek)
- 04bc194: test: render check-slug without a hand-picked query (@abdyek)
- d2c5692: test: render every admin route (@abdyek)
- a1b8cda: test: revalidate /static in a local build (@abdyek)
- 4986a0b: test: run themecore's TOML conformance check in Umono (@abdyek)
- 48acc5e: test: run themecore's detector corpus with Umono's Compono (@abdyek)
- 7df4fa6: test: save a trace and a screenshot of failing end-to-end tests (@abdyek)
- 06b65af: test: send a Content-Security-Policy with every page (@abdyek)
- d3fc9ed: test: serve the fallback theme under /_theme (@abdyek)
- 8c10632: test: show the live preview without a reload (@abdyek)
- 67fd789: test: sign out with 200 from htmx (@abdyek)
- b2ab5ca: test: test a theme API below the minimum only when it can be written (@abdyek)
- e018b76: test: write theme.css in the dev theme fixture of the service tests (@abdyek)