edgepress 2026.10.1 → 2026.10.13
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/LICENSE +21 -0
- package/README.md +216 -16
- package/config.yml +99 -127
- package/content/assets/edgepress/brand/avatar.png +0 -0
- package/content/assets/edgepress/brand/deploy-esa.svg +1 -0
- package/content/assets/edgepress/brand/home-hero-768.webp +0 -0
- package/content/assets/edgepress/brand/home-hero.png +0 -0
- package/content/assets/edgepress/brand/home-hero.webp +0 -0
- package/content/assets/edgepress/brand/mascot.png +0 -0
- package/content/assets/edgepress/brand/mascot.webp +0 -0
- package/content/assets/edgepress/brand/og-image.png +0 -0
- package/content/assets/edgepress/brand/og-image.webp +0 -0
- package/content/assets/edgepress/brand/sources/edgepress-avatar-master.png +0 -0
- package/content/assets/edgepress/brand/sources/export-manifest.json +181 -0
- package/content/assets/edgepress/brand/sources/prompts.json +12 -0
- package/content/assets/edgepress/favicon/apple-touch-icon.png +0 -0
- package/content/assets/edgepress/favicon/favicon-16.png +0 -0
- package/content/assets/edgepress/favicon/favicon-32.png +0 -0
- package/content/assets/edgepress/favicon/favicon-48.png +0 -0
- package/content/assets/edgepress/favicon/favicon-64.png +0 -0
- package/content/assets/edgepress/favicon/favicon.ico +0 -0
- package/content/assets/edgepress/icons/LICENSE.txt +43 -0
- package/content/assets/edgepress/icons/arrow-right.svg +16 -0
- package/content/assets/edgepress/icons/arrow-up-right.svg +16 -0
- package/content/assets/edgepress/icons/book-open.svg +16 -0
- package/content/assets/edgepress/icons/check-circle.svg +16 -0
- package/content/assets/edgepress/icons/check.svg +15 -0
- package/content/assets/edgepress/icons/cloud.svg +15 -0
- package/content/assets/edgepress/icons/code.svg +16 -0
- package/content/assets/edgepress/icons/cpu.svg +28 -0
- package/content/assets/edgepress/icons/file-text.svg +19 -0
- package/content/assets/edgepress/icons/github.svg +17 -0
- package/content/assets/edgepress/icons/globe.svg +17 -0
- package/content/assets/edgepress/icons/help-circle.svg +17 -0
- package/content/assets/edgepress/icons/home.svg +16 -0
- package/content/assets/edgepress/icons/layers.svg +17 -0
- package/content/assets/edgepress/icons/layout-grid.svg +18 -0
- package/content/assets/edgepress/icons/mail.svg +16 -0
- package/content/assets/edgepress/icons/newspaper.svg +18 -0
- package/content/assets/edgepress/icons/palette.svg +19 -0
- package/content/assets/edgepress/icons/plug.svg +18 -0
- package/content/assets/edgepress/icons/provenance.json +8 -0
- package/content/assets/edgepress/icons/puzzle.svg +15 -0
- package/content/assets/edgepress/icons/rocket.svg +18 -0
- package/content/assets/edgepress/icons/rss.svg +17 -0
- package/content/assets/edgepress/icons/search.svg +16 -0
- package/content/assets/edgepress/icons/settings.svg +16 -0
- package/content/assets/edgepress/icons/shield-check.svg +16 -0
- package/content/assets/edgepress/icons/sparkles.svg +18 -0
- package/content/assets/edgepress/icons/terminal.svg +16 -0
- package/content/assets/edgepress/icons/x.svg +16 -0
- package/{static → content/assets}/edgepress-markdown-guide.svg +1 -1
- package/content/assets/images/previews/edgepress-en.webp +0 -0
- package/content/assets/images/previews/edgepress-revisions-en.png +0 -0
- package/content/assets/images/previews/edgepress-workflow-en.90f4650b21013786.gif +0 -0
- package/content/assets/images/previews/edgepress-workflow-zh.41f1e0a685f47267.gif +0 -0
- package/content/assets/images/previews/edgepress-zh.webp +0 -0
- package/content/assets/images/previews/provenance.json +49 -0
- package/content/guides/markdown-media.md +38 -0
- package/content/guides/platforms.md +15 -0
- package/content/guides/product-demos.md +37 -0
- package/content/guides/zh-cn.md +62 -0
- package/content/pages/deployment/en.json +74 -0
- package/content/pages/deployment/zh-cn.json +74 -0
- package/content/pages/home/en.json +248 -0
- package/content/pages/home/zh-cn.json +248 -0
- package/content/pages/local-tools/en.json +14 -0
- package/content/pages/local-tools/zh-cn.json +14 -0
- package/content/pages/page-authoring/en.json +107 -0
- package/content/pages/page-authoring/zh-cn.json +107 -0
- package/content/pages/plugin-development/en.json +202 -0
- package/content/pages/plugin-development/zh-cn.json +202 -0
- package/content/pages/privacy-policy/en.json +171 -0
- package/content/pages/privacy-policy/zh-cn.json +171 -0
- package/content/pages/project-introduction/en.json +158 -0
- package/content/pages/project-introduction/zh-cn.json +158 -0
- package/content/pages/quick-start/en.json +325 -0
- package/content/pages/quick-start/zh-cn.json +325 -0
- package/content/pages/theme-development/en.json +353 -0
- package/content/pages/theme-development/zh-cn.json +349 -0
- package/content/posts/2026-09-24-edgepress-release-2026-9-1/en.md +1 -1
- package/content/posts/2026-09-24-edgepress-release-2026-9-1/zh-cn.md +1 -1
- package/content/posts/2026-10-03-edgepress-release-2026-10-3/en.md +16 -0
- package/content/posts/2026-10-03-edgepress-release-2026-10-3/zh-cn.md +16 -0
- package/content/posts/2026-10-03-edgepress-release-202610-4/en.md +22 -0
- package/content/posts/2026-10-03-edgepress-release-202610-4/zh-cn.md +20 -0
- package/content/posts/2026-10-03-edgepress-release-202610-5/en.md +15 -0
- package/content/posts/2026-10-03-edgepress-release-202610-5/zh-cn.md +15 -0
- package/edgeone.json +43 -0
- package/esa.jsonc +9 -0
- package/languages/base/en.json +75 -10
- package/languages/packs/zh-CN.json +74 -9
- package/netlify.toml +6 -0
- package/package.json +37 -6
- package/plugins/consent/index.js +10 -17
- package/project-compatibility.json +142 -25
- package/schemas/pages.schema.json +74 -0
- package/src/assets.js +146 -18
- package/src/browser-audit.js +158 -0
- package/src/build.js +34 -9
- package/src/cli.js +46 -41
- package/src/config.js +114 -63
- package/src/consent-csp.js +137 -0
- package/src/content.js +55 -30
- package/src/data-saver.js +194 -0
- package/src/deploy.js +28 -0
- package/src/document.js +44 -0
- package/src/embed.js +60 -0
- package/src/generators.js +101 -59
- package/src/i18n.js +19 -3
- package/src/icons.js +5 -4
- package/src/image-dimensions.js +17 -0
- package/src/local-tool.js +29 -0
- package/src/maintenance.js +25 -8
- package/src/markdown-fixture.js +20 -0
- package/src/markdown.js +80 -16
- package/src/media-assets.js +19 -0
- package/src/media-viewer.js +47 -0
- package/src/oembed.js +53 -0
- package/src/page-blocks.js +124 -54
- package/src/page-check.js +29 -39
- package/src/plugin-api.js +7 -1
- package/src/post-details.js +60 -0
- package/src/post-template.js +5 -0
- package/src/publication-time.js +47 -0
- package/src/report-path.js +19 -0
- package/src/report-visuals.js +91 -18
- package/src/revision-cards.js +30 -0
- package/src/revision-images.js +44 -0
- package/src/revisions.js +77 -0
- package/src/rss.js +100 -0
- package/src/service-block.js +18 -0
- package/src/theme.js +59 -9
- package/src/video-metadata.js +36 -0
- package/static/edgepress/data-saver.css +12 -0
- package/static/edgepress/data-saver.js +333 -0
- package/static/edgepress/document-viewer.js +35 -0
- package/static/edgepress/external-links-policy.js +14 -0
- package/static/edgepress/external-links.css +13 -0
- package/static/edgepress/external-links.js +120 -0
- package/static/edgepress/fonts/faces.css +2217 -0
- package/static/edgepress/fonts/noto-sans-OFL.txt +93 -0
- package/static/edgepress/fonts/noto-sans-cyrillic-ext-wght-normal.82ff72b28e6610f2.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-cyrillic-wght-normal.6ab64433de6077ca.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-devanagari-wght-normal.ea6a530b75d93de7.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-greek-ext-wght-normal.790b255c10c32e0b.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-greek-wght-normal.7f655207c2f6c140.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-latin-ext-wght-normal.6d5a79315528df19.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-latin-wght-normal.51ca196f49a33e79.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-100-wght-normal.ad5f29028d5699a5.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-101-wght-normal.e189b81fc22ca6af.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-102-wght-normal.941c0c2971fc1d6d.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-103-wght-normal.bafbd591af6493ff.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-104-wght-normal.b0bf80ced89dd61b.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-105-wght-normal.8d8b4e6f4a00621d.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-106-wght-normal.bae74acc629d2e74.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-107-wght-normal.a42eff5010de7b0d.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-108-wght-normal.91882203459867be.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-109-wght-normal.a91f8b038e5ce108.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-110-wght-normal.bbca9081655c4523.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-111-wght-normal.372be010ac0e87cb.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-112-wght-normal.34a4580239eae8dc.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-113-wght-normal.614ab8f616352583.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-114-wght-normal.cf7b8344807a316e.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-115-wght-normal.fb29957c7adccb9a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-116-wght-normal.a98dc5a726f82141.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-117-wght-normal.d94b5af0c14838af.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-118-wght-normal.76c9ddb85ae4578c.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-119-wght-normal.b3b2374881f4cd93.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-21-wght-normal.c1409c43e55ecff2.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-22-wght-normal.77037ed42ff4e7b0.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-23-wght-normal.38d0df21ac374e93.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-24-wght-normal.8fa21e7e457acf3e.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-25-wght-normal.f760b7a3871d214d.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-26-wght-normal.be8386e7bd7facfe.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-27-wght-normal.4895abcaddbd162e.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-28-wght-normal.82540b6201a9b9ad.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-29-wght-normal.ff21d8fcc60ce391.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-30-wght-normal.1f76f6ffded00b9e.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-31-wght-normal.e6c25be1bb08a63a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-32-wght-normal.0cda750d7d04a4e1.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-33-wght-normal.b9732b5606bd87c5.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-34-wght-normal.38aa326b4c84902a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-35-wght-normal.bd98226c8e0aa808.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-36-wght-normal.0db1ca695a491d37.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-37-wght-normal.8df409a4e0a237c2.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-38-wght-normal.672d2d994994a3c3.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-39-wght-normal.272d6d0e153f56e8.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-4-wght-normal.9fafd93ac77b81ff.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-40-wght-normal.5b9ef1ed48420aa7.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-41-wght-normal.30aee47f660fd88a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-42-wght-normal.ec0014830db682b6.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-43-wght-normal.43df2b5dad9bb835.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-44-wght-normal.acaa6195041b1a92.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-45-wght-normal.8cdb9903f770db21.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-46-wght-normal.6590d0a6fe94571c.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-47-wght-normal.b05afdd32b3bf722.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-48-wght-normal.c9585f7d070700be.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-49-wght-normal.4943895a4dfa5dcf.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-5-wght-normal.e64f57937e3ae4fe.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-50-wght-normal.13e51063d7743cfe.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-51-wght-normal.fd4df1f02c2cb4d7.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-52-wght-normal.06999a39c4c3a7ea.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-53-wght-normal.767b7b9864658d91.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-54-wght-normal.4cd00537a46f6f1a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-55-wght-normal.0118ec5d8c30b197.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-56-wght-normal.a3e4a78929826930.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-57-wght-normal.7623501009e4a6db.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-58-wght-normal.56ae1a59a32e4a25.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-59-wght-normal.7a377a40e99fd9bc.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-6-wght-normal.17e15c4f0a5bfd92.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-60-wght-normal.3657f66babdf6aff.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-61-wght-normal.23919a2eb11d25dd.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-62-wght-normal.a901edf25bc1cfae.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-63-wght-normal.92f56f713cc0b62f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-64-wght-normal.4929c9f39a5a4bd9.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-65-wght-normal.8daa61282fb62a11.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-66-wght-normal.6479166925eb462b.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-67-wght-normal.a6b0e11c4c761ffd.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-68-wght-normal.65b77f1fe9d68dae.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-69-wght-normal.b34f765cbbf4d02e.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-70-wght-normal.a99d55c00e4f95b7.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-71-wght-normal.3298bed30dc8d233.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-72-wght-normal.6597209ca9707726.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-73-wght-normal.e7ac1d4930eabd78.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-74-wght-normal.1f0287be83a28e7a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-75-wght-normal.d9a4bb7bcc2be578.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-76-wght-normal.5a019946bcadcec6.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-77-wght-normal.7c445e85d04f5319.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-78-wght-normal.7d4afb70f641781c.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-79-wght-normal.5798753a721bb4ec.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-80-wght-normal.db887159ca6e46f3.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-81-wght-normal.71e5743bbd225b3d.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-82-wght-normal.8c5094c3785fd04f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-83-wght-normal.4a60a1ccba905284.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-84-wght-normal.3ed54e59ef4758e3.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-85-wght-normal.e87e0a1342e1778c.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-86-wght-normal.6d3ac3e20959dbcb.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-87-wght-normal.0eeffd5daad5c17b.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-88-wght-normal.b1d9582dfa268463.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-89-wght-normal.8b437aeb9e9fcb5a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-90-wght-normal.83b0a59e0a5e045a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-91-wght-normal.382f72b98d4bb9d7.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-97-wght-normal.5e52856457c5cdab.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-98-wght-normal.ffded4e7fd560d93.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-99-wght-normal.54e302c23f11a8fd.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-OFL.txt +93 -0
- package/static/edgepress/fonts/noto-sans-sc-cyrillic-wght-normal.5932d441e7126669.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-latin-ext-wght-normal.e316201f3fc493d1.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-latin-wght-normal.c1d919c8701a86ed.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-sc-vietnamese-wght-normal.cba3d00c8db989f0.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-0-wght-normal.63c21eda5d20203f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-100-wght-normal.87a7c76301c24a28.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-101-wght-normal.c9e83fc4ffd53746.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-102-wght-normal.9a00ae0e5735852b.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-103-wght-normal.7cfe93b3221f4def.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-104-wght-normal.2d5ac7497d84cb99.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-105-wght-normal.0989885bb16bcd9b.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-106-wght-normal.1faa921b035064e7.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-107-wght-normal.2f6006745ae16d69.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-108-wght-normal.a61e48c10a2cf4b9.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-109-wght-normal.f28c767724736d2d.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-110-wght-normal.4b04bd88c3dc7c5d.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-111-wght-normal.b6251e1967932a52.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-112-wght-normal.e264513b32f90660.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-113-wght-normal.46cb347d88f3338e.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-114-wght-normal.9f9e1e0d0ab2aeb4.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-115-wght-normal.653dd2ab7d551b40.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-116-wght-normal.4718bf3627191297.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-117-wght-normal.b241a9409682af5f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-118-wght-normal.fda2800dc1c06852.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-119-wght-normal.948af36bd63a72c7.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-19-wght-normal.62191cdc3a10e60a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-20-wght-normal.65c90892c2e01657.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-21-wght-normal.d3f59b094c334866.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-22-wght-normal.b1983a041d7e4e1f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-23-wght-normal.16e2163b66c7732a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-24-wght-normal.72c8561976116537.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-25-wght-normal.b2948d928ce4dd54.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-26-wght-normal.d583236b90abedc9.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-27-wght-normal.7d6073ba07597c9b.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-28-wght-normal.517204d716b089cd.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-29-wght-normal.10189a8f8ca38099.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-30-wght-normal.695a71d72dfab3f7.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-31-wght-normal.868d59473ef0e73c.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-32-wght-normal.92efa2d4b3702ec0.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-33-wght-normal.d2274bcd5636197d.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-34-wght-normal.1ac8c3718ee2eed2.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-35-wght-normal.00b3df730d5a4c73.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-36-wght-normal.6963feb6c628b81f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-37-wght-normal.a1b4bd294af24cd1.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-38-wght-normal.8edb2f7f2955921b.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-39-wght-normal.37bf7394eb3148c6.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-40-wght-normal.3efa655bc48f9133.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-41-wght-normal.48d47014544ebd5d.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-42-wght-normal.214c733a59d423e7.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-43-wght-normal.c2c9876f138bb20f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-44-wght-normal.28928bfea29db06a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-45-wght-normal.bf3743f8155fa9d2.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-46-wght-normal.06970903593781c3.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-47-wght-normal.8932ed83a91794d4.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-48-wght-normal.dfd9225628bcf234.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-49-wght-normal.c27d341ad39d44eb.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-50-wght-normal.01a0f4e7dfba0a56.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-51-wght-normal.5a30022af3d30e0f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-52-wght-normal.4884f032342a3274.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-53-wght-normal.537adcae44511270.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-54-wght-normal.6bc8c7d3e47c6fde.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-55-wght-normal.725a48711f1e1997.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-56-wght-normal.f43ecaa73e0cd8fc.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-57-wght-normal.15b24e9d42a3270f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-58-wght-normal.9b2d8a71667d3da6.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-59-wght-normal.a68535a6b3289d89.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-6-wght-normal.32cece1ae80c4f2b.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-60-wght-normal.3b2c56a921d1cad4.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-61-wght-normal.54f51f80a0740878.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-62-wght-normal.ba029c5bb6c07bf1.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-63-wght-normal.380919beec4c7f3d.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-64-wght-normal.f96fe0be479d201f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-65-wght-normal.7d544b80701fe678.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-66-wght-normal.fab669c07a1e3bee.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-67-wght-normal.0001bb744743fdfa.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-68-wght-normal.1a57eda03886b43c.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-69-wght-normal.017fecc749bcd6d5.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-7-wght-normal.cd0f0cac743dbbfe.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-70-wght-normal.79fb9d70b9534ec7.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-71-wght-normal.04a6ea581b5f1195.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-72-wght-normal.d3a4eb35499157b7.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-73-wght-normal.d81f8484404ee465.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-74-wght-normal.4a5da9e0c2702f7d.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-75-wght-normal.8b87f9c6c164513a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-76-wght-normal.a71463dbfd9fa7b5.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-77-wght-normal.d094414ea752cd52.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-78-wght-normal.04f7c97bd9cbc73b.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-79-wght-normal.1ed089d037a02049.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-8-wght-normal.d052677dfb5db5bd.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-80-wght-normal.6d41ca59cfd50442.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-81-wght-normal.f09bd0afa8a58114.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-82-wght-normal.7920841c526b1b02.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-83-wght-normal.0c6f7f82db8da0d8.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-84-wght-normal.f37c0a853b31265e.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-85-wght-normal.4173bff087653b82.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-86-wght-normal.dac35605ebec15c4.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-87-wght-normal.8ac85fdd0b15a6bd.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-88-wght-normal.61625b0b21e8407f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-89-wght-normal.a1da3dccbf00698e.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-90-wght-normal.bf08f0355222a782.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-91-wght-normal.2ecf295bba2bfaa3.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-92-wght-normal.36508326bb68115f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-97-wght-normal.c712899e0fc9e947.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-98-wght-normal.13a648e521d18d7f.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-99-wght-normal.7f8c9a777e64159a.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-OFL.txt +93 -0
- package/static/edgepress/fonts/noto-sans-tc-cyrillic-wght-normal.dd0980ced8e46cb3.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-latin-ext-wght-normal.817d96335dc52ce6.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-latin-wght-normal.50cb5fb0a522cfaf.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-tc-vietnamese-wght-normal.2a77fb7b70fa304d.woff2 +0 -0
- package/static/edgepress/fonts/noto-sans-vietnamese-wght-normal.791e3f213c155a5b.woff2 +0 -0
- package/static/edgepress/fonts/noto-serif-OFL.txt +93 -0
- package/static/edgepress/fonts/noto-serif-cyrillic-ext-wght-normal.7c7afb20d33e30ec.woff2 +0 -0
- package/static/edgepress/fonts/noto-serif-cyrillic-wght-normal.54e3bd0c4a002b0f.woff2 +0 -0
- package/static/edgepress/fonts/noto-serif-greek-ext-wght-normal.9b3f4c4ff3adefd2.woff2 +0 -0
- package/static/edgepress/fonts/noto-serif-greek-wght-normal.1252037b6f1d6e86.woff2 +0 -0
- package/static/edgepress/fonts/noto-serif-latin-ext-wght-normal.2654f8d1261a420f.woff2 +0 -0
- package/static/edgepress/fonts/noto-serif-latin-wght-normal.46281456234014ce.woff2 +0 -0
- package/static/edgepress/fonts/noto-serif-math-wght-normal.d4a6aba2cb4636b3.woff2 +0 -0
- package/static/edgepress/fonts/noto-serif-vietnamese-wght-normal.fb6a5ed734c2fbe3.woff2 +0 -0
- package/static/edgepress/fonts/provenance.json +1356 -0
- package/static/edgepress/fonts.css +14 -0
- package/static/edgepress/image-viewer.js +23 -0
- package/static/edgepress/images.css +4 -0
- package/static/edgepress/link-directory.css +14 -0
- package/static/edgepress/local-time.js +12 -0
- package/static/edgepress/media-viewer.css +1 -0
- package/static/edgepress/media-viewer.js +111 -0
- package/static/edgepress/navigation-select.js +14 -0
- package/static/edgepress/oembed.js +129 -0
- package/static/edgepress/plugins/backend/external-api.js +4 -0
- package/static/edgepress/plugins/backend/external-widget.js +13 -0
- package/static/edgepress/plugins/consent/choices.js +47 -0
- package/static/edgepress/plugins/consent/manager.js +56 -74
- package/static/edgepress/project-demo.js +93 -0
- package/static/edgepress/search.js +2 -2
- package/static/edgepress/services-consent.js +3 -0
- package/static/edgepress/services.js +15 -0
- package/static/edgepress/webmcp.js +86 -0
- package/tests/assets-runtime.test.mjs +91 -0
- package/tests/audit.test.mjs +142 -0
- package/tests/brand-regression.test.mjs +110 -0
- package/tests/consent-browser.test.mjs +132 -0
- package/tests/consent-config.test.mjs +85 -0
- package/tests/consent-csp.test.mjs +90 -0
- package/tests/data-saver-loading.test.mjs +158 -0
- package/tests/data-saver-network.test.mjs +99 -0
- package/tests/data-saver.test.mjs +294 -0
- package/tests/document-package.test.mjs +28 -0
- package/tests/document-viewer.test.mjs +152 -0
- package/tests/edge-issues.test.mjs +65 -0
- package/tests/embed-syntax.test.mjs +68 -0
- package/tests/external-links.test.mjs +198 -0
- package/tests/fixtures/recording.mp4 +0 -0
- package/tests/fonts.test.mjs +99 -0
- package/tests/image-dimensions.test.mjs +15 -0
- package/tests/image-viewer.test.mjs +36 -0
- package/tests/json-pages.test.mjs +66 -0
- package/tests/link-directory.test.mjs +51 -0
- package/tests/local-tool.test.mjs +34 -0
- package/tests/markdown-media.test.mjs +119 -0
- package/tests/media-block.test.mjs +102 -0
- package/tests/navigation.test.mjs +87 -0
- package/tests/oembed-layout.test.mjs +98 -0
- package/tests/oembed.test.mjs +96 -0
- package/tests/page-authoring.test.mjs +27 -0
- package/tests/page-formatting.test.mjs +37 -0
- package/tests/post-list.test.mjs +96 -0
- package/tests/project-demo.test.mjs +73 -0
- package/tests/publication-time.test.mjs +43 -0
- package/tests/release-version.test.mjs +28 -0
- package/tests/revisions.test.mjs +93 -0
- package/tests/rss.test.mjs +54 -0
- package/tests/services.test.mjs +35 -0
- package/tests/theme-layout.test.mjs +95 -0
- package/tests/video-metadata.test.mjs +28 -0
- package/tests/webmcp.test.mjs +121 -0
- package/tests/writing.test.mjs +101 -0
- package/themes/atelier/assets/style.css +144 -22
- package/themes/atelier/layouts/partials/head.html +8 -1
- package/themes/atelier/layouts/partials/header.html +3 -1
- package/themes/default/assets/data-saver-theme.css +2 -0
- package/themes/default/assets/style.css +139 -23
- package/themes/default/layouts/partials/head.html +9 -2
- package/themes/default/layouts/partials/header.html +3 -1
- package/themes/default/theme.json +1 -0
- package/themes/folio/README.md +7 -0
- package/themes/folio/assets/data-saver-theme.css +3 -0
- package/themes/folio/assets/folio/navigation.js +10 -0
- package/themes/folio/assets/style.css +516 -0
- package/themes/folio/layouts/layout.html +15 -0
- package/themes/folio/layouts/partials/footer.html +6 -0
- package/themes/folio/layouts/partials/head.html +30 -0
- package/themes/folio/layouts/partials/header.html +8 -0
- package/themes/folio/theme.json +7 -0
- package/themes/signal/assets/style.css +143 -21
- package/themes/signal/layouts/partials/head.html +8 -1
- package/themes/signal/layouts/partials/header.html +3 -1
- package/tools/README.md +14 -0
- package/tools/assets/format-pages.mjs +56 -0
- package/tools/assets/generate-brand-assets.py +160 -0
- package/tools/assets/sync-fonts.mjs +71 -0
- package/tools/assets/sync-icons.mjs +17 -0
- package/tools/assets/video-preview.mjs +15 -0
- package/tools/recordings/capture-document-demo.mjs +147 -0
- package/tools/recordings/demo-workbench.mjs +57 -0
- package/tools/recordings/desktop-recording.mjs +92 -0
- package/tools/recordings/provision-vm.sh +18 -0
- package/tools/recordings/start-vm-desktop.sh +28 -0
- package/tools/recordings/vm-desktop.mjs +124 -0
- package/tools/verification/README.md +44 -0
- package/tools/verification/data-saver-site.mjs +405 -0
- package/tools/verification/page-performance.mjs +76 -0
- package/tools/verification/verify-brand-assets.py +52 -0
- package/tools/verification/verify-brand.mjs +180 -0
- package/vercel.json +36 -0
- package/wrangler.jsonc +5 -7
- package/content/pages/home/en.md +0 -99
- package/content/pages/home/zh-cn.md +0 -99
- package/content/pages/plugin-development/en.md +0 -109
- package/content/pages/plugin-development/zh-cn.md +0 -109
- package/content/pages/privacy-policy/en.md +0 -93
- package/content/pages/privacy-policy/zh-cn.md +0 -93
- package/content/pages/project-introduction/en.md +0 -88
- package/content/pages/project-introduction/zh-cn.md +0 -88
- package/content/pages/quick-start/en.md +0 -153
- package/content/pages/quick-start/zh-cn.md +0 -153
- package/content/pages/theme-development/en.md +0 -132
- package/content/pages/theme-development/zh-cn.md +0 -132
- package/src/worker.js +0 -139
- package/static/edgepress/brand/edgepress-mark.svg +0 -7
- package/static/edgepress/brand/mascot-209.webp +0 -0
- package/static/edgepress/brand/mascot-418.png +0 -0
- package/static/edgepress/brand/mascot-418.webp +0 -0
- package/static/edgepress/brand/mascot.png +0 -0
- package/static/edgepress/brand/og-image.png +0 -0
- package/static/edgepress/brand/og-image.svg +0 -46
- package/static/edgepress/icons.svg +0 -24
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../../schemas/pages.schema.json",
|
|
3
|
+
"title": "主题开发",
|
|
4
|
+
"lang": "zh-CN",
|
|
5
|
+
"slug": "theme-development",
|
|
6
|
+
"description": "使用共享 HTML 局部模板、CSS 配色、页面元素布局和可复用错误页构建 EdgePress 主题。",
|
|
7
|
+
"blocks": [
|
|
8
|
+
{
|
|
9
|
+
"columns": 1,
|
|
10
|
+
"cells": [
|
|
11
|
+
[
|
|
12
|
+
{
|
|
13
|
+
"type": "section",
|
|
14
|
+
"title": "按需开发节省流量版本",
|
|
15
|
+
"blocks": [
|
|
16
|
+
{
|
|
17
|
+
"type": "text",
|
|
18
|
+
"paragraphs": [
|
|
19
|
+
"轻量版本是主题的可选能力,不强制每个主题提供。支持时在 theme.json 中声明 dataSaver,并把专用样式与可选脚本放在 assets/。框架负责检测、用户选择、延后媒体请求及本地资源安全;主题负责合理的轻量配色、布局与必要交互。",
|
|
20
|
+
"使用系统字体和少量 CSS,不引入装饰性图片或网络字体。可选 layoutStyles 声明已发布样式,构建时提取共享布局并移除字体声明与 URL。专用样式调整图片卡片,保留真实标题、摘要、日期、导航、页脚、焦点与主题配色,不能粗暴将所有网格变为一列。非必要的完整模式脚本使用 data-data-optional。动态图片在设置任何媒体地址前调用 window.edgepressDataSaver?.deferMedia,不能等下载开始后才隐藏。",
|
|
21
|
+
"站长分别决定是否检测首屏延迟、是否响应浏览器节流偏好。首屏过久才提示选择文字省流版,不因慢网络标签自动切换;明确的 saveData 信号可以在导航时启用省流版。不常驻三档选择器,文字版保留切回完整页面的入口。用户明确选择优先于自动判断,不突然刷新正在阅读的页面。"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"type": "code",
|
|
26
|
+
"title": "theme.json 增加声明",
|
|
27
|
+
"language": "json",
|
|
28
|
+
"code": "\"dataSaver\": {\n \"stylesheet\": \"data-saver-theme.css\",\n \"scripts\": [],\n \"layoutStyles\": [\"style.css\"]\n}\n"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"type": "code",
|
|
32
|
+
"title": "config.yml 站点配置",
|
|
33
|
+
"language": "yaml",
|
|
34
|
+
"code": "site:\n dataSaver:\n enabled: true\n debug: false\n mode: auto\n detectSlowConnection: true\n respectBrowserPreference: false\n promptAfterMs: 5000\n"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"type": "text",
|
|
38
|
+
"text": "只有调试时才开启 site.dataSaver.debug,并用 /?data-save 查看文字版。关闭后该入口进入本地化静态 404 页面;真正 HTTP 404 需由托管规则处理。默认完整版,在等待页直接展示实际资源进度与文字版入口,不等待完整样式或引擎才能切换。完整样式、多媒体、引擎分阶段加载,字体下载不阻挡阅读。保留已聚焦的选择,授权后按需加载所选服务,不连带加载其他插件。系统字体回退需覆盖中日韩文字。"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"type": "text",
|
|
42
|
+
"paragraphs": [
|
|
43
|
+
"用隔离浏览器模拟慢网络与 saveData,检查真实请求记录,同时覆盖不支持相关 API、存储受阻、关闭 JavaScript、键盘操作、小屏幕、暗色及高对比。文字模式不应自动请求完整主题、字体、图片或文档和视频引擎;单独加载媒体不能启动其他预览。保留资源依赖指纹、完整显示功能、外链提示与当前有效服务同意。"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"columns": 1,
|
|
53
|
+
"cells": [
|
|
54
|
+
[
|
|
55
|
+
{
|
|
56
|
+
"type": "text",
|
|
57
|
+
"text": "文档通过纯浏览器 document-viewer 自动预览,支持 PDF、DOC/DOCX、PPT/PPTX 和 XLS/XLSX。云端构建无需安装 Office 或 LibreOffice。预览不保证 Office 排版完全一致,不执行宏,也不加载文档内外部资源。"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"type": "code",
|
|
61
|
+
"title": "文档区块",
|
|
62
|
+
"language": "json",
|
|
63
|
+
"code": "[\n {\n \"type\": \"document\",\n \"title\": \"年度报告\",\n \"src\": \"/documents/report.docx\"\n },\n {\n \"type\": \"document\",\n \"title\": \"分享的工作表\",\n \"src\": \"https://files.example/download/123\",\n \"format\": \"xlsx\",\n \"service\": \"documents\"\n }\n]"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"type": "text",
|
|
67
|
+
"text": "本地文档放在 content/assets/documents/。文章和 Pages 文本区块支持独立一行的 !document[年度报告](/documents/report.docx)。无扩展名的分享下载地址使用 !document[分享报告](https://files.example/download/123){format=pdf service=documents}。远程文档须在 plugins.consent.services 注册 external-api 服务并填写隐私披露,等待当前访客同意后才请求。地址必须返回文件原始字节且允许 CORS;分享页面解析、身份验证和访问权限由外部服务负责,不新增站点代理。"
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"columns": 1,
|
|
74
|
+
"cells": [
|
|
75
|
+
[
|
|
76
|
+
{
|
|
77
|
+
"type": "hero",
|
|
78
|
+
"eyebrow": "主题指南",
|
|
79
|
+
"title": "让主题负责共享布局和视觉设计。",
|
|
80
|
+
"text": "页面定义行栏数、元素类型和内容。主题负责网站外壳、字体、间距、颜色和响应式行为。"
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"columns": 2,
|
|
87
|
+
"cells": [
|
|
88
|
+
[
|
|
89
|
+
{
|
|
90
|
+
"type": "section",
|
|
91
|
+
"title": "主题结构",
|
|
92
|
+
"tone": "soft",
|
|
93
|
+
"blocks": [
|
|
94
|
+
{
|
|
95
|
+
"type": "code",
|
|
96
|
+
"title": "主题文件",
|
|
97
|
+
"language": "text",
|
|
98
|
+
"code": "themes/your-theme/\n theme.json\n package.json\n README.md\n layouts/\n layout.html\n partials/\n head.html\n header.html\n footer.html\n assets/\n style.css\n"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"type": "text",
|
|
102
|
+
"paragraphs": [
|
|
103
|
+
"共享布局会渲染所有页面和文章。head、header 和 footer 局部模板提供常见网站组件。在 config.yml 中配置页面标题后缀与分隔符、站点标题、全站导航、语言链接、页脚内容和组件显示状态。",
|
|
104
|
+
"使用双花括号占位符输出经过转义的值。唯一允许的原样占位符是生成的页面内容、JSON-LD 和 EdgePress 生成的导航标记。保留跳转链接、唯一 main 主区域、带标签的导航、可见焦点和一个页面级 h1。",
|
|
105
|
+
"页面块中的站内链接可写成 /[launge]/quick-start/。生成页面会把 [launge] 替换为当前语言路径;默认语言会移除该段,因此同一链接可用于中英文页面。",
|
|
106
|
+
"将 body 保持为全高纵向布局,并让 main 延伸,这样短页面的页脚也会留在视口底部。",
|
|
107
|
+
"将页面图片和下载文件放在 content/assets/。EdgePress 会按原相对路径发布到站点根目录,例如 content/assets/images/diagram.svg 对应 /images/diagram.svg。themes/<name>/assets/ 用于共享 CSS 和 JavaScript。",
|
|
108
|
+
"在主题中统一设计代码块、复制按钮和文章目录。窄屏代码行会自动折行,复制控件具有清晰的键盘焦点,生成的文章目录会链接到标题锚点。"
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
[
|
|
115
|
+
{
|
|
116
|
+
"type": "section",
|
|
117
|
+
"title": "选择主题配色",
|
|
118
|
+
"tone": "soft",
|
|
119
|
+
"blocks": [
|
|
120
|
+
{
|
|
121
|
+
"type": "text",
|
|
122
|
+
"paragraphs": [
|
|
123
|
+
"颜色、字体选择和组件样式保存在当前主题的样式表中。不要在 config.yml 中填写颜色。切换主题不会改变页面内容。",
|
|
124
|
+
"使用 edgepress theme list 查看可用主题。使用 edgepress theme use default、edgepress theme use atelier 或 edgepress theme use signal 进行切换。",
|
|
125
|
+
"使用 edgepress theme install <npm-package>[@version] 安装 npm 上发布的主题包。包内必须包含 theme.json 和 layouts/layout.html。EdgePress 会将主题复制到 themes/,且不会运行 npm 安装脚本。",
|
|
126
|
+
"使用 edgepress theme create my-theme 创建可发布到 npm 的主题包骨架,其中包含 npm package.json、空白样式表、无障碍布局以及 head、header、导航和 footer 文件。编辑后使用 edgepress theme use my-theme 切换;也可以进入该目录运行 npm publish --access public 发布。"
|
|
127
|
+
]
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"type": "notice",
|
|
131
|
+
"title": "共享错误页",
|
|
132
|
+
"text": "EdgePress 使用所选主题布局生成本地化的 403 和 404 页面。静态资源被拒绝访问时,Worker 会返回对应的 403 页面。",
|
|
133
|
+
"tone": "info"
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"columns": 1,
|
|
142
|
+
"cells": [
|
|
143
|
+
[
|
|
144
|
+
{
|
|
145
|
+
"type": "section",
|
|
146
|
+
"title": "页面行与可编辑元素",
|
|
147
|
+
"blocks": [
|
|
148
|
+
{
|
|
149
|
+
"type": "text",
|
|
150
|
+
"paragraphs": [
|
|
151
|
+
"每个页面的语言版本使用 JSON 文件;元数据与有序 blocks 同在一个对象中,本地 Pages schema 提供编辑器校验。文章仍使用 Markdown。",
|
|
152
|
+
"数据从外向内排列:先设每行的 columns 栏数,再为每栏设置一个 cells 项,然后在栏内选择元素类型,最后编辑该元素字段。验证器会拒绝栏数不匹配或空白的栏。",
|
|
153
|
+
"页面不使用文章 Markdown 渲染器。文章仍使用 Markdown 撰写,并由内置安全渲染器输出。",
|
|
154
|
+
"hero 元素可用 mascotWebpSrcset 提供按宽度递增的路径候选项,并设置与显示宽度一致的 mascotSizes,以及匹配备用图片尺寸的 mascotWidth 和 mascotHeight。mascotSrc 会留作不支持 WebP 的浏览器备用图。"
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"type": "data-table",
|
|
159
|
+
"title": "可用元素类别",
|
|
160
|
+
"headers": [
|
|
161
|
+
"元素",
|
|
162
|
+
"主要用途"
|
|
163
|
+
],
|
|
164
|
+
"rows": [
|
|
165
|
+
[
|
|
166
|
+
"hero、section、text、heading",
|
|
167
|
+
"页面结构和文字内容"
|
|
168
|
+
],
|
|
169
|
+
[
|
|
170
|
+
"display-text",
|
|
171
|
+
"编辑式、衬线、描边、等宽或强调字样"
|
|
172
|
+
],
|
|
173
|
+
[
|
|
174
|
+
"media-text",
|
|
175
|
+
"图片或带字幕视频配合可编辑文字"
|
|
176
|
+
],
|
|
177
|
+
[
|
|
178
|
+
"link-list、list、steps、code、data-table、notice",
|
|
179
|
+
"导航、说明、代码、信息和提示"
|
|
180
|
+
],
|
|
181
|
+
[
|
|
182
|
+
"feature-grid、quote、cta、faq、latest-posts",
|
|
183
|
+
"可复用页面组合"
|
|
184
|
+
],
|
|
185
|
+
[
|
|
186
|
+
"privacy-services、privacy-controller、privacy-consent、captcha、ad-slot",
|
|
187
|
+
"使用配置数据的站点集成"
|
|
188
|
+
]
|
|
189
|
+
]
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"type": "notice",
|
|
193
|
+
"title": "视频字幕",
|
|
194
|
+
"text": "media-text 视频元素需要 WebVTT 字幕源、语言标签和字幕轨道名称。视频使用浏览器原生控件并设置 preload none。第三方视频嵌入应放在明确同意后才启用的集成中。",
|
|
195
|
+
"tone": "warning"
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
]
|
|
200
|
+
]
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"columns": 1,
|
|
204
|
+
"cells": [
|
|
205
|
+
[
|
|
206
|
+
{
|
|
207
|
+
"type": "section",
|
|
208
|
+
"title": "开发与预览",
|
|
209
|
+
"blocks": [
|
|
210
|
+
{
|
|
211
|
+
"type": "steps",
|
|
212
|
+
"items": [
|
|
213
|
+
{
|
|
214
|
+
"title": "选择主题",
|
|
215
|
+
"text": "安装或创建主题后,使用 EdgePress theme 命令修改 edgepress.config.mjs 中的 paths.theme。",
|
|
216
|
+
"command": "edgepress theme use your-theme"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"title": "编辑布局和 CSS",
|
|
220
|
+
"text": "修改所选主题的布局、局部模板和样式表。构建时会为每个 CSS 和 JavaScript 资源生成内容指纹。"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"title": "预览网站",
|
|
224
|
+
"text": "server 会监视源文件、重新构建输出、刷新浏览器,并更新无障碍化和 agent 友好度报告。",
|
|
225
|
+
"command": "edgepress server"
|
|
226
|
+
}
|
|
227
|
+
]
|
|
228
|
+
}
|
|
229
|
+
]
|
|
230
|
+
}
|
|
231
|
+
]
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"columns": 1,
|
|
236
|
+
"cells": [
|
|
237
|
+
[
|
|
238
|
+
{
|
|
239
|
+
"type": "section",
|
|
240
|
+
"title": "使用共享图标库",
|
|
241
|
+
"tone": "soft",
|
|
242
|
+
"text": "EdgePress 随站点提供 28 个本地Lucide SVG 图标,存放在 content/assets/edgepress/icons/,发布路径为 /edgepress/icons/<name>.svg。主题导航会自动使用图标;feature-grid 也可为功能卡片指定图标,不增加运行时依赖,也不会请求第三方服务器。",
|
|
243
|
+
"blocks": [
|
|
244
|
+
{
|
|
245
|
+
"type": "code",
|
|
246
|
+
"title": "在主题局部模板中添加装饰图标",
|
|
247
|
+
"language": "html",
|
|
248
|
+
"code": "<img class=\"icon icon-library\" src=\"/edgepress/icons/layers.svg\" width=\"24\" height=\"24\" alt=\"\" aria-hidden=\"true\">\n"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"type": "code",
|
|
252
|
+
"title": "为功能卡片指定图标",
|
|
253
|
+
"language": "json",
|
|
254
|
+
"code": "[\n {\n \"title\": \"文章使用 Markdown\",\n \"icon\": \"file-text\",\n \"text\": \"撰写并发布文章。\"\n }\n]"
|
|
255
|
+
}
|
|
256
|
+
]
|
|
257
|
+
}
|
|
258
|
+
]
|
|
259
|
+
]
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"columns": 1,
|
|
263
|
+
"cells": [
|
|
264
|
+
[
|
|
265
|
+
{
|
|
266
|
+
"type": "section",
|
|
267
|
+
"title": "显示单个项目的文章",
|
|
268
|
+
"blocks": [
|
|
269
|
+
{
|
|
270
|
+
"type": "text",
|
|
271
|
+
"paragraphs": [
|
|
272
|
+
"使用 post-list 的 category: edgepress 或 categories: [博客, 未分类] 筛选栏目,按日期由新到旧排列,优先选择当前语言版本。count 可设为 1 到 12;单个分类超出的文章链接到当前语言分类归档。"
|
|
273
|
+
]
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"type": "code",
|
|
277
|
+
"title": "项目文章列表",
|
|
278
|
+
"language": "json",
|
|
279
|
+
"code": "[\n {\n \"columns\": 1,\n \"cells\": [\n [\n {\n \"type\": \"post-list\",\n \"title\": \"EdgePress articles\",\n \"category\": \"edgepress\",\n \"count\": 6\n }\n ]\n ]\n }\n]"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"type": "text",
|
|
283
|
+
"paragraphs": [
|
|
284
|
+
"在文章前置数据加入 category: edgepress;省略分类时默认未分类。标签仅在文章页展示,移除 tag 筛选和标签归档。site.archive.categories 控制主见闻栏目;首页分页时使用相同分类。"
|
|
285
|
+
]
|
|
286
|
+
}
|
|
287
|
+
]
|
|
288
|
+
}
|
|
289
|
+
]
|
|
290
|
+
]
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"columns": 1,
|
|
294
|
+
"cells": [
|
|
295
|
+
[
|
|
296
|
+
{
|
|
297
|
+
"type": "text",
|
|
298
|
+
"heading": "图片细节查看",
|
|
299
|
+
"text": "文章图片和 Pages 的 image、media-text 图片块支持点击全屏放大。原图地址与展示图不同时,Pages 图片块可填写 originalSrc,Markdown HTML 图片可填写 data-original,链接到图片文件的图片也可直接放大;点击查看时才加载原图。工具栏支持缩放、保存与关闭,关闭后回到原位置。品牌图片和普通导航链接保留原用途,可选服务中的图片仍需要访客授权,并遵循 CSP。"
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"type": "text",
|
|
303
|
+
"text": "构建时会自动给本地发布图片添加实际宽高,在加载前保留其比例;已设置的宽高会保留。远程图片请自行填写尺寸,构建器不会请求远程图片。"
|
|
304
|
+
}
|
|
305
|
+
]
|
|
306
|
+
]
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"columns": 1,
|
|
310
|
+
"cells": [
|
|
311
|
+
[
|
|
312
|
+
{
|
|
313
|
+
"type": "text",
|
|
314
|
+
"heading": "本地多语言字体",
|
|
315
|
+
"text": "内置主题随站点打包 Noto Sans、Noto Serif 和简繁中文可变字体,不请求字体 CDN。WOFF2 按 Unicode 字符范围分片,只加载当前页面使用的字形;繁体语言优先使用繁体字形。界面、文章、Pages 和代码中的中文均可使用本地字形,不要求访客安装中文字体。"
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"type": "code",
|
|
319
|
+
"title": "自定义主题使用统一字体变量",
|
|
320
|
+
"language": "css",
|
|
321
|
+
"code": ":root { font-family: var(--edgepress-font-sans); }\nh1, h2 { font-family: var(--edgepress-font-serif); }\npre, code { font-family: var(--edgepress-font-mono); }\n"
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"type": "text",
|
|
325
|
+
"text": "字体覆盖拉丁字母、希腊字母、西里尔字母及常用简繁中文,并非完整 Unicode。增加阿拉伯语等其他文字系统的语言包时,应同时加入对应 Noto 字体与 unicode-range;保持同源加载、OFL 许可证和内容哈希。fonts:sync 仅维护字体资源,普通构建无需下载字体。"
|
|
326
|
+
}
|
|
327
|
+
]
|
|
328
|
+
]
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"columns": 1,
|
|
332
|
+
"cells": [
|
|
333
|
+
[
|
|
334
|
+
{
|
|
335
|
+
"type": "text",
|
|
336
|
+
"heading": "在 Pages 插入查看器",
|
|
337
|
+
"text": "文档以带页码的连续分页展示,不再使用上下页按钮。document 插入 PDF 和 Office;media-viewer 插入图片、视频或混合附件。只挂载选中的媒体,点击播放后才加载视频。远程资源须填写 service,登记 external-api 服务并明确配置 img-src、media-src、connect-src 所需来源,授权后才请求。视频字幕填写 captions 和 captionLanguage;只有确实无声的片段才可用 silent: true 代替字幕。"
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
"type": "code",
|
|
341
|
+
"title": "Pages 查看器元素",
|
|
342
|
+
"language": "json",
|
|
343
|
+
"code": "[\n {\n \"columns\": 1,\n \"cells\": [\n [\n {\n \"type\": \"document\",\n \"title\": \"Report\",\n \"src\": \"/documents/report.pdf\"\n },\n {\n \"type\": \"media-viewer\",\n \"title\": \"Photos and video\",\n \"items\": [\n {\n \"type\": \"image\",\n \"src\": \"/images/photo.webp\",\n \"originalSrc\": \"/images/photo-original.webp\",\n \"alt\": \"Detail of the project interface\"\n },\n {\n \"type\": \"video\",\n \"src\": \"/videos/walkthrough.mp4\",\n \"poster\": \"/images/poster.webp\",\n \"label\": \"Project walkthrough\",\n \"captions\": \"/videos/walkthrough.en.vtt\",\n \"captionLanguage\": \"en\"\n }\n ]\n }\n ]\n ]\n }\n]"
|
|
344
|
+
}
|
|
345
|
+
]
|
|
346
|
+
]
|
|
347
|
+
}
|
|
348
|
+
]
|
|
349
|
+
}
|
|
@@ -29,4 +29,4 @@ The guides now cover consent-gated tracking, statistics, advertising, and human-
|
|
|
29
29
|
|
|
30
30
|
edgepress server watches source files, rebuilds the site, refreshes the browser, and updates the accessibility and agent-friendliness report. edgepress check also captures desktop and mobile screenshots and writes tools/page-check.pdf with Markdown and JSON summaries.
|
|
31
31
|
|
|
32
|
-
The automated report checks generated markup and metadata. It does not establish legal compliance or replace manual keyboard, contrast, or assistive-technology review.
|
|
32
|
+
The automated report checks generated markup and metadata. It does not establish legal compliance or replace manual keyboard, contrast, or assistive-technology review.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: EdgePress October update 3
|
|
3
|
+
lang: en
|
|
4
|
+
date: 2026-10-03T10:00:00+08:00
|
|
5
|
+
slug: edgepress-release-2026-10-3
|
|
6
|
+
category: edgepress
|
|
7
|
+
pinned: true
|
|
8
|
+
description: Optional GitHub App comments, pinned article lists, local publication times and automatic article change history.
|
|
9
|
+
---
|
|
10
|
+
This update adds optional RepoRelay discussions. Readers choose whether to load GitHub comments; App credentials stay in the Worker. Repository installation and persistent signing keys are configured automatically.
|
|
11
|
+
|
|
12
|
+
Article lists support pinned entries. Publication timestamps follow the reader’s timezone. The latest article update is detected from content history, and authors can enable an actual content diff with `showChanges: true`; it is hidden by default.
|
|
13
|
+
|
|
14
|
+
Consent services follow the existing YAML configuration. Disabled integrations retain their settings without loading. UI icons now use licensed Lucide SVGs, and all content image sources live under `content/assets`.
|
|
15
|
+
|
|
16
|
+
See the README for Worker configuration and the required full Git checkout for article history.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: EdgePress 十月第 3 次更新
|
|
3
|
+
lang: zh-CN
|
|
4
|
+
date: 2026-10-03T10:00:00+08:00
|
|
5
|
+
slug: edgepress-release-2026-10-3
|
|
6
|
+
category: edgepress
|
|
7
|
+
pinned: true
|
|
8
|
+
description: 可选 GitHub App 评论、置顶文章、读者本地时间与自动内容变动记录。
|
|
9
|
+
---
|
|
10
|
+
本次更新接入可选的 RepoRelay 评论。读者选择后才加载 GitHub 评论,App 凭据保留在 Worker。仓库安装信息自动识别,签名密钥自动生成并持久保存。
|
|
11
|
+
|
|
12
|
+
文章列表支持置顶。发表时间按读者当前时区显示;最近更新时间根据内容历史自动识别。文章可通过 `showChanges: true` 开启最近一次实际内容变动的展示,默认隐藏,无需填写修正说明。
|
|
13
|
+
|
|
14
|
+
隐私服务读取现有 YAML 配置,禁用的集成保留设置而不加载。界面图标改用附带授权文件的 Lucide SVG,所有内容图像源统一存放于 `content/assets`。
|
|
15
|
+
|
|
16
|
+
Worker 配置与文章历史所需的完整 Git 检出方式见 README。
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "EdgePress 202610.4: discussions and publication time"
|
|
3
|
+
date: 2026-10-03
|
|
4
|
+
lang: en
|
|
5
|
+
category: edgepress
|
|
6
|
+
tags:
|
|
7
|
+
- EdgePress
|
|
8
|
+
- RepoRelay
|
|
9
|
+
description: Verified GitHub identity and avatars, a local image/GIF sticker
|
|
10
|
+
gallery, and deletion of your own comments. Discussions load only after you
|
|
11
|
+
opt in.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
Comment authors now show their GitHub avatars. A separate sticker panel offers 24 locally hosted images in two packs, and operators can add their own licensed GIF or image packs. Upload images remains a separate action.
|
|
15
|
+
|
|
16
|
+
After signing in, your own comments offer a delete action with confirmation. The Worker checks numeric identity, signed metadata and the actual discussion before deleting; this remains available when new comments are closed. Uploaded media and historical copies are not automatically removed.
|
|
17
|
+
|
|
18
|
+
EdgePress 202610.4 adds explicit comments blocks for pages and removes repeated articles across pinned and recent lists. Sites without comments enabled omit the area. Both JS.GRIPE and connect show it and keep loading behind your privacy choice.
|
|
19
|
+
|
|
20
|
+
Publication time is configured with `site.timeZone: Asia/Taipei`. Complete timestamps display in the reader’s zone, while date-only articles remain dates. No historical comment rewrite or author impersonation is required.
|
|
21
|
+
|
|
22
|
+
[Install and integrate with EdgePress](https://github.com/jsw-teams/RepoRelay/blob/main/docs/edgepress.md) · [Independent changelog](https://github.com/jsw-teams/RepoRelay/blob/main/CHANGELOG.md)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: EdgePress 202610.4:评论区与发表时区
|
|
3
|
+
date: 2026-10-03
|
|
4
|
+
lang: zh-CN
|
|
5
|
+
category: edgepress
|
|
6
|
+
tags:
|
|
7
|
+
- EdgePress
|
|
8
|
+
- RepoRelay
|
|
9
|
+
description: 显示经过验证的 GitHub 身份和头像,可从本地图片、GIF 图集中选择表情包,支持删除自己的评论。读者选中评论后才加载讨论。
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
评论显示发表用户的 GitHub 头像。新增独立表情包面板,内置两个本地图集、共 24 张图片,站长也可加入有使用权限的 GIF 或图片包。“上传图片”保留为单独操作。
|
|
13
|
+
|
|
14
|
+
登录后,本人评论提供删除按钮,确认后才删除。Worker 核验用户 ID、签名身份和实际讨论归属;关闭新评论后仍可删除自己的评论。删除不会自动清理已上传图片及历史副本。
|
|
15
|
+
|
|
16
|
+
EdgePress 202610.4 新增页面 comments 区块,修正同一页置顶文章与最新文章重复出现的问题。未启用评论的站点不显示评论区域;js.gripe 和 connect.js.gripe 明确显示,加载仍由读者的隐私选择控制。
|
|
17
|
+
|
|
18
|
+
文章发表时区在 config.yml 使用 `site.timeZone: Asia/Taipei` 配置。完整时间根据读者时区展示,只有年月日的文章保留日历日期。正式评论沿用原格式,不冒充原作者重新发表。
|
|
19
|
+
|
|
20
|
+
[安装及 EdgePress 接入](https://github.com/jsw-teams/RepoRelay/blob/main/docs/edgepress.md) · [独立更新日志](https://github.com/jsw-teams/RepoRelay/blob/main/CHANGELOG.md)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "EdgePress 2026.10.5: CommentNest integration and persistent choices"
|
|
3
|
+
lang: en
|
|
4
|
+
date: 2026-10-03
|
|
5
|
+
slug: edgepress-release-202610-5
|
|
6
|
+
category: edgepress
|
|
7
|
+
tags:
|
|
8
|
+
- EdgePress
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
EdgePress now connects to CommentNest · 评巢 using a configured backend URL. The independent project owns the complete comment widget, translations, styling, stickers and GitHub App backend. The framework keeps the consent gate and published article/page context.
|
|
12
|
+
|
|
13
|
+
Privacy choices survive refresh and navigation, including browsers where persistent local storage is unavailable. Cosmetic names and translations no longer reset saved choices. Changing services, endpoints or notice dates asks for a new choice.
|
|
14
|
+
|
|
15
|
+
[Install CommentNest and connect EdgePress](https://github.com/jsw-teams/CommentNest/blob/main/docs/edgepress.md).
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: EdgePress 2026.10.5:CommentNest 接入与偏好保存
|
|
3
|
+
lang: zh-CN
|
|
4
|
+
date: 2026-10-03
|
|
5
|
+
slug: edgepress-release-202610-5
|
|
6
|
+
category: edgepress
|
|
7
|
+
tags:
|
|
8
|
+
- EdgePress
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
EdgePress 通过配置的后端 URL 接入 CommentNest · 评巢。独立项目负责完整评论界面、翻译、样式、表情包和 GitHub App 后端;框架保留隐私选择和已发布文章、页面的信息。
|
|
12
|
+
|
|
13
|
+
偏好在刷新和导航后继续保留,本地持久存储受限时也有回退。名称、翻译和界面调整不再重置选择;服务、地址或告知日期变化时重新征求选择。
|
|
14
|
+
|
|
15
|
+
[安装 CommentNest 并接入 EdgePress](https://github.com/jsw-teams/CommentNest/blob/main/docs/edgepress.md)。
|
package/edgeone.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"buildCommand": "npm run build",
|
|
3
|
+
"installCommand": "npm ci",
|
|
4
|
+
"outputDirectory": "dist",
|
|
5
|
+
"nodeVersion": "22.16.0",
|
|
6
|
+
"headers": [
|
|
7
|
+
{
|
|
8
|
+
"source": "/*",
|
|
9
|
+
"headers": [
|
|
10
|
+
{
|
|
11
|
+
"key": "Cache-Control",
|
|
12
|
+
"value": "public, max-age=0, must-revalidate"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"key": "X-Content-Type-Options",
|
|
16
|
+
"value": "nosniff"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"key": "Referrer-Policy",
|
|
20
|
+
"value": "strict-origin-when-cross-origin"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"source": "/*.js",
|
|
26
|
+
"headers": [
|
|
27
|
+
{
|
|
28
|
+
"key": "Cache-Control",
|
|
29
|
+
"value": "public, max-age=31536000, immutable"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"source": "/*.css",
|
|
35
|
+
"headers": [
|
|
36
|
+
{
|
|
37
|
+
"key": "Cache-Control",
|
|
38
|
+
"value": "public, max-age=31536000, immutable"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
package/esa.jsonc
ADDED
package/languages/base/en.json
CHANGED
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
{
|
|
2
|
+
"dataSaverLoadFailed": "Required page resources could not load. Retry, or choose text view if available.",
|
|
3
|
+
"dataSaverRetry": "Retry loading",
|
|
4
|
+
"dataSaverProgressControls": "Page controls: {loaded} / {total} scripts completed",
|
|
5
|
+
"dataSaverLoadingNotice": "Full view is loading. You can switch to text view now to skip fonts and media.",
|
|
6
|
+
"dataSaverProgressStyles": "Page styles: {loaded} / {total} files completed",
|
|
7
|
+
"dataSaverProgressMedia": "First-screen images: {loaded} / {total} completed",
|
|
8
|
+
"serviceLoad": "Load this service",
|
|
9
|
+
"dataSaverLoading": "Preparing this page…",
|
|
10
|
+
"dataSaverTitle": "Data usage",
|
|
11
|
+
"dataSaverAuto": "Automatic",
|
|
12
|
+
"dataSaverText": "Text only",
|
|
13
|
+
"dataSaverFull": "Full view",
|
|
14
|
+
"dataSaverNotice": "Text mode pauses images, fonts, document previews and optional external services. Load individual media when needed, or switch to full view.",
|
|
15
|
+
"dataSaverLoad": "Load this media",
|
|
16
|
+
"dataSaverMissingDescription": "No text description was supplied for this media. Load it to see its contents.",
|
|
17
|
+
"dataSaverSlowTitle": "This page is taking a while",
|
|
18
|
+
"dataSaverSlowNotice": "Switch to a lighter text view without images or downloaded fonts, or keep waiting for the full page.",
|
|
19
|
+
"dataSaverSwitchText": "Use text view",
|
|
20
|
+
"dataSaverKeepFull": "Keep waiting",
|
|
21
|
+
"dataSaverReturnFull": "Show the full page",
|
|
22
|
+
"dataSaverTextNotice": "Text view · Images, fonts and previews load only when requested.",
|
|
23
|
+
"documentViewerPreview": "Preview document",
|
|
24
|
+
"documentViewerClose": "Close preview",
|
|
25
|
+
"documentViewerLoading": "Loading document…",
|
|
26
|
+
"documentViewerError": "Preview unavailable. Check the file, access and CORS settings.",
|
|
27
|
+
"documentViewerPage": "Page",
|
|
28
|
+
"documentViewerSheet": "Worksheet",
|
|
2
29
|
"home": "Home",
|
|
3
|
-
"archives": "
|
|
30
|
+
"archives": "Journal",
|
|
4
31
|
"noPosts": "No posts yet",
|
|
5
32
|
"newer": "Newer posts",
|
|
6
33
|
"older": "Older posts",
|
|
@@ -11,13 +38,13 @@
|
|
|
11
38
|
"forbidden": "Access denied",
|
|
12
39
|
"forbiddenText": "You do not have permission to access this page.",
|
|
13
40
|
"returnHome": "Return home",
|
|
14
|
-
"allPosts": "All
|
|
41
|
+
"allPosts": "All journal entries",
|
|
15
42
|
"searchPosts": "Search articles",
|
|
16
43
|
"searchIntro": "Search the Markdown articles published on this site. Search runs locally in your browser.",
|
|
17
44
|
"searchLabel": "Search articles",
|
|
18
45
|
"searchButton": "Search",
|
|
19
|
-
"searchHint": "
|
|
20
|
-
"searchPrompt": "
|
|
46
|
+
"searchHint": "",
|
|
47
|
+
"searchPrompt": "",
|
|
21
48
|
"searchNeedsJavaScript": "Article search needs JavaScript enabled. The search index stays on this site.",
|
|
22
49
|
"searchNoResults": "No matching articles.",
|
|
23
50
|
"searchResults": "Matching articles",
|
|
@@ -33,6 +60,7 @@
|
|
|
33
60
|
"languageLabel": "Language",
|
|
34
61
|
"skipToContent": "Skip to content",
|
|
35
62
|
"pagination": "Pagination",
|
|
63
|
+
"pageNumber": "Page {page}",
|
|
36
64
|
"pages": "Project pages",
|
|
37
65
|
"latestPosts": "Latest posts",
|
|
38
66
|
"postAuthor": "By {author}",
|
|
@@ -55,12 +83,49 @@
|
|
|
55
83
|
"servicePrivacyLink": "Open policy",
|
|
56
84
|
"reviewDetails": "Details",
|
|
57
85
|
"essentialStorage": "Choice saved on this device for up to {days} days.",
|
|
58
|
-
"pluginTracking": "Tracking",
|
|
59
|
-
"pluginStatistics": "Statistics",
|
|
60
|
-
"pluginAdvertising": "Advertising",
|
|
61
|
-
"pluginCaptcha": "Human verification",
|
|
62
86
|
"consentReload": "Your choice was saved. Reloading to apply the updated settings.",
|
|
63
|
-
"agentSummary": "
|
|
87
|
+
"agentSummary": "Technical practice, research, personal commentary, and project updates from JS.GRIPE.",
|
|
64
88
|
"closePrivacy": "Close settings",
|
|
65
|
-
"consentStoredOnDevice": "This device"
|
|
89
|
+
"consentStoredOnDevice": "This device",
|
|
90
|
+
"postStarter": "Write your first paragraph here. Use ## for sections, lists, links, and fenced code blocks as needed.",
|
|
91
|
+
"postCreated": "Created {file}",
|
|
92
|
+
"postNextSteps": "Open this file and replace the text after the closing --- with Markdown. The title, date, and language are already set.",
|
|
93
|
+
"postPreview": "Preview with npm run dev. Build with npm run build; publish through your existing deployment workflow.",
|
|
94
|
+
"postReadingTime": "About {minutes} min read",
|
|
95
|
+
"categoryBlog": "Blog",
|
|
96
|
+
"categoryUncategorized": "Uncategorized",
|
|
97
|
+
"allCategoryPosts": "All articles in this category",
|
|
98
|
+
"postPinned": "Pinned",
|
|
99
|
+
"postUpdated": "Updated",
|
|
100
|
+
"postChanges": "Most recent changes",
|
|
101
|
+
"loadMedia": "Load media",
|
|
102
|
+
"embedUnavailable": "Media is temporarily unavailable.",
|
|
103
|
+
"embedNeedsConsent": "This media is provided by {service}. It stays unloaded until you allow this service and request it.",
|
|
104
|
+
"embedReady": "You have allowed {service}. Media loads automatically when it comes into view.",
|
|
105
|
+
"embedLoading": "Loading media from {service}…",
|
|
106
|
+
"embedLoaded": "Media from {service} is loaded.",
|
|
107
|
+
"embedDisabled": "The site has disabled {service}. This media has not been loaded.",
|
|
108
|
+
"imageViewerOpenImage": "Enlarge image",
|
|
109
|
+
"imageViewerCloseImage": "Close image",
|
|
110
|
+
"imageViewerZoomIn": "Zoom in",
|
|
111
|
+
"imageViewerZoomOut": "Zoom out",
|
|
112
|
+
"imageViewerSaveOriginal": "Save original",
|
|
113
|
+
"imageViewerRetryMedia": "Retry loading",
|
|
114
|
+
"imageViewerLoading": "Loading…",
|
|
115
|
+
"imageViewerImageUnavailable": "This image is unavailable.",
|
|
116
|
+
"postChangeBefore": "Previously",
|
|
117
|
+
"postChangeAfter": "Now",
|
|
118
|
+
"postChangeAdded": "Added",
|
|
119
|
+
"postChangeRemoved": "Removed",
|
|
120
|
+
"demoPlay": "Play demo",
|
|
121
|
+
"demoPause": "Pause demo",
|
|
122
|
+
"demoReplay": "Replay demo",
|
|
123
|
+
"demoError": "The walkthrough could not load. Please try again.",
|
|
124
|
+
"demoResume": "Continue demo",
|
|
125
|
+
"demoLoading": "Loading demo…",
|
|
126
|
+
"demoSeek": "Demo progress",
|
|
127
|
+
"externalLinkTitle": "You're leaving this site",
|
|
128
|
+
"externalLinkDescription": "This link opens a different website, with its own content and privacy practices. Continue only if you want to visit it.",
|
|
129
|
+
"externalLinkBack": "Return",
|
|
130
|
+
"externalLinkContinue": "Continue to website"
|
|
66
131
|
}
|