@janga/norna 0.7.17 → 0.7.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -6
- package/bin/norna-cli.mjs +1 -1
- package/docs/README.md +11 -9
- package/docs/configuration.md +25 -2
- package/docs/content.md +21 -12
- package/docs/design/navigation-and-theme-plan.md +90 -19
- package/docs/design/site-examples-structure.md +7 -3
- package/docs/engine-development.md +19 -22
- package/docs/getting-started.md +3 -3
- package/docs/images-and-metadata.md +6 -4
- package/docs/pages.md +120 -64
- package/docs/public-files.md +1 -1
- package/docs/site-files.md +36 -29
- package/docs/sitewide-content.md +1 -1
- package/docs/theme.md +107 -141
- package/docs/typography.md +15 -27
- package/examples/README.md +8 -2
- package/examples/complete-sites/dog-shelter-multi-page/site/.norna/generated-images.json +5 -5
- package/examples/complete-sites/dog-shelter-single-page/site/.norna/generated-images.json +10 -10
- package/examples/feature-demos/media-and-surfaces/.astro/collections/theme.schema.json +35 -43
- package/examples/feature-demos/media-and-surfaces/.astro/data-store.json +1 -1
- package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/content.md +2 -1
- package/examples/feature-demos/media-and-surfaces/site/pages/020-surfaces/theme.yaml +2 -3
- package/examples/feature-demos/theme-preset-documentation/README.md +16 -0
- package/examples/feature-demos/theme-preset-documentation/site/.norna/generated-images.json +74 -0
- package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site/pages/000-home}/content.md +1 -1
- package/examples/feature-demos/theme-preset-portfolio/README.md +16 -0
- package/examples/feature-demos/theme-preset-portfolio/site/.norna/generated-images.json +74 -0
- package/examples/feature-demos/theme-preset-portfolio/site/config.yaml +1 -0
- package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site/pages/000-home}/content.md +1 -1
- package/examples/feature-demos/theme-preset-portfolio/site/public/robots.txt +2 -0
- package/examples/feature-demos/theme-preset-portfolio/site/sitewide-content.yaml +3 -0
- package/examples/feature-demos/theme-preset-project/README.md +16 -0
- package/examples/feature-demos/theme-preset-project/site/.norna/generated-images.json +74 -0
- package/examples/feature-demos/theme-preset-project/site/config.yaml +1 -0
- package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site/pages/000-home}/content.md +1 -1
- package/examples/feature-demos/theme-preset-project/site/public/robots.txt +2 -0
- package/examples/feature-demos/theme-preset-project/site/sitewide-content.yaml +3 -0
- package/examples/feature-demos/theme-preset-statement/README.md +16 -0
- package/examples/feature-demos/theme-preset-statement/site/.norna/generated-images.json +74 -0
- package/examples/feature-demos/theme-preset-statement/site/config.yaml +1 -0
- package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site/pages/000-home}/content.md +1 -1
- package/examples/feature-demos/theme-preset-statement/site/public/robots.txt +2 -0
- package/examples/feature-demos/theme-preset-statement/site/sitewide-content.yaml +3 -0
- package/fixtures/basic/site/theme.yaml +1 -8
- package/fixtures/nested-pages/.astro/collections/site.schema.json +35 -0
- package/fixtures/nested-pages/.astro/collections/sitewide.schema.json +97 -0
- package/fixtures/nested-pages/.astro/collections/theme.schema.json +844 -0
- package/fixtures/nested-pages/.astro/content-assets.mjs +4 -0
- package/fixtures/nested-pages/.astro/content-modules.mjs +1 -0
- package/fixtures/nested-pages/.astro/content.d.ts +183 -0
- package/fixtures/nested-pages/.astro/data-store.json +1 -0
- package/fixtures/nested-pages/.astro/dev-local.json +8 -0
- package/fixtures/nested-pages/.astro/dev.log +1128 -0
- package/fixtures/nested-pages/.astro/settings.json +5 -0
- package/fixtures/nested-pages/.astro/types.d.ts +2 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/_metadata.json +74 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/package.json +3 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
- package/fixtures/nested-pages/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
- package/fixtures/nested-pages/site/config.yaml +2 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/pages/010-macos/content.md +4 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/010-installation/theme.yaml +2 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/030-release-notes/content.md +9 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/040-configuration/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/050-content/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/060-themes/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/070-images/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/080-cards/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/090-notes/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/100-validation/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/110-synchronization/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/120-building/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/130-publishing/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/140-troubleshooting/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/150-migration/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/160-accessibility/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/170-performance/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/180-security/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/190-localization/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/200-upgrading/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/pages/210-faq/content.md +3 -0
- package/fixtures/nested-pages/site/pages/010-guides/theme.yaml +7 -3
- package/fixtures/nested-pages/site/theme.yaml +1 -3
- package/package.json +2 -1
- package/schemas/config.schema.json +45 -4
- package/schemas/content-frontmatter.schema.json +5 -5
- package/schemas/manifest.json +3 -2
- package/schemas/page-theme.schema.json +192 -0
- package/schemas/sitewide-content.schema.json +17 -17
- package/schemas/theme.schema.json +188 -216
- package/scripts/check-config.mjs +2 -1
- package/scripts/deploy-site.mjs +1 -1
- package/scripts/generate-images.mjs +7 -14
- package/scripts/generate-schemas.mjs +4 -1
- package/scripts/lib/editor-language-service.mjs +0 -14
- package/scripts/lib/example-sites.mjs +15 -3
- package/scripts/lib/page-model.mjs +26 -7
- package/scripts/lib/presentation.mjs +25 -17
- package/scripts/lib/project-config.mjs +26 -16
- package/scripts/lib/schema-definitions.mjs +42 -14
- package/scripts/lib/schema-editor-metadata.mjs +70 -26
- package/scripts/lib/schema-value-definitions.mjs +14 -0
- package/scripts/lib/site-content.mjs +50 -25
- package/scripts/lib/site-conventions.mjs +1 -0
- package/scripts/lib/site-paths.mjs +9 -3
- package/scripts/lib/theme-config.mjs +3 -2
- package/scripts/lib/theme-presets.mjs +54 -21
- package/scripts/show-typography.mjs +1 -33
- package/scripts/sync-content-sections.mjs +1 -3
- package/scripts/test-banner-visibility.mjs +2 -2
- package/scripts/test-client-javascript.mjs +11 -4
- package/scripts/test-content-check.mjs +25 -25
- package/scripts/test-content-model-v2.mjs +165 -101
- package/scripts/test-documentation.mjs +4 -2
- package/scripts/test-editor-language-service.mjs +11 -8
- package/scripts/test-engine-commands.mjs +5 -5
- package/scripts/test-examples.mjs +30 -1
- package/scripts/test-heading-ids.mjs +2 -2
- package/scripts/test-navigation.mjs +11 -2
- package/scripts/test-nested-pages.mjs +25 -10
- package/scripts/test-package-check.mjs +29 -60
- package/scripts/test-page-model.mjs +30 -2
- package/scripts/test-project-config.mjs +5 -10
- package/scripts/test-schemas.mjs +18 -3
- package/scripts/test-theme-presets.mjs +33 -27
- package/src/components/NavigationPageTree.astro +114 -25
- package/src/components/PageContentsLinks.astro +40 -0
- package/src/components/SectionNavigationScript.astro +12 -5
- package/src/components/SiteBreadcrumbs.astro +17 -14
- package/src/components/SiteNavigation.astro +45 -12
- package/src/components/SitePage.astro +37 -23
- package/src/components/SiteSection.astro +2 -7
- package/src/components/SiteTreeNavigation.astro +35 -0
- package/src/components/TreeNavigationScript.astro +83 -0
- package/src/content.config.ts +2 -8
- package/src/layouts/BaseLayout.astro +10 -0
- package/src/lib/pageThemes.ts +11 -9
- package/src/lib/sectionContent.ts +1 -5
- package/src/lib/siteNavigation.ts +2 -1
- package/src/lib/sitePages.ts +25 -14
- package/src/pages/index.astro +2 -1
- package/src/styles/global.css +411 -43
- package/starters/basic/README.md +7 -7
- package/starters/basic/site/theme.yaml +1 -105
- package/starters/project/README.md +8 -8
- package/starters/project/site/theme.yaml +1 -31
- package/examples/feature-demos/theme-presets/README.md +0 -18
- package/examples/feature-demos/theme-presets/site/.norna/generated-images.json +0 -290
- package/examples/feature-demos/theme-presets/site/content.md +0 -14
- package/examples/feature-demos/theme-presets/site/theme.yaml +0 -1
- /package/examples/complete-sites/dog-shelter-multi-page/site/{content.md → pages/000-home/content.md} +0 -0
- /package/examples/complete-sites/dog-shelter-multi-page/site/{images → pages/000-home/images}/shelter-dog.jpg +0 -0
- /package/examples/complete-sites/dog-shelter-single-page/site/{content.md → pages/000-home/content.md} +0 -0
- /package/examples/complete-sites/dog-shelter-single-page/site/{images → pages/000-home/images}/foster-dog.jpg +0 -0
- /package/examples/complete-sites/dog-shelter-single-page/site/{images → pages/000-home/images}/rescue-dog.jpg +0 -0
- /package/examples/feature-demos/media-and-surfaces/site/{content.md → pages/000-home/content.md} +0 -0
- /package/examples/feature-demos/sitewide-content/site/{content.md → pages/000-home/content.md} +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/config.yaml +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site/pages/000-home}/images/black-schnauzer.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site/pages/000-home}/images/retriever-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site/pages/000-home}/images/schnauzer-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/public/robots.txt +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-documentation}/site/sitewide-content.yaml +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/020-documentation → theme-preset-documentation/site}/theme.yaml +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site/pages/000-home}/images/puppy-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site/pages/000-home}/images/shepherd-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site/pages/000-home}/images/white-puppy.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/010-portfolio → theme-preset-portfolio/site}/theme.yaml +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/routeTheme.schema.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/site.schema.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/sitewide.schema.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/collections/theme.schema.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content-assets.mjs +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content-modules.mjs +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/content.d.ts +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/data-store.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev-local.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/dev.log +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/settings.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/.astro/types.d.ts +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/_metadata.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro-D_GIpJIE.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro-D_GIpJIE.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_aria-query.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_aria-query.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_axobject-query.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_axobject-query.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_html-escaper.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_n_html-escaper.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/audit-DM9Hkl5B.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/embla-carousel.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/embla-carousel.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/highlight-DnZ1ULOL.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/icons-RyebKi45.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/icons-RyebKi45.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/package.json +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/settings-DaU-gNnK.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/settings-DaU-gNnK.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/toolbar-63PA619H.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/toolbar-63PA619H.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/ui-library--bkcNSYz.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/window-jPkpKVcy.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/window-jPkpKVcy.js.map +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/xray-BXCHpEJP.js +0 -0
- /package/examples/feature-demos/{theme-presets → theme-preset-project}/node_modules/.vite/deps/xray-BXCHpEJP.js.map +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site/pages/000-home}/images/boxer-portrait.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site/pages/000-home}/images/grass-puppy.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site/pages/000-home}/images/grey-street-dog.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/030-project → theme-preset-project/site}/theme.yaml +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site/pages/000-home}/images/black-pedigree.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site/pages/000-home}/images/sheepdog-grass.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site/pages/000-home}/images/sheepdog-wide.jpg +0 -0
- /package/examples/feature-demos/{theme-presets/site/pages/040-statement → theme-preset-statement/site}/theme.yaml +0 -0
- /package/fixtures/basic/site/{content.md → pages/000-home/content.md} +0 -0
- /package/fixtures/basic/site/{images → pages/000-home/images}/.gitkeep +0 -0
- /package/fixtures/content-model-v2/site/{content.md → pages/000-home/content.md} +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/adopt.svg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/detail.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/duplicate.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/foster.svg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/hero.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/image.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/slide-one.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/slide-three.jpg +0 -0
- /package/fixtures/content-model-v2/site/{images → pages/000-home/images}/slide-two.jpg +0 -0
- /package/fixtures/nested-pages/site/{content.md → pages/000-home/content.md} +0 -0
- /package/starters/basic/site/{content.md → pages/000-home/content.md} +0 -0
- /package/starters/basic/site/{images → pages/000-home/images}/.gitkeep +0 -0
- /package/starters/project/site/{content.md → pages/000-home/content.md} +0 -0
|
@@ -10,6 +10,7 @@ const tempParent = path.join(repoRoot, 'node_modules', '.cache');
|
|
|
10
10
|
await mkdir(tempParent, { recursive: true });
|
|
11
11
|
const tempRoot = await mkdtemp(path.join(tempParent, 'norna-client-javascript-'));
|
|
12
12
|
const siteDir = path.join(tempRoot, 'site');
|
|
13
|
+
const homeDir = path.join(siteDir, 'pages', '000-home');
|
|
13
14
|
const pageDir = path.join(siteDir, 'pages', '010-details');
|
|
14
15
|
const configPath = path.join(siteDir, 'config.yaml');
|
|
15
16
|
|
|
@@ -54,13 +55,14 @@ const writeSvg = (filePath, color) => writeFile(filePath, [
|
|
|
54
55
|
].join('\n'));
|
|
55
56
|
|
|
56
57
|
try {
|
|
58
|
+
await mkdir(homeDir, { recursive: true });
|
|
57
59
|
await mkdir(path.join(siteDir, 'public'), { recursive: true });
|
|
58
60
|
await writeConfig();
|
|
59
61
|
await writeFile(path.join(siteDir, 'theme.yaml'), `typography:
|
|
60
62
|
profile: reading
|
|
61
63
|
palette: paper
|
|
62
64
|
`);
|
|
63
|
-
await writeFile(path.join(
|
|
65
|
+
await writeFile(path.join(homeDir, 'content.md'), `---
|
|
64
66
|
page:
|
|
65
67
|
description: A single page with sticky section navigation.
|
|
66
68
|
---
|
|
@@ -86,6 +88,11 @@ The navigation enhancement keeps native anchors clear of the sticky header.
|
|
|
86
88
|
assert.match(getScripts(instantHtml)[0], /site-top-anchor-offset/);
|
|
87
89
|
assertScrollBehavior(instantHtml, 'auto', 'The default instant scroll mode');
|
|
88
90
|
assert.match(instantHtml, /<nav class="page-nav"/);
|
|
91
|
+
assert.match(instantHtml, /<nav class="page-nav" aria-label="Page contents">/);
|
|
92
|
+
assert.doesNotMatch(instantHtml, /class="page-nav-label"/);
|
|
93
|
+
assert.doesNotMatch(instantHtml, /<h2 tabindex="-1">Page contents<\/h2>/);
|
|
94
|
+
assert.match(instantHtml, /class="page-nav-page-top" data-page-top href="\/">Section navigation<\/a>/);
|
|
95
|
+
assert.match(instantHtml, /class="mobile-nav-destination mobile-nav-page-top" data-page-top href="\/">/);
|
|
89
96
|
assert.match(instantHtml, /href="#intro"/);
|
|
90
97
|
assert.match(instantHtml, /href="#more"/);
|
|
91
98
|
|
|
@@ -104,7 +111,7 @@ The navigation enhancement keeps native anchors clear of the sticky header.
|
|
|
104
111
|
await mkdir(path.join(pageDir, 'images'), { recursive: true });
|
|
105
112
|
await writeSvg(path.join(pageDir, 'images', 'first.svg'), '#7b8f78');
|
|
106
113
|
await writeSvg(path.join(pageDir, 'images', 'second.svg'), '#a7664b');
|
|
107
|
-
await writeFile(path.join(
|
|
114
|
+
await writeFile(path.join(homeDir, 'content.md'), `---
|
|
108
115
|
page:
|
|
109
116
|
description: A page without interactive features.
|
|
110
117
|
---
|
|
@@ -143,7 +150,7 @@ Static image stacks remain static.
|
|
|
143
150
|
'A page with managed image stacks and cards',
|
|
144
151
|
);
|
|
145
152
|
|
|
146
|
-
await writeFile(path.join(
|
|
153
|
+
await writeFile(path.join(homeDir, 'content.md'), `---
|
|
147
154
|
page:
|
|
148
155
|
description: A page with an enhanced sidenote.
|
|
149
156
|
---
|
|
@@ -182,7 +189,7 @@ page:
|
|
|
182
189
|
assert.match(carouselHtml, /data-carousel/);
|
|
183
190
|
assert.match(getScripts(carouselHtml)[0], /\ssrc=/, 'Carousel JavaScript should be emitted as a module asset.');
|
|
184
191
|
|
|
185
|
-
await writeFile(path.join(
|
|
192
|
+
await writeFile(path.join(homeDir, 'content.md'), `---
|
|
186
193
|
page:
|
|
187
194
|
description: A page with a dismissible banner.
|
|
188
195
|
---
|
|
@@ -51,7 +51,7 @@ const withTempProject = async ({ site, theme = defaultTheme, files, siteDirector
|
|
|
51
51
|
const root = await mkdtemp(path.join(tmpdir(), 'walde-content-check-'));
|
|
52
52
|
|
|
53
53
|
try {
|
|
54
|
-
await writeFixtureFile(root, `${siteDirectory}/content.md`, site);
|
|
54
|
+
await writeFixtureFile(root, `${siteDirectory}/pages/000-home/content.md`, site);
|
|
55
55
|
await writeFixtureFile(root, `${siteDirectory}/theme.yaml`, theme);
|
|
56
56
|
|
|
57
57
|
for (const file of files) {
|
|
@@ -112,11 +112,11 @@ test('content:check groups section issues, global issues, and unreferenced image
|
|
|
112
112
|
await withTempProject({
|
|
113
113
|
site: brokenSite,
|
|
114
114
|
files: [
|
|
115
|
-
'site/images/karin.jpg',
|
|
116
|
-
'site/images/karin-walde/unreferenced.jpg',
|
|
117
|
-
'site/images/min-konst/duplicate.jpg',
|
|
118
|
-
'site/images/home.jpg',
|
|
119
|
-
'site/images/mitt-hem/vav.jpeg',
|
|
115
|
+
'site/pages/000-home/images/karin.jpg',
|
|
116
|
+
'site/pages/000-home/images/karin-walde/unreferenced.jpg',
|
|
117
|
+
'site/pages/000-home/images/min-konst/duplicate.jpg',
|
|
118
|
+
'site/pages/000-home/images/home.jpg',
|
|
119
|
+
'site/pages/000-home/images/mitt-hem/vav.jpeg',
|
|
120
120
|
],
|
|
121
121
|
}, async (root) => {
|
|
122
122
|
const result = runContentScript(root, ['--check']);
|
|
@@ -124,11 +124,11 @@ test('content:check groups section issues, global issues, and unreferenced image
|
|
|
124
124
|
|
|
125
125
|
assert.equal(result.status, 1, output);
|
|
126
126
|
assert.match(output, /^Content check failed\./m);
|
|
127
|
-
assert.match(output, /Content Issues\n\n\[site\/content\.md \[min-konst\]\]\n Errors:/);
|
|
128
|
-
assert.match(output, /Image "vav\.jpeg" is used here but is located in site\/images\/mitt-hem\/vav\.jpeg\./);
|
|
129
|
-
assert.match(output, /Image "missing\.jpeg" does not exist at site\/images\/missing\.jpeg or anywhere under any page image root\./);
|
|
127
|
+
assert.match(output, /Content Issues\n\n\[site\/pages\/000-home\/content\.md \[min-konst\]\]\n Errors:/);
|
|
128
|
+
assert.match(output, /Image "vav\.jpeg" is used here but is located in site\/pages\/000-home\/images\/mitt-hem\/vav\.jpeg\./);
|
|
129
|
+
assert.match(output, /Image "missing\.jpeg" does not exist at site\/pages\/000-home\/images\/missing\.jpeg or anywhere under any page image root\./);
|
|
130
130
|
assert.match(output, /Unreferenced Images\nThese files are kept under page image roots but are not referenced by Norna-managed image references:/);
|
|
131
|
-
assert.match(output, /site\/images\/karin-walde\/unreferenced\.jpg/);
|
|
131
|
+
assert.match(output, /site\/pages\/000-home\/images\/karin-walde\/unreferenced\.jpg/);
|
|
132
132
|
});
|
|
133
133
|
});
|
|
134
134
|
|
|
@@ -150,11 +150,11 @@ test('content:check warns when carousel images use different aspect ratios', asy
|
|
|
150
150
|
site: carouselAspectRatioSite,
|
|
151
151
|
files: [
|
|
152
152
|
{
|
|
153
|
-
path: 'site/images/wide.png',
|
|
153
|
+
path: 'site/pages/000-home/images/wide.png',
|
|
154
154
|
contents: makePngHeader({ width: 400, height: 300 }),
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
|
-
path: 'site/images/wider.png',
|
|
157
|
+
path: 'site/pages/000-home/images/wider.png',
|
|
158
158
|
contents: makePngHeader({ width: 600, height: 300 }),
|
|
159
159
|
},
|
|
160
160
|
],
|
|
@@ -185,8 +185,8 @@ test('content:check fails when Markdown uses removed inline color styles', async
|
|
|
185
185
|
|
|
186
186
|
assert.equal(result.status, 1, output);
|
|
187
187
|
assert.match(output, /^Content check failed\./m);
|
|
188
|
-
assert.match(output, /Inline color style "\.highlight" is no longer supported in site\/content\.md\./);
|
|
189
|
-
assert.match(output, /Inline color style "\.missing" is no longer supported in site\/content\.md\./);
|
|
188
|
+
assert.match(output, /Inline color style "\.highlight" is no longer supported in site\/pages\/000-home\/content\.md\./);
|
|
189
|
+
assert.match(output, /Inline color style "\.missing" is no longer supported in site\/pages\/000-home\/content\.md\./);
|
|
190
190
|
});
|
|
191
191
|
});
|
|
192
192
|
|
|
@@ -449,7 +449,7 @@ Text.
|
|
|
449
449
|
test('content:check explains likely misindented frontmatter keys', async () => {
|
|
450
450
|
await withTempProject({
|
|
451
451
|
site: topLevelImagesSite,
|
|
452
|
-
files: ['site/images/intro/intro.jpg'],
|
|
452
|
+
files: ['site/pages/000-home/images/intro/intro.jpg'],
|
|
453
453
|
}, async (root) => {
|
|
454
454
|
const result = runContentScript(root, ['--check']);
|
|
455
455
|
const output = getOutput(result);
|
|
@@ -466,8 +466,8 @@ test('content:check respects NORNA_SITE_DIR', async () => {
|
|
|
466
466
|
site: movableSite,
|
|
467
467
|
siteDirectory: 'custom-site',
|
|
468
468
|
files: [
|
|
469
|
-
'custom-site/images/move-me.jpg',
|
|
470
|
-
'custom-site/images/home.jpg',
|
|
469
|
+
'custom-site/pages/000-home/images/move-me.jpg',
|
|
470
|
+
'custom-site/pages/000-home/images/home.jpg',
|
|
471
471
|
],
|
|
472
472
|
}, async (root) => {
|
|
473
473
|
const result = runContentScript(root, ['--check'], { NORNA_SITE_DIR: 'custom-site' });
|
|
@@ -506,26 +506,26 @@ test('content:sync moves referenced images and keeps unreferenced images in plac
|
|
|
506
506
|
await withTempProject({
|
|
507
507
|
site: movableSite,
|
|
508
508
|
files: [
|
|
509
|
-
'site/images/home.jpg',
|
|
510
|
-
'site/images/mitt-hem/move-me.jpg',
|
|
511
|
-
'site/images/mitt-hem/unreferenced.jpg',
|
|
509
|
+
'site/pages/000-home/images/home.jpg',
|
|
510
|
+
'site/pages/000-home/images/mitt-hem/move-me.jpg',
|
|
511
|
+
'site/pages/000-home/images/mitt-hem/unreferenced.jpg',
|
|
512
512
|
],
|
|
513
513
|
}, async (root) => {
|
|
514
514
|
const syncResult = runContentScript(root, ['--write', '--yes']);
|
|
515
515
|
const syncOutput = getOutput(syncResult);
|
|
516
516
|
|
|
517
517
|
assert.equal(syncResult.status, 0, syncOutput);
|
|
518
|
-
assert.match(syncOutput, /Moved image "move-me\.jpg" to site\/images\/\./);
|
|
519
|
-
assert.equal(await fileExists(path.join(root, 'site/images/move-me.jpg')), true);
|
|
520
|
-
assert.equal(await fileExists(path.join(root, 'site/images/mitt-hem/move-me.jpg')), false);
|
|
521
|
-
assert.equal(await fileExists(path.join(root, 'site/images/mitt-hem/unreferenced.jpg')), true);
|
|
518
|
+
assert.match(syncOutput, /Moved image "move-me\.jpg" to site\/pages\/000-home\/images\/\./);
|
|
519
|
+
assert.equal(await fileExists(path.join(root, 'site/pages/000-home/images/move-me.jpg')), true);
|
|
520
|
+
assert.equal(await fileExists(path.join(root, 'site/pages/000-home/images/mitt-hem/move-me.jpg')), false);
|
|
521
|
+
assert.equal(await fileExists(path.join(root, 'site/pages/000-home/images/mitt-hem/unreferenced.jpg')), true);
|
|
522
522
|
|
|
523
523
|
const checkResult = runContentScript(root, ['--check']);
|
|
524
524
|
const checkOutput = getOutput(checkResult);
|
|
525
525
|
|
|
526
526
|
assert.equal(checkResult.status, 0, checkOutput);
|
|
527
527
|
assert.match(checkOutput, /Content check completed with warnings\./);
|
|
528
|
-
assert.match(checkOutput, /site\/images\/mitt-hem\/unreferenced\.jpg/);
|
|
528
|
+
assert.match(checkOutput, /site\/pages\/000-home\/images\/mitt-hem\/unreferenced\.jpg/);
|
|
529
529
|
});
|
|
530
530
|
});
|
|
531
531
|
|