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.
Files changed (485) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +216 -16
  3. package/config.yml +99 -127
  4. package/content/assets/edgepress/brand/avatar.png +0 -0
  5. package/content/assets/edgepress/brand/deploy-esa.svg +1 -0
  6. package/content/assets/edgepress/brand/home-hero-768.webp +0 -0
  7. package/content/assets/edgepress/brand/home-hero.png +0 -0
  8. package/content/assets/edgepress/brand/home-hero.webp +0 -0
  9. package/content/assets/edgepress/brand/mascot.png +0 -0
  10. package/content/assets/edgepress/brand/mascot.webp +0 -0
  11. package/content/assets/edgepress/brand/og-image.png +0 -0
  12. package/content/assets/edgepress/brand/og-image.webp +0 -0
  13. package/content/assets/edgepress/brand/sources/edgepress-avatar-master.png +0 -0
  14. package/content/assets/edgepress/brand/sources/export-manifest.json +181 -0
  15. package/content/assets/edgepress/brand/sources/prompts.json +12 -0
  16. package/content/assets/edgepress/favicon/apple-touch-icon.png +0 -0
  17. package/content/assets/edgepress/favicon/favicon-16.png +0 -0
  18. package/content/assets/edgepress/favicon/favicon-32.png +0 -0
  19. package/content/assets/edgepress/favicon/favicon-48.png +0 -0
  20. package/content/assets/edgepress/favicon/favicon-64.png +0 -0
  21. package/content/assets/edgepress/favicon/favicon.ico +0 -0
  22. package/content/assets/edgepress/icons/LICENSE.txt +43 -0
  23. package/content/assets/edgepress/icons/arrow-right.svg +16 -0
  24. package/content/assets/edgepress/icons/arrow-up-right.svg +16 -0
  25. package/content/assets/edgepress/icons/book-open.svg +16 -0
  26. package/content/assets/edgepress/icons/check-circle.svg +16 -0
  27. package/content/assets/edgepress/icons/check.svg +15 -0
  28. package/content/assets/edgepress/icons/cloud.svg +15 -0
  29. package/content/assets/edgepress/icons/code.svg +16 -0
  30. package/content/assets/edgepress/icons/cpu.svg +28 -0
  31. package/content/assets/edgepress/icons/file-text.svg +19 -0
  32. package/content/assets/edgepress/icons/github.svg +17 -0
  33. package/content/assets/edgepress/icons/globe.svg +17 -0
  34. package/content/assets/edgepress/icons/help-circle.svg +17 -0
  35. package/content/assets/edgepress/icons/home.svg +16 -0
  36. package/content/assets/edgepress/icons/layers.svg +17 -0
  37. package/content/assets/edgepress/icons/layout-grid.svg +18 -0
  38. package/content/assets/edgepress/icons/mail.svg +16 -0
  39. package/content/assets/edgepress/icons/newspaper.svg +18 -0
  40. package/content/assets/edgepress/icons/palette.svg +19 -0
  41. package/content/assets/edgepress/icons/plug.svg +18 -0
  42. package/content/assets/edgepress/icons/provenance.json +8 -0
  43. package/content/assets/edgepress/icons/puzzle.svg +15 -0
  44. package/content/assets/edgepress/icons/rocket.svg +18 -0
  45. package/content/assets/edgepress/icons/rss.svg +17 -0
  46. package/content/assets/edgepress/icons/search.svg +16 -0
  47. package/content/assets/edgepress/icons/settings.svg +16 -0
  48. package/content/assets/edgepress/icons/shield-check.svg +16 -0
  49. package/content/assets/edgepress/icons/sparkles.svg +18 -0
  50. package/content/assets/edgepress/icons/terminal.svg +16 -0
  51. package/content/assets/edgepress/icons/x.svg +16 -0
  52. package/{static → content/assets}/edgepress-markdown-guide.svg +1 -1
  53. package/content/assets/images/previews/edgepress-en.webp +0 -0
  54. package/content/assets/images/previews/edgepress-revisions-en.png +0 -0
  55. package/content/assets/images/previews/edgepress-workflow-en.90f4650b21013786.gif +0 -0
  56. package/content/assets/images/previews/edgepress-workflow-zh.41f1e0a685f47267.gif +0 -0
  57. package/content/assets/images/previews/edgepress-zh.webp +0 -0
  58. package/content/assets/images/previews/provenance.json +49 -0
  59. package/content/guides/markdown-media.md +38 -0
  60. package/content/guides/platforms.md +15 -0
  61. package/content/guides/product-demos.md +37 -0
  62. package/content/guides/zh-cn.md +62 -0
  63. package/content/pages/deployment/en.json +74 -0
  64. package/content/pages/deployment/zh-cn.json +74 -0
  65. package/content/pages/home/en.json +248 -0
  66. package/content/pages/home/zh-cn.json +248 -0
  67. package/content/pages/local-tools/en.json +14 -0
  68. package/content/pages/local-tools/zh-cn.json +14 -0
  69. package/content/pages/page-authoring/en.json +107 -0
  70. package/content/pages/page-authoring/zh-cn.json +107 -0
  71. package/content/pages/plugin-development/en.json +202 -0
  72. package/content/pages/plugin-development/zh-cn.json +202 -0
  73. package/content/pages/privacy-policy/en.json +171 -0
  74. package/content/pages/privacy-policy/zh-cn.json +171 -0
  75. package/content/pages/project-introduction/en.json +158 -0
  76. package/content/pages/project-introduction/zh-cn.json +158 -0
  77. package/content/pages/quick-start/en.json +325 -0
  78. package/content/pages/quick-start/zh-cn.json +325 -0
  79. package/content/pages/theme-development/en.json +353 -0
  80. package/content/pages/theme-development/zh-cn.json +349 -0
  81. package/content/posts/2026-09-24-edgepress-release-2026-9-1/en.md +1 -1
  82. package/content/posts/2026-09-24-edgepress-release-2026-9-1/zh-cn.md +1 -1
  83. package/content/posts/2026-10-03-edgepress-release-2026-10-3/en.md +16 -0
  84. package/content/posts/2026-10-03-edgepress-release-2026-10-3/zh-cn.md +16 -0
  85. package/content/posts/2026-10-03-edgepress-release-202610-4/en.md +22 -0
  86. package/content/posts/2026-10-03-edgepress-release-202610-4/zh-cn.md +20 -0
  87. package/content/posts/2026-10-03-edgepress-release-202610-5/en.md +15 -0
  88. package/content/posts/2026-10-03-edgepress-release-202610-5/zh-cn.md +15 -0
  89. package/edgeone.json +43 -0
  90. package/esa.jsonc +9 -0
  91. package/languages/base/en.json +75 -10
  92. package/languages/packs/zh-CN.json +74 -9
  93. package/netlify.toml +6 -0
  94. package/package.json +37 -6
  95. package/plugins/consent/index.js +10 -17
  96. package/project-compatibility.json +142 -25
  97. package/schemas/pages.schema.json +74 -0
  98. package/src/assets.js +146 -18
  99. package/src/browser-audit.js +158 -0
  100. package/src/build.js +34 -9
  101. package/src/cli.js +46 -41
  102. package/src/config.js +114 -63
  103. package/src/consent-csp.js +137 -0
  104. package/src/content.js +55 -30
  105. package/src/data-saver.js +194 -0
  106. package/src/deploy.js +28 -0
  107. package/src/document.js +44 -0
  108. package/src/embed.js +60 -0
  109. package/src/generators.js +101 -59
  110. package/src/i18n.js +19 -3
  111. package/src/icons.js +5 -4
  112. package/src/image-dimensions.js +17 -0
  113. package/src/local-tool.js +29 -0
  114. package/src/maintenance.js +25 -8
  115. package/src/markdown-fixture.js +20 -0
  116. package/src/markdown.js +80 -16
  117. package/src/media-assets.js +19 -0
  118. package/src/media-viewer.js +47 -0
  119. package/src/oembed.js +53 -0
  120. package/src/page-blocks.js +124 -54
  121. package/src/page-check.js +29 -39
  122. package/src/plugin-api.js +7 -1
  123. package/src/post-details.js +60 -0
  124. package/src/post-template.js +5 -0
  125. package/src/publication-time.js +47 -0
  126. package/src/report-path.js +19 -0
  127. package/src/report-visuals.js +91 -18
  128. package/src/revision-cards.js +30 -0
  129. package/src/revision-images.js +44 -0
  130. package/src/revisions.js +77 -0
  131. package/src/rss.js +100 -0
  132. package/src/service-block.js +18 -0
  133. package/src/theme.js +59 -9
  134. package/src/video-metadata.js +36 -0
  135. package/static/edgepress/data-saver.css +12 -0
  136. package/static/edgepress/data-saver.js +333 -0
  137. package/static/edgepress/document-viewer.js +35 -0
  138. package/static/edgepress/external-links-policy.js +14 -0
  139. package/static/edgepress/external-links.css +13 -0
  140. package/static/edgepress/external-links.js +120 -0
  141. package/static/edgepress/fonts/faces.css +2217 -0
  142. package/static/edgepress/fonts/noto-sans-OFL.txt +93 -0
  143. package/static/edgepress/fonts/noto-sans-cyrillic-ext-wght-normal.82ff72b28e6610f2.woff2 +0 -0
  144. package/static/edgepress/fonts/noto-sans-cyrillic-wght-normal.6ab64433de6077ca.woff2 +0 -0
  145. package/static/edgepress/fonts/noto-sans-devanagari-wght-normal.ea6a530b75d93de7.woff2 +0 -0
  146. package/static/edgepress/fonts/noto-sans-greek-ext-wght-normal.790b255c10c32e0b.woff2 +0 -0
  147. package/static/edgepress/fonts/noto-sans-greek-wght-normal.7f655207c2f6c140.woff2 +0 -0
  148. package/static/edgepress/fonts/noto-sans-latin-ext-wght-normal.6d5a79315528df19.woff2 +0 -0
  149. package/static/edgepress/fonts/noto-sans-latin-wght-normal.51ca196f49a33e79.woff2 +0 -0
  150. package/static/edgepress/fonts/noto-sans-sc-100-wght-normal.ad5f29028d5699a5.woff2 +0 -0
  151. package/static/edgepress/fonts/noto-sans-sc-101-wght-normal.e189b81fc22ca6af.woff2 +0 -0
  152. package/static/edgepress/fonts/noto-sans-sc-102-wght-normal.941c0c2971fc1d6d.woff2 +0 -0
  153. package/static/edgepress/fonts/noto-sans-sc-103-wght-normal.bafbd591af6493ff.woff2 +0 -0
  154. package/static/edgepress/fonts/noto-sans-sc-104-wght-normal.b0bf80ced89dd61b.woff2 +0 -0
  155. package/static/edgepress/fonts/noto-sans-sc-105-wght-normal.8d8b4e6f4a00621d.woff2 +0 -0
  156. package/static/edgepress/fonts/noto-sans-sc-106-wght-normal.bae74acc629d2e74.woff2 +0 -0
  157. package/static/edgepress/fonts/noto-sans-sc-107-wght-normal.a42eff5010de7b0d.woff2 +0 -0
  158. package/static/edgepress/fonts/noto-sans-sc-108-wght-normal.91882203459867be.woff2 +0 -0
  159. package/static/edgepress/fonts/noto-sans-sc-109-wght-normal.a91f8b038e5ce108.woff2 +0 -0
  160. package/static/edgepress/fonts/noto-sans-sc-110-wght-normal.bbca9081655c4523.woff2 +0 -0
  161. package/static/edgepress/fonts/noto-sans-sc-111-wght-normal.372be010ac0e87cb.woff2 +0 -0
  162. package/static/edgepress/fonts/noto-sans-sc-112-wght-normal.34a4580239eae8dc.woff2 +0 -0
  163. package/static/edgepress/fonts/noto-sans-sc-113-wght-normal.614ab8f616352583.woff2 +0 -0
  164. package/static/edgepress/fonts/noto-sans-sc-114-wght-normal.cf7b8344807a316e.woff2 +0 -0
  165. package/static/edgepress/fonts/noto-sans-sc-115-wght-normal.fb29957c7adccb9a.woff2 +0 -0
  166. package/static/edgepress/fonts/noto-sans-sc-116-wght-normal.a98dc5a726f82141.woff2 +0 -0
  167. package/static/edgepress/fonts/noto-sans-sc-117-wght-normal.d94b5af0c14838af.woff2 +0 -0
  168. package/static/edgepress/fonts/noto-sans-sc-118-wght-normal.76c9ddb85ae4578c.woff2 +0 -0
  169. package/static/edgepress/fonts/noto-sans-sc-119-wght-normal.b3b2374881f4cd93.woff2 +0 -0
  170. package/static/edgepress/fonts/noto-sans-sc-21-wght-normal.c1409c43e55ecff2.woff2 +0 -0
  171. package/static/edgepress/fonts/noto-sans-sc-22-wght-normal.77037ed42ff4e7b0.woff2 +0 -0
  172. package/static/edgepress/fonts/noto-sans-sc-23-wght-normal.38d0df21ac374e93.woff2 +0 -0
  173. package/static/edgepress/fonts/noto-sans-sc-24-wght-normal.8fa21e7e457acf3e.woff2 +0 -0
  174. package/static/edgepress/fonts/noto-sans-sc-25-wght-normal.f760b7a3871d214d.woff2 +0 -0
  175. package/static/edgepress/fonts/noto-sans-sc-26-wght-normal.be8386e7bd7facfe.woff2 +0 -0
  176. package/static/edgepress/fonts/noto-sans-sc-27-wght-normal.4895abcaddbd162e.woff2 +0 -0
  177. package/static/edgepress/fonts/noto-sans-sc-28-wght-normal.82540b6201a9b9ad.woff2 +0 -0
  178. package/static/edgepress/fonts/noto-sans-sc-29-wght-normal.ff21d8fcc60ce391.woff2 +0 -0
  179. package/static/edgepress/fonts/noto-sans-sc-30-wght-normal.1f76f6ffded00b9e.woff2 +0 -0
  180. package/static/edgepress/fonts/noto-sans-sc-31-wght-normal.e6c25be1bb08a63a.woff2 +0 -0
  181. package/static/edgepress/fonts/noto-sans-sc-32-wght-normal.0cda750d7d04a4e1.woff2 +0 -0
  182. package/static/edgepress/fonts/noto-sans-sc-33-wght-normal.b9732b5606bd87c5.woff2 +0 -0
  183. package/static/edgepress/fonts/noto-sans-sc-34-wght-normal.38aa326b4c84902a.woff2 +0 -0
  184. package/static/edgepress/fonts/noto-sans-sc-35-wght-normal.bd98226c8e0aa808.woff2 +0 -0
  185. package/static/edgepress/fonts/noto-sans-sc-36-wght-normal.0db1ca695a491d37.woff2 +0 -0
  186. package/static/edgepress/fonts/noto-sans-sc-37-wght-normal.8df409a4e0a237c2.woff2 +0 -0
  187. package/static/edgepress/fonts/noto-sans-sc-38-wght-normal.672d2d994994a3c3.woff2 +0 -0
  188. package/static/edgepress/fonts/noto-sans-sc-39-wght-normal.272d6d0e153f56e8.woff2 +0 -0
  189. package/static/edgepress/fonts/noto-sans-sc-4-wght-normal.9fafd93ac77b81ff.woff2 +0 -0
  190. package/static/edgepress/fonts/noto-sans-sc-40-wght-normal.5b9ef1ed48420aa7.woff2 +0 -0
  191. package/static/edgepress/fonts/noto-sans-sc-41-wght-normal.30aee47f660fd88a.woff2 +0 -0
  192. package/static/edgepress/fonts/noto-sans-sc-42-wght-normal.ec0014830db682b6.woff2 +0 -0
  193. package/static/edgepress/fonts/noto-sans-sc-43-wght-normal.43df2b5dad9bb835.woff2 +0 -0
  194. package/static/edgepress/fonts/noto-sans-sc-44-wght-normal.acaa6195041b1a92.woff2 +0 -0
  195. package/static/edgepress/fonts/noto-sans-sc-45-wght-normal.8cdb9903f770db21.woff2 +0 -0
  196. package/static/edgepress/fonts/noto-sans-sc-46-wght-normal.6590d0a6fe94571c.woff2 +0 -0
  197. package/static/edgepress/fonts/noto-sans-sc-47-wght-normal.b05afdd32b3bf722.woff2 +0 -0
  198. package/static/edgepress/fonts/noto-sans-sc-48-wght-normal.c9585f7d070700be.woff2 +0 -0
  199. package/static/edgepress/fonts/noto-sans-sc-49-wght-normal.4943895a4dfa5dcf.woff2 +0 -0
  200. package/static/edgepress/fonts/noto-sans-sc-5-wght-normal.e64f57937e3ae4fe.woff2 +0 -0
  201. package/static/edgepress/fonts/noto-sans-sc-50-wght-normal.13e51063d7743cfe.woff2 +0 -0
  202. package/static/edgepress/fonts/noto-sans-sc-51-wght-normal.fd4df1f02c2cb4d7.woff2 +0 -0
  203. package/static/edgepress/fonts/noto-sans-sc-52-wght-normal.06999a39c4c3a7ea.woff2 +0 -0
  204. package/static/edgepress/fonts/noto-sans-sc-53-wght-normal.767b7b9864658d91.woff2 +0 -0
  205. package/static/edgepress/fonts/noto-sans-sc-54-wght-normal.4cd00537a46f6f1a.woff2 +0 -0
  206. package/static/edgepress/fonts/noto-sans-sc-55-wght-normal.0118ec5d8c30b197.woff2 +0 -0
  207. package/static/edgepress/fonts/noto-sans-sc-56-wght-normal.a3e4a78929826930.woff2 +0 -0
  208. package/static/edgepress/fonts/noto-sans-sc-57-wght-normal.7623501009e4a6db.woff2 +0 -0
  209. package/static/edgepress/fonts/noto-sans-sc-58-wght-normal.56ae1a59a32e4a25.woff2 +0 -0
  210. package/static/edgepress/fonts/noto-sans-sc-59-wght-normal.7a377a40e99fd9bc.woff2 +0 -0
  211. package/static/edgepress/fonts/noto-sans-sc-6-wght-normal.17e15c4f0a5bfd92.woff2 +0 -0
  212. package/static/edgepress/fonts/noto-sans-sc-60-wght-normal.3657f66babdf6aff.woff2 +0 -0
  213. package/static/edgepress/fonts/noto-sans-sc-61-wght-normal.23919a2eb11d25dd.woff2 +0 -0
  214. package/static/edgepress/fonts/noto-sans-sc-62-wght-normal.a901edf25bc1cfae.woff2 +0 -0
  215. package/static/edgepress/fonts/noto-sans-sc-63-wght-normal.92f56f713cc0b62f.woff2 +0 -0
  216. package/static/edgepress/fonts/noto-sans-sc-64-wght-normal.4929c9f39a5a4bd9.woff2 +0 -0
  217. package/static/edgepress/fonts/noto-sans-sc-65-wght-normal.8daa61282fb62a11.woff2 +0 -0
  218. package/static/edgepress/fonts/noto-sans-sc-66-wght-normal.6479166925eb462b.woff2 +0 -0
  219. package/static/edgepress/fonts/noto-sans-sc-67-wght-normal.a6b0e11c4c761ffd.woff2 +0 -0
  220. package/static/edgepress/fonts/noto-sans-sc-68-wght-normal.65b77f1fe9d68dae.woff2 +0 -0
  221. package/static/edgepress/fonts/noto-sans-sc-69-wght-normal.b34f765cbbf4d02e.woff2 +0 -0
  222. package/static/edgepress/fonts/noto-sans-sc-70-wght-normal.a99d55c00e4f95b7.woff2 +0 -0
  223. package/static/edgepress/fonts/noto-sans-sc-71-wght-normal.3298bed30dc8d233.woff2 +0 -0
  224. package/static/edgepress/fonts/noto-sans-sc-72-wght-normal.6597209ca9707726.woff2 +0 -0
  225. package/static/edgepress/fonts/noto-sans-sc-73-wght-normal.e7ac1d4930eabd78.woff2 +0 -0
  226. package/static/edgepress/fonts/noto-sans-sc-74-wght-normal.1f0287be83a28e7a.woff2 +0 -0
  227. package/static/edgepress/fonts/noto-sans-sc-75-wght-normal.d9a4bb7bcc2be578.woff2 +0 -0
  228. package/static/edgepress/fonts/noto-sans-sc-76-wght-normal.5a019946bcadcec6.woff2 +0 -0
  229. package/static/edgepress/fonts/noto-sans-sc-77-wght-normal.7c445e85d04f5319.woff2 +0 -0
  230. package/static/edgepress/fonts/noto-sans-sc-78-wght-normal.7d4afb70f641781c.woff2 +0 -0
  231. package/static/edgepress/fonts/noto-sans-sc-79-wght-normal.5798753a721bb4ec.woff2 +0 -0
  232. package/static/edgepress/fonts/noto-sans-sc-80-wght-normal.db887159ca6e46f3.woff2 +0 -0
  233. package/static/edgepress/fonts/noto-sans-sc-81-wght-normal.71e5743bbd225b3d.woff2 +0 -0
  234. package/static/edgepress/fonts/noto-sans-sc-82-wght-normal.8c5094c3785fd04f.woff2 +0 -0
  235. package/static/edgepress/fonts/noto-sans-sc-83-wght-normal.4a60a1ccba905284.woff2 +0 -0
  236. package/static/edgepress/fonts/noto-sans-sc-84-wght-normal.3ed54e59ef4758e3.woff2 +0 -0
  237. package/static/edgepress/fonts/noto-sans-sc-85-wght-normal.e87e0a1342e1778c.woff2 +0 -0
  238. package/static/edgepress/fonts/noto-sans-sc-86-wght-normal.6d3ac3e20959dbcb.woff2 +0 -0
  239. package/static/edgepress/fonts/noto-sans-sc-87-wght-normal.0eeffd5daad5c17b.woff2 +0 -0
  240. package/static/edgepress/fonts/noto-sans-sc-88-wght-normal.b1d9582dfa268463.woff2 +0 -0
  241. package/static/edgepress/fonts/noto-sans-sc-89-wght-normal.8b437aeb9e9fcb5a.woff2 +0 -0
  242. package/static/edgepress/fonts/noto-sans-sc-90-wght-normal.83b0a59e0a5e045a.woff2 +0 -0
  243. package/static/edgepress/fonts/noto-sans-sc-91-wght-normal.382f72b98d4bb9d7.woff2 +0 -0
  244. package/static/edgepress/fonts/noto-sans-sc-97-wght-normal.5e52856457c5cdab.woff2 +0 -0
  245. package/static/edgepress/fonts/noto-sans-sc-98-wght-normal.ffded4e7fd560d93.woff2 +0 -0
  246. package/static/edgepress/fonts/noto-sans-sc-99-wght-normal.54e302c23f11a8fd.woff2 +0 -0
  247. package/static/edgepress/fonts/noto-sans-sc-OFL.txt +93 -0
  248. package/static/edgepress/fonts/noto-sans-sc-cyrillic-wght-normal.5932d441e7126669.woff2 +0 -0
  249. package/static/edgepress/fonts/noto-sans-sc-latin-ext-wght-normal.e316201f3fc493d1.woff2 +0 -0
  250. package/static/edgepress/fonts/noto-sans-sc-latin-wght-normal.c1d919c8701a86ed.woff2 +0 -0
  251. package/static/edgepress/fonts/noto-sans-sc-vietnamese-wght-normal.cba3d00c8db989f0.woff2 +0 -0
  252. package/static/edgepress/fonts/noto-sans-tc-0-wght-normal.63c21eda5d20203f.woff2 +0 -0
  253. package/static/edgepress/fonts/noto-sans-tc-100-wght-normal.87a7c76301c24a28.woff2 +0 -0
  254. package/static/edgepress/fonts/noto-sans-tc-101-wght-normal.c9e83fc4ffd53746.woff2 +0 -0
  255. package/static/edgepress/fonts/noto-sans-tc-102-wght-normal.9a00ae0e5735852b.woff2 +0 -0
  256. package/static/edgepress/fonts/noto-sans-tc-103-wght-normal.7cfe93b3221f4def.woff2 +0 -0
  257. package/static/edgepress/fonts/noto-sans-tc-104-wght-normal.2d5ac7497d84cb99.woff2 +0 -0
  258. package/static/edgepress/fonts/noto-sans-tc-105-wght-normal.0989885bb16bcd9b.woff2 +0 -0
  259. package/static/edgepress/fonts/noto-sans-tc-106-wght-normal.1faa921b035064e7.woff2 +0 -0
  260. package/static/edgepress/fonts/noto-sans-tc-107-wght-normal.2f6006745ae16d69.woff2 +0 -0
  261. package/static/edgepress/fonts/noto-sans-tc-108-wght-normal.a61e48c10a2cf4b9.woff2 +0 -0
  262. package/static/edgepress/fonts/noto-sans-tc-109-wght-normal.f28c767724736d2d.woff2 +0 -0
  263. package/static/edgepress/fonts/noto-sans-tc-110-wght-normal.4b04bd88c3dc7c5d.woff2 +0 -0
  264. package/static/edgepress/fonts/noto-sans-tc-111-wght-normal.b6251e1967932a52.woff2 +0 -0
  265. package/static/edgepress/fonts/noto-sans-tc-112-wght-normal.e264513b32f90660.woff2 +0 -0
  266. package/static/edgepress/fonts/noto-sans-tc-113-wght-normal.46cb347d88f3338e.woff2 +0 -0
  267. package/static/edgepress/fonts/noto-sans-tc-114-wght-normal.9f9e1e0d0ab2aeb4.woff2 +0 -0
  268. package/static/edgepress/fonts/noto-sans-tc-115-wght-normal.653dd2ab7d551b40.woff2 +0 -0
  269. package/static/edgepress/fonts/noto-sans-tc-116-wght-normal.4718bf3627191297.woff2 +0 -0
  270. package/static/edgepress/fonts/noto-sans-tc-117-wght-normal.b241a9409682af5f.woff2 +0 -0
  271. package/static/edgepress/fonts/noto-sans-tc-118-wght-normal.fda2800dc1c06852.woff2 +0 -0
  272. package/static/edgepress/fonts/noto-sans-tc-119-wght-normal.948af36bd63a72c7.woff2 +0 -0
  273. package/static/edgepress/fonts/noto-sans-tc-19-wght-normal.62191cdc3a10e60a.woff2 +0 -0
  274. package/static/edgepress/fonts/noto-sans-tc-20-wght-normal.65c90892c2e01657.woff2 +0 -0
  275. package/static/edgepress/fonts/noto-sans-tc-21-wght-normal.d3f59b094c334866.woff2 +0 -0
  276. package/static/edgepress/fonts/noto-sans-tc-22-wght-normal.b1983a041d7e4e1f.woff2 +0 -0
  277. package/static/edgepress/fonts/noto-sans-tc-23-wght-normal.16e2163b66c7732a.woff2 +0 -0
  278. package/static/edgepress/fonts/noto-sans-tc-24-wght-normal.72c8561976116537.woff2 +0 -0
  279. package/static/edgepress/fonts/noto-sans-tc-25-wght-normal.b2948d928ce4dd54.woff2 +0 -0
  280. package/static/edgepress/fonts/noto-sans-tc-26-wght-normal.d583236b90abedc9.woff2 +0 -0
  281. package/static/edgepress/fonts/noto-sans-tc-27-wght-normal.7d6073ba07597c9b.woff2 +0 -0
  282. package/static/edgepress/fonts/noto-sans-tc-28-wght-normal.517204d716b089cd.woff2 +0 -0
  283. package/static/edgepress/fonts/noto-sans-tc-29-wght-normal.10189a8f8ca38099.woff2 +0 -0
  284. package/static/edgepress/fonts/noto-sans-tc-30-wght-normal.695a71d72dfab3f7.woff2 +0 -0
  285. package/static/edgepress/fonts/noto-sans-tc-31-wght-normal.868d59473ef0e73c.woff2 +0 -0
  286. package/static/edgepress/fonts/noto-sans-tc-32-wght-normal.92efa2d4b3702ec0.woff2 +0 -0
  287. package/static/edgepress/fonts/noto-sans-tc-33-wght-normal.d2274bcd5636197d.woff2 +0 -0
  288. package/static/edgepress/fonts/noto-sans-tc-34-wght-normal.1ac8c3718ee2eed2.woff2 +0 -0
  289. package/static/edgepress/fonts/noto-sans-tc-35-wght-normal.00b3df730d5a4c73.woff2 +0 -0
  290. package/static/edgepress/fonts/noto-sans-tc-36-wght-normal.6963feb6c628b81f.woff2 +0 -0
  291. package/static/edgepress/fonts/noto-sans-tc-37-wght-normal.a1b4bd294af24cd1.woff2 +0 -0
  292. package/static/edgepress/fonts/noto-sans-tc-38-wght-normal.8edb2f7f2955921b.woff2 +0 -0
  293. package/static/edgepress/fonts/noto-sans-tc-39-wght-normal.37bf7394eb3148c6.woff2 +0 -0
  294. package/static/edgepress/fonts/noto-sans-tc-40-wght-normal.3efa655bc48f9133.woff2 +0 -0
  295. package/static/edgepress/fonts/noto-sans-tc-41-wght-normal.48d47014544ebd5d.woff2 +0 -0
  296. package/static/edgepress/fonts/noto-sans-tc-42-wght-normal.214c733a59d423e7.woff2 +0 -0
  297. package/static/edgepress/fonts/noto-sans-tc-43-wght-normal.c2c9876f138bb20f.woff2 +0 -0
  298. package/static/edgepress/fonts/noto-sans-tc-44-wght-normal.28928bfea29db06a.woff2 +0 -0
  299. package/static/edgepress/fonts/noto-sans-tc-45-wght-normal.bf3743f8155fa9d2.woff2 +0 -0
  300. package/static/edgepress/fonts/noto-sans-tc-46-wght-normal.06970903593781c3.woff2 +0 -0
  301. package/static/edgepress/fonts/noto-sans-tc-47-wght-normal.8932ed83a91794d4.woff2 +0 -0
  302. package/static/edgepress/fonts/noto-sans-tc-48-wght-normal.dfd9225628bcf234.woff2 +0 -0
  303. package/static/edgepress/fonts/noto-sans-tc-49-wght-normal.c27d341ad39d44eb.woff2 +0 -0
  304. package/static/edgepress/fonts/noto-sans-tc-50-wght-normal.01a0f4e7dfba0a56.woff2 +0 -0
  305. package/static/edgepress/fonts/noto-sans-tc-51-wght-normal.5a30022af3d30e0f.woff2 +0 -0
  306. package/static/edgepress/fonts/noto-sans-tc-52-wght-normal.4884f032342a3274.woff2 +0 -0
  307. package/static/edgepress/fonts/noto-sans-tc-53-wght-normal.537adcae44511270.woff2 +0 -0
  308. package/static/edgepress/fonts/noto-sans-tc-54-wght-normal.6bc8c7d3e47c6fde.woff2 +0 -0
  309. package/static/edgepress/fonts/noto-sans-tc-55-wght-normal.725a48711f1e1997.woff2 +0 -0
  310. package/static/edgepress/fonts/noto-sans-tc-56-wght-normal.f43ecaa73e0cd8fc.woff2 +0 -0
  311. package/static/edgepress/fonts/noto-sans-tc-57-wght-normal.15b24e9d42a3270f.woff2 +0 -0
  312. package/static/edgepress/fonts/noto-sans-tc-58-wght-normal.9b2d8a71667d3da6.woff2 +0 -0
  313. package/static/edgepress/fonts/noto-sans-tc-59-wght-normal.a68535a6b3289d89.woff2 +0 -0
  314. package/static/edgepress/fonts/noto-sans-tc-6-wght-normal.32cece1ae80c4f2b.woff2 +0 -0
  315. package/static/edgepress/fonts/noto-sans-tc-60-wght-normal.3b2c56a921d1cad4.woff2 +0 -0
  316. package/static/edgepress/fonts/noto-sans-tc-61-wght-normal.54f51f80a0740878.woff2 +0 -0
  317. package/static/edgepress/fonts/noto-sans-tc-62-wght-normal.ba029c5bb6c07bf1.woff2 +0 -0
  318. package/static/edgepress/fonts/noto-sans-tc-63-wght-normal.380919beec4c7f3d.woff2 +0 -0
  319. package/static/edgepress/fonts/noto-sans-tc-64-wght-normal.f96fe0be479d201f.woff2 +0 -0
  320. package/static/edgepress/fonts/noto-sans-tc-65-wght-normal.7d544b80701fe678.woff2 +0 -0
  321. package/static/edgepress/fonts/noto-sans-tc-66-wght-normal.fab669c07a1e3bee.woff2 +0 -0
  322. package/static/edgepress/fonts/noto-sans-tc-67-wght-normal.0001bb744743fdfa.woff2 +0 -0
  323. package/static/edgepress/fonts/noto-sans-tc-68-wght-normal.1a57eda03886b43c.woff2 +0 -0
  324. package/static/edgepress/fonts/noto-sans-tc-69-wght-normal.017fecc749bcd6d5.woff2 +0 -0
  325. package/static/edgepress/fonts/noto-sans-tc-7-wght-normal.cd0f0cac743dbbfe.woff2 +0 -0
  326. package/static/edgepress/fonts/noto-sans-tc-70-wght-normal.79fb9d70b9534ec7.woff2 +0 -0
  327. package/static/edgepress/fonts/noto-sans-tc-71-wght-normal.04a6ea581b5f1195.woff2 +0 -0
  328. package/static/edgepress/fonts/noto-sans-tc-72-wght-normal.d3a4eb35499157b7.woff2 +0 -0
  329. package/static/edgepress/fonts/noto-sans-tc-73-wght-normal.d81f8484404ee465.woff2 +0 -0
  330. package/static/edgepress/fonts/noto-sans-tc-74-wght-normal.4a5da9e0c2702f7d.woff2 +0 -0
  331. package/static/edgepress/fonts/noto-sans-tc-75-wght-normal.8b87f9c6c164513a.woff2 +0 -0
  332. package/static/edgepress/fonts/noto-sans-tc-76-wght-normal.a71463dbfd9fa7b5.woff2 +0 -0
  333. package/static/edgepress/fonts/noto-sans-tc-77-wght-normal.d094414ea752cd52.woff2 +0 -0
  334. package/static/edgepress/fonts/noto-sans-tc-78-wght-normal.04f7c97bd9cbc73b.woff2 +0 -0
  335. package/static/edgepress/fonts/noto-sans-tc-79-wght-normal.1ed089d037a02049.woff2 +0 -0
  336. package/static/edgepress/fonts/noto-sans-tc-8-wght-normal.d052677dfb5db5bd.woff2 +0 -0
  337. package/static/edgepress/fonts/noto-sans-tc-80-wght-normal.6d41ca59cfd50442.woff2 +0 -0
  338. package/static/edgepress/fonts/noto-sans-tc-81-wght-normal.f09bd0afa8a58114.woff2 +0 -0
  339. package/static/edgepress/fonts/noto-sans-tc-82-wght-normal.7920841c526b1b02.woff2 +0 -0
  340. package/static/edgepress/fonts/noto-sans-tc-83-wght-normal.0c6f7f82db8da0d8.woff2 +0 -0
  341. package/static/edgepress/fonts/noto-sans-tc-84-wght-normal.f37c0a853b31265e.woff2 +0 -0
  342. package/static/edgepress/fonts/noto-sans-tc-85-wght-normal.4173bff087653b82.woff2 +0 -0
  343. package/static/edgepress/fonts/noto-sans-tc-86-wght-normal.dac35605ebec15c4.woff2 +0 -0
  344. package/static/edgepress/fonts/noto-sans-tc-87-wght-normal.8ac85fdd0b15a6bd.woff2 +0 -0
  345. package/static/edgepress/fonts/noto-sans-tc-88-wght-normal.61625b0b21e8407f.woff2 +0 -0
  346. package/static/edgepress/fonts/noto-sans-tc-89-wght-normal.a1da3dccbf00698e.woff2 +0 -0
  347. package/static/edgepress/fonts/noto-sans-tc-90-wght-normal.bf08f0355222a782.woff2 +0 -0
  348. package/static/edgepress/fonts/noto-sans-tc-91-wght-normal.2ecf295bba2bfaa3.woff2 +0 -0
  349. package/static/edgepress/fonts/noto-sans-tc-92-wght-normal.36508326bb68115f.woff2 +0 -0
  350. package/static/edgepress/fonts/noto-sans-tc-97-wght-normal.c712899e0fc9e947.woff2 +0 -0
  351. package/static/edgepress/fonts/noto-sans-tc-98-wght-normal.13a648e521d18d7f.woff2 +0 -0
  352. package/static/edgepress/fonts/noto-sans-tc-99-wght-normal.7f8c9a777e64159a.woff2 +0 -0
  353. package/static/edgepress/fonts/noto-sans-tc-OFL.txt +93 -0
  354. package/static/edgepress/fonts/noto-sans-tc-cyrillic-wght-normal.dd0980ced8e46cb3.woff2 +0 -0
  355. package/static/edgepress/fonts/noto-sans-tc-latin-ext-wght-normal.817d96335dc52ce6.woff2 +0 -0
  356. package/static/edgepress/fonts/noto-sans-tc-latin-wght-normal.50cb5fb0a522cfaf.woff2 +0 -0
  357. package/static/edgepress/fonts/noto-sans-tc-vietnamese-wght-normal.2a77fb7b70fa304d.woff2 +0 -0
  358. package/static/edgepress/fonts/noto-sans-vietnamese-wght-normal.791e3f213c155a5b.woff2 +0 -0
  359. package/static/edgepress/fonts/noto-serif-OFL.txt +93 -0
  360. package/static/edgepress/fonts/noto-serif-cyrillic-ext-wght-normal.7c7afb20d33e30ec.woff2 +0 -0
  361. package/static/edgepress/fonts/noto-serif-cyrillic-wght-normal.54e3bd0c4a002b0f.woff2 +0 -0
  362. package/static/edgepress/fonts/noto-serif-greek-ext-wght-normal.9b3f4c4ff3adefd2.woff2 +0 -0
  363. package/static/edgepress/fonts/noto-serif-greek-wght-normal.1252037b6f1d6e86.woff2 +0 -0
  364. package/static/edgepress/fonts/noto-serif-latin-ext-wght-normal.2654f8d1261a420f.woff2 +0 -0
  365. package/static/edgepress/fonts/noto-serif-latin-wght-normal.46281456234014ce.woff2 +0 -0
  366. package/static/edgepress/fonts/noto-serif-math-wght-normal.d4a6aba2cb4636b3.woff2 +0 -0
  367. package/static/edgepress/fonts/noto-serif-vietnamese-wght-normal.fb6a5ed734c2fbe3.woff2 +0 -0
  368. package/static/edgepress/fonts/provenance.json +1356 -0
  369. package/static/edgepress/fonts.css +14 -0
  370. package/static/edgepress/image-viewer.js +23 -0
  371. package/static/edgepress/images.css +4 -0
  372. package/static/edgepress/link-directory.css +14 -0
  373. package/static/edgepress/local-time.js +12 -0
  374. package/static/edgepress/media-viewer.css +1 -0
  375. package/static/edgepress/media-viewer.js +111 -0
  376. package/static/edgepress/navigation-select.js +14 -0
  377. package/static/edgepress/oembed.js +129 -0
  378. package/static/edgepress/plugins/backend/external-api.js +4 -0
  379. package/static/edgepress/plugins/backend/external-widget.js +13 -0
  380. package/static/edgepress/plugins/consent/choices.js +47 -0
  381. package/static/edgepress/plugins/consent/manager.js +56 -74
  382. package/static/edgepress/project-demo.js +93 -0
  383. package/static/edgepress/search.js +2 -2
  384. package/static/edgepress/services-consent.js +3 -0
  385. package/static/edgepress/services.js +15 -0
  386. package/static/edgepress/webmcp.js +86 -0
  387. package/tests/assets-runtime.test.mjs +91 -0
  388. package/tests/audit.test.mjs +142 -0
  389. package/tests/brand-regression.test.mjs +110 -0
  390. package/tests/consent-browser.test.mjs +132 -0
  391. package/tests/consent-config.test.mjs +85 -0
  392. package/tests/consent-csp.test.mjs +90 -0
  393. package/tests/data-saver-loading.test.mjs +158 -0
  394. package/tests/data-saver-network.test.mjs +99 -0
  395. package/tests/data-saver.test.mjs +294 -0
  396. package/tests/document-package.test.mjs +28 -0
  397. package/tests/document-viewer.test.mjs +152 -0
  398. package/tests/edge-issues.test.mjs +65 -0
  399. package/tests/embed-syntax.test.mjs +68 -0
  400. package/tests/external-links.test.mjs +198 -0
  401. package/tests/fixtures/recording.mp4 +0 -0
  402. package/tests/fonts.test.mjs +99 -0
  403. package/tests/image-dimensions.test.mjs +15 -0
  404. package/tests/image-viewer.test.mjs +36 -0
  405. package/tests/json-pages.test.mjs +66 -0
  406. package/tests/link-directory.test.mjs +51 -0
  407. package/tests/local-tool.test.mjs +34 -0
  408. package/tests/markdown-media.test.mjs +119 -0
  409. package/tests/media-block.test.mjs +102 -0
  410. package/tests/navigation.test.mjs +87 -0
  411. package/tests/oembed-layout.test.mjs +98 -0
  412. package/tests/oembed.test.mjs +96 -0
  413. package/tests/page-authoring.test.mjs +27 -0
  414. package/tests/page-formatting.test.mjs +37 -0
  415. package/tests/post-list.test.mjs +96 -0
  416. package/tests/project-demo.test.mjs +73 -0
  417. package/tests/publication-time.test.mjs +43 -0
  418. package/tests/release-version.test.mjs +28 -0
  419. package/tests/revisions.test.mjs +93 -0
  420. package/tests/rss.test.mjs +54 -0
  421. package/tests/services.test.mjs +35 -0
  422. package/tests/theme-layout.test.mjs +95 -0
  423. package/tests/video-metadata.test.mjs +28 -0
  424. package/tests/webmcp.test.mjs +121 -0
  425. package/tests/writing.test.mjs +101 -0
  426. package/themes/atelier/assets/style.css +144 -22
  427. package/themes/atelier/layouts/partials/head.html +8 -1
  428. package/themes/atelier/layouts/partials/header.html +3 -1
  429. package/themes/default/assets/data-saver-theme.css +2 -0
  430. package/themes/default/assets/style.css +139 -23
  431. package/themes/default/layouts/partials/head.html +9 -2
  432. package/themes/default/layouts/partials/header.html +3 -1
  433. package/themes/default/theme.json +1 -0
  434. package/themes/folio/README.md +7 -0
  435. package/themes/folio/assets/data-saver-theme.css +3 -0
  436. package/themes/folio/assets/folio/navigation.js +10 -0
  437. package/themes/folio/assets/style.css +516 -0
  438. package/themes/folio/layouts/layout.html +15 -0
  439. package/themes/folio/layouts/partials/footer.html +6 -0
  440. package/themes/folio/layouts/partials/head.html +30 -0
  441. package/themes/folio/layouts/partials/header.html +8 -0
  442. package/themes/folio/theme.json +7 -0
  443. package/themes/signal/assets/style.css +143 -21
  444. package/themes/signal/layouts/partials/head.html +8 -1
  445. package/themes/signal/layouts/partials/header.html +3 -1
  446. package/tools/README.md +14 -0
  447. package/tools/assets/format-pages.mjs +56 -0
  448. package/tools/assets/generate-brand-assets.py +160 -0
  449. package/tools/assets/sync-fonts.mjs +71 -0
  450. package/tools/assets/sync-icons.mjs +17 -0
  451. package/tools/assets/video-preview.mjs +15 -0
  452. package/tools/recordings/capture-document-demo.mjs +147 -0
  453. package/tools/recordings/demo-workbench.mjs +57 -0
  454. package/tools/recordings/desktop-recording.mjs +92 -0
  455. package/tools/recordings/provision-vm.sh +18 -0
  456. package/tools/recordings/start-vm-desktop.sh +28 -0
  457. package/tools/recordings/vm-desktop.mjs +124 -0
  458. package/tools/verification/README.md +44 -0
  459. package/tools/verification/data-saver-site.mjs +405 -0
  460. package/tools/verification/page-performance.mjs +76 -0
  461. package/tools/verification/verify-brand-assets.py +52 -0
  462. package/tools/verification/verify-brand.mjs +180 -0
  463. package/vercel.json +36 -0
  464. package/wrangler.jsonc +5 -7
  465. package/content/pages/home/en.md +0 -99
  466. package/content/pages/home/zh-cn.md +0 -99
  467. package/content/pages/plugin-development/en.md +0 -109
  468. package/content/pages/plugin-development/zh-cn.md +0 -109
  469. package/content/pages/privacy-policy/en.md +0 -93
  470. package/content/pages/privacy-policy/zh-cn.md +0 -93
  471. package/content/pages/project-introduction/en.md +0 -88
  472. package/content/pages/project-introduction/zh-cn.md +0 -88
  473. package/content/pages/quick-start/en.md +0 -153
  474. package/content/pages/quick-start/zh-cn.md +0 -153
  475. package/content/pages/theme-development/en.md +0 -132
  476. package/content/pages/theme-development/zh-cn.md +0 -132
  477. package/src/worker.js +0 -139
  478. package/static/edgepress/brand/edgepress-mark.svg +0 -7
  479. package/static/edgepress/brand/mascot-209.webp +0 -0
  480. package/static/edgepress/brand/mascot-418.png +0 -0
  481. package/static/edgepress/brand/mascot-418.webp +0 -0
  482. package/static/edgepress/brand/mascot.png +0 -0
  483. package/static/edgepress/brand/og-image.png +0 -0
  484. package/static/edgepress/brand/og-image.svg +0 -46
  485. package/static/edgepress/icons.svg +0 -24
@@ -0,0 +1,248 @@
1
+ {
2
+ "$schema": "../../../schemas/pages.schema.json",
3
+ "title": "EdgePress website builder",
4
+ "lang": "en",
5
+ "slug": "home",
6
+ "homepage": true,
7
+ "description": "Build static websites with Markdown, editable pages and consent-controlled services on five hosting platforms.",
8
+ "keywords": [
9
+ "website builder",
10
+ "Cloudflare Workers",
11
+ "page elements",
12
+ "website plugins"
13
+ ],
14
+ "blocks": [
15
+ {
16
+ "columns": 1,
17
+ "cells": [
18
+ [
19
+ {
20
+ "type": "hero",
21
+ "eyebrow": "A project built for the edge",
22
+ "title": "Build a fast website from clear, editable source files.",
23
+ "text": "EdgePress turns Markdown articles, page layouts, themes and optional services into static websites for Cloudflare, Vercel, Netlify, Tencent EdgeOne Pages and Alibaba Cloud ESA Pages.",
24
+ "mascotSrc": "/edgepress/brand/home-hero.png",
25
+ "mascotAlt": "A giant panda and Taiwanese black bear standing together with friendly smiles; the bear has a clear pale V chest marking.",
26
+ "mascotWidth": 1536,
27
+ "mascotHeight": 1024,
28
+ "mascotSizes": "(max-width: 620px) calc(100vw - 64px), 320px",
29
+ "mascotWebpSrcset": [
30
+ {
31
+ "src": "/edgepress/brand/home-hero-768.webp",
32
+ "width": 768
33
+ },
34
+ {
35
+ "src": "/edgepress/brand/home-hero.webp",
36
+ "width": 1536
37
+ }
38
+ ],
39
+ "cta": {
40
+ "label": "Start with the quick guide",
41
+ "url": "/quick-start/"
42
+ },
43
+ "highlights": [
44
+ "Editable pages in localized JSON files",
45
+ "Articles written in Markdown",
46
+ "Shared layouts and theme-defined palettes"
47
+ ]
48
+ }
49
+ ]
50
+ ]
51
+ },
52
+ {
53
+ "columns": 1,
54
+ "cells": [
55
+ [
56
+ {
57
+ "type": "feature-grid",
58
+ "title": "A clear place for each part of a site",
59
+ "items": [
60
+ {
61
+ "title": "Pages use editable elements",
62
+ "icon": "layout-grid",
63
+ "text": "Set the number of columns first, then choose elements and edit their content in each page file.",
64
+ "url": "/theme-development/"
65
+ },
66
+ {
67
+ "title": "Posts use Markdown",
68
+ "icon": "file-text",
69
+ "text": "Write long-form articles in Markdown and let the built-in renderer sanitize and format them.",
70
+ "url": "/project-introduction/"
71
+ },
72
+ {
73
+ "title": "Themes own the design",
74
+ "icon": "palette",
75
+ "text": "Build layouts with HTML partials and keep each theme's color palette in its stylesheet.",
76
+ "url": "/theme-development/"
77
+ },
78
+ {
79
+ "title": "Integrations wait for consent",
80
+ "icon": "shield-check",
81
+ "text": "Add tracking, statistics, advertising, or CAPTCHA services with provider details in configuration.",
82
+ "url": "/plugin-development/"
83
+ }
84
+ ]
85
+ }
86
+ ]
87
+ ]
88
+ },
89
+ {
90
+ "columns": 2,
91
+ "cells": [
92
+ [
93
+ {
94
+ "type": "section",
95
+ "title": "Learn the project",
96
+ "tone": "soft",
97
+ "blocks": [
98
+ {
99
+ "type": "text",
100
+ "paragraphs": [
101
+ "Start with the project introduction and quick start. The guides cover the feature lifecycle, supported runtimes, and the recommended publishing workflow."
102
+ ]
103
+ },
104
+ {
105
+ "type": "link-list",
106
+ "title": "Project guides",
107
+ "items": [
108
+ {
109
+ "label": "Project introduction",
110
+ "url": "/project-introduction/"
111
+ },
112
+ {
113
+ "label": "Quick start",
114
+ "url": "/quick-start/"
115
+ }
116
+ ]
117
+ }
118
+ ]
119
+ }
120
+ ],
121
+ [
122
+ {
123
+ "type": "section",
124
+ "title": "Extend the project",
125
+ "tone": "soft",
126
+ "blocks": [
127
+ {
128
+ "type": "text",
129
+ "paragraphs": [
130
+ "Use theme partials for shared head metadata, navigation, footer, and error-page layout. Page-specific rows and element content stay in localized page files.",
131
+ "Build plugins run in Node. Browser services wait for explicit consent before requesting vendor code."
132
+ ]
133
+ },
134
+ {
135
+ "type": "link-list",
136
+ "title": "Development guides",
137
+ "items": [
138
+ {
139
+ "label": "Theme development",
140
+ "url": "/theme-development/"
141
+ },
142
+ {
143
+ "label": "Plugin development",
144
+ "url": "/plugin-development/"
145
+ }
146
+ ]
147
+ }
148
+ ]
149
+ }
150
+ ]
151
+ ]
152
+ },
153
+ {
154
+ "columns": 1,
155
+ "cells": [
156
+ [
157
+ {
158
+ "type": "latest-posts",
159
+ "title": "Latest project updates",
160
+ "count": 3,
161
+ "paginate": true
162
+ }
163
+ ]
164
+ ]
165
+ },
166
+ {
167
+ "columns": 1,
168
+ "cells": [
169
+ [
170
+ {
171
+ "type": "media-text",
172
+ "mediaType": "image",
173
+ "src": "/images/previews/edgepress-en.webp",
174
+ "alt": "Actual local EdgePress website preview.",
175
+ "caption": "Interface preview captured locally.",
176
+ "placement": "left",
177
+ "title": "See what your source becomes",
178
+ "text": "Posts, navigation, search and language routes publish together. Choose a theme and keep everyday writing in Markdown."
179
+ }
180
+ ]
181
+ ]
182
+ },
183
+ {
184
+ "columns": 1,
185
+ "cells": [
186
+ [
187
+ {
188
+ "type": "data-table",
189
+ "title": "Free hosting priority (2026-10-04)",
190
+ "headers": [
191
+ "Priority",
192
+ "Platform",
193
+ "Allowance and conditions"
194
+ ],
195
+ "rows": [
196
+ [
197
+ "1",
198
+ "Cloudflare",
199
+ "Unlimited static requests; 3,000 build minutes/month."
200
+ ],
201
+ [
202
+ "2",
203
+ "Tencent EdgeOne Pages",
204
+ "Currently unlimited website traffic/requests; 500 builds/month. Free-phase limits may change."
205
+ ],
206
+ [
207
+ "3",
208
+ "Vercel Hobby",
209
+ "100 GB/month and 1 million CDN requests; personal non-commercial use."
210
+ ],
211
+ [
212
+ "4",
213
+ "Netlify Free",
214
+ "300 shared credits/month. A deploy costs 15; traffic 20/GB; requests 2/10,000. Pauses when exhausted."
215
+ ],
216
+ [
217
+ "Verify",
218
+ "Alibaba Cloud ESA Pages",
219
+ "Traffic uses the site package. Confirm its quota; 100,000/day functions is not static bandwidth."
220
+ ]
221
+ ]
222
+ }
223
+ ]
224
+ ]
225
+ },
226
+ {
227
+ "columns": 1,
228
+ "cells": [
229
+ [
230
+ {
231
+ "type": "link-list",
232
+ "title": "Deployment and quota sources",
233
+ "items": [
234
+ {
235
+ "label": "Chinese guide",
236
+ "url": "https://github.com/jsw-teams/edgepress/blob/main/content/guides/zh-cn.md"
237
+ },
238
+ {
239
+ "label": "Official quota sources",
240
+ "url": "https://github.com/jsw-teams/edgepress/blob/main/content/guides/platforms.md"
241
+ }
242
+ ]
243
+ }
244
+ ]
245
+ ]
246
+ }
247
+ ]
248
+ }
@@ -0,0 +1,248 @@
1
+ {
2
+ "$schema": "../../../schemas/pages.schema.json",
3
+ "title": "写文建站 网站构建器",
4
+ "lang": "zh-CN",
5
+ "slug": "home",
6
+ "homepage": true,
7
+ "description": "使用 Markdown、可编辑页面与按需服务,将静态网站部署到五个平台。",
8
+ "keywords": [
9
+ "网站构建器",
10
+ "Cloudflare Workers",
11
+ "页面元素",
12
+ "网站插件"
13
+ ],
14
+ "blocks": [
15
+ {
16
+ "columns": 1,
17
+ "cells": [
18
+ [
19
+ {
20
+ "type": "hero",
21
+ "eyebrow": "为边缘网络构建",
22
+ "title": "用清晰、可编辑的源文件构建快速网站。",
23
+ "text": "写文建站将 Markdown 文章、页面布局、主题与可选服务构建为静态网站,支持 Cloudflare、Vercel、Netlify、腾讯 EdgeOne Pages 和阿里云 ESA Pages。",
24
+ "mascotSrc": "/edgepress/brand/home-hero.png",
25
+ "mascotAlt": "大熊猫与台湾黑熊友好并肩站立,黑熊胸前的浅色 V 形胸斑清晰可见。",
26
+ "mascotWidth": 1536,
27
+ "mascotHeight": 1024,
28
+ "mascotSizes": "(max-width: 620px) calc(100vw - 64px), 320px",
29
+ "mascotWebpSrcset": [
30
+ {
31
+ "src": "/edgepress/brand/home-hero-768.webp",
32
+ "width": 768
33
+ },
34
+ {
35
+ "src": "/edgepress/brand/home-hero.webp",
36
+ "width": 1536
37
+ }
38
+ ],
39
+ "cta": {
40
+ "label": "从快速入门开始",
41
+ "url": "/[launge]/quick-start/"
42
+ },
43
+ "highlights": [
44
+ "在本地化 JSON 文件中编辑页面",
45
+ "使用 Markdown 撰写文章",
46
+ "复用布局,配色由主题定义"
47
+ ]
48
+ }
49
+ ]
50
+ ]
51
+ },
52
+ {
53
+ "columns": 1,
54
+ "cells": [
55
+ [
56
+ {
57
+ "type": "feature-grid",
58
+ "title": "网站各部分各有清晰位置",
59
+ "items": [
60
+ {
61
+ "title": "页面使用可编辑元素",
62
+ "icon": "layout-grid",
63
+ "text": "先设置栏数,再选择元素类型,并在各页面文件中编辑对应内容。",
64
+ "url": "/[launge]/theme-development/"
65
+ },
66
+ {
67
+ "title": "文章使用 Markdown",
68
+ "icon": "file-text",
69
+ "text": "使用 Markdown 撰写长文,由内置渲染器进行清理和排版。",
70
+ "url": "/[launge]/project-introduction/"
71
+ },
72
+ {
73
+ "title": "主题负责视觉设计",
74
+ "icon": "palette",
75
+ "text": "使用 HTML 局部模板构建布局,并将各主题的配色保留在样式表中。",
76
+ "url": "/[launge]/theme-development/"
77
+ },
78
+ {
79
+ "title": "集成遵循用户同意",
80
+ "icon": "shield-check",
81
+ "text": "配置跟踪、统计、广告或人机验证服务及其供应商信息。",
82
+ "url": "/[launge]/plugin-development/"
83
+ }
84
+ ]
85
+ }
86
+ ]
87
+ ]
88
+ },
89
+ {
90
+ "columns": 2,
91
+ "cells": [
92
+ [
93
+ {
94
+ "type": "section",
95
+ "title": "了解项目",
96
+ "tone": "soft",
97
+ "blocks": [
98
+ {
99
+ "type": "text",
100
+ "paragraphs": [
101
+ "从项目介绍和快速入门开始。指南涵盖功能生命周期、支持的运行环境和建议的发布流程。"
102
+ ]
103
+ },
104
+ {
105
+ "type": "link-list",
106
+ "title": "项目指南",
107
+ "items": [
108
+ {
109
+ "label": "项目介绍",
110
+ "url": "/[launge]/project-introduction/"
111
+ },
112
+ {
113
+ "label": "快速入门",
114
+ "url": "/[launge]/quick-start/"
115
+ }
116
+ ]
117
+ }
118
+ ]
119
+ }
120
+ ],
121
+ [
122
+ {
123
+ "type": "section",
124
+ "title": "扩展项目",
125
+ "tone": "soft",
126
+ "blocks": [
127
+ {
128
+ "type": "text",
129
+ "paragraphs": [
130
+ "使用主题局部模板复用 head 元数据、导航、页脚和错误页布局。每个页面的行布局和元素内容保存在本地化页面文件中。",
131
+ "构建插件在 Node 中运行。浏览器服务会等到访客明确同意后才请求供应商代码。"
132
+ ]
133
+ },
134
+ {
135
+ "type": "link-list",
136
+ "title": "开发指南",
137
+ "items": [
138
+ {
139
+ "label": "主题开发",
140
+ "url": "/[launge]/theme-development/"
141
+ },
142
+ {
143
+ "label": "插件开发",
144
+ "url": "/[launge]/plugin-development/"
145
+ }
146
+ ]
147
+ }
148
+ ]
149
+ }
150
+ ]
151
+ ]
152
+ },
153
+ {
154
+ "columns": 1,
155
+ "cells": [
156
+ [
157
+ {
158
+ "type": "latest-posts",
159
+ "title": "最新项目动态",
160
+ "count": 3,
161
+ "paginate": true
162
+ }
163
+ ]
164
+ ]
165
+ },
166
+ {
167
+ "columns": 1,
168
+ "cells": [
169
+ [
170
+ {
171
+ "type": "media-text",
172
+ "mediaType": "image",
173
+ "src": "/images/previews/edgepress-zh.webp",
174
+ "alt": "写文建站本地网站界面实拍。",
175
+ "caption": "本地构建的界面截图。",
176
+ "placement": "left",
177
+ "title": "看见源文件生成的网站",
178
+ "text": "文章、导航、搜索与语言路由一起发布。选择主题,日常写作只需要 Markdown。"
179
+ }
180
+ ]
181
+ ]
182
+ },
183
+ {
184
+ "columns": 1,
185
+ "cells": [
186
+ [
187
+ {
188
+ "type": "data-table",
189
+ "title": "免费部署优先级(2026-10-04)",
190
+ "headers": [
191
+ "优先级",
192
+ "平台",
193
+ "额度与条件"
194
+ ],
195
+ "rows": [
196
+ [
197
+ "1",
198
+ "Cloudflare",
199
+ "静态请求免费不限量;每月 3,000 分钟构建。"
200
+ ],
201
+ [
202
+ "2",
203
+ "腾讯 EdgeOne Pages",
204
+ "当前网站流量与请求不限量;每月 500 次构建。免费阶段额度可能调整。"
205
+ ],
206
+ [
207
+ "3",
208
+ "Vercel Hobby",
209
+ "每月 100 GB 与 100 万次 CDN 请求;限个人非商业用途。"
210
+ ],
211
+ [
212
+ "4",
213
+ "Netlify Free",
214
+ "每月 300 共享积分;部署 15,流量每 GB 20,请求每万次 2;用尽暂停。"
215
+ ],
216
+ [
217
+ "待核实",
218
+ "阿里云 ESA Pages",
219
+ "流量使用站点套餐额度;每天 10 万次函数额度不是静态流量。"
220
+ ]
221
+ ]
222
+ }
223
+ ]
224
+ ]
225
+ },
226
+ {
227
+ "columns": 1,
228
+ "cells": [
229
+ [
230
+ {
231
+ "type": "link-list",
232
+ "title": "部署说明与额度来源",
233
+ "items": [
234
+ {
235
+ "label": "中文说明",
236
+ "url": "https://github.com/jsw-teams/edgepress/blob/main/content/guides/zh-cn.md"
237
+ },
238
+ {
239
+ "label": "官方额度来源",
240
+ "url": "https://github.com/jsw-teams/edgepress/blob/main/content/guides/platforms.md"
241
+ }
242
+ ]
243
+ }
244
+ ]
245
+ ]
246
+ }
247
+ ]
248
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "../../../schemas/pages.schema.json",
3
+ "title": "Browser-local tools",
4
+ "lang": "en",
5
+ "slug": "local-tools",
6
+ "description": "Add a local browser tool to JSON Pages without a separate HTML document or server.",
7
+ "blocks": [{"columns":1,"cells":[[
8
+ {"type":"text","text":"A `local-tool` element mounts trusted site JavaScript inside a normal JSON Page. EdgePress owns the document, theme, navigation, page rows, escaping and asset fingerprints. Use this element for local calculators, file readers or search tools; external providers still require a consent-controlled service."},
9
+ {"type":"code","language":"json","code":"{\n \"type\": \"local-tool\",\n \"id\": \"question-search\",\n \"title\": \"Search the question bank\",\n \"script\": \"/tools/search.js\",\n \"stylesheet\": \"/tools/search.css\",\n \"data\": \"/data/questions.json\",\n \"fallback\": \"Enable JavaScript to search locally.\"\n}"},
10
+ {"type":"text","text":"Put executable assets in `static/` or `content/assets/`. All referenced assets must exist at build time. Scripts use `.js` or `.mjs`, optional styles use `.css`, and optional public data uses `.json`. Paths must be local absolute site paths without traversal, query strings or remote origins. Keep IDs unique within the Page."},
11
+ {"type":"code","language":"javascript","code":"const root = document.querySelector('#question-search');\nconst mount = root.querySelector('[data-tool-mount]');\nconst response = await fetch(root.dataset.toolData);\nconst data = await response.json();\n// Create accessible controls with DOM APIs inside mount.\n// Import local modules normally; EdgePress fingerprints the graph."},
12
+ {"type":"text","text":"The tool module is trusted source, with the same responsibility as a theme script. Keep private files and inputs in browser memory, load expensive workers or models on visitor demand, and provide cancellation and clear failures. A local element does not authorize requests to external services or add an API. Static JSON remains refreshable; executable dependencies receive immutable hashed URLs."}
13
+ ]]}]
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "../../../schemas/pages.schema.json",
3
+ "title": "浏览器本地工具",
4
+ "lang": "zh-CN",
5
+ "slug": "local-tools",
6
+ "description": "通过 JSON Pages 挂载浏览器本地工具,由写文建站生成页面与资源。",
7
+ "blocks": [{"columns":1,"cells":[[
8
+ {"type":"text","text":"`local-tool` 元素在原生 JSON 页面内挂载站点自己的浏览器模块。页面文档、主题、导航、行列布局、文本转义和资源指纹均由写文建站生成,不需要单独维护 HTML 网页。适用于本地计算、文件读取和题库检索;外部服务仍需通过逐服务同意机制接入。"},
9
+ {"type":"code","language":"json","code":"{\n \"type\": \"local-tool\",\n \"id\": \"question-search\",\n \"title\": \"搜索题库\",\n \"script\": \"/tools/search.js\",\n \"stylesheet\": \"/tools/search.css\",\n \"data\": \"/data/questions.json\",\n \"fallback\": \"请启用 JavaScript 使用本地搜题。\"\n}"},
10
+ {"type":"text","text":"将资源放在 `static/` 或 `content/assets/`。模块、可选样式、可选公开数据分别使用 `.js` 或 `.mjs`、`.css`、`.json`,构建时必须存在。仅接受站内绝对路径,禁止外部地址、路径穿越和查询参数。一个页面内的工具 ID 不得重复。"},
11
+ {"type":"code","language":"javascript","code":"const root = document.querySelector('#question-search');\nconst mount = root.querySelector('[data-tool-mount]');\nconst response = await fetch(root.dataset.toolData);\nconst data = await response.json();\n// 使用 DOM API 在 mount 内创建无障碍控件。\n// 正常导入本地模块,框架会为依赖图生成指纹。"},
12
+ {"type":"text","text":"本地工具模块与主题脚本一样属于可信站点源码。私人文件和输入留在浏览器内存中,大型 Worker 和模型在访问者主动使用时加载,并提供取消和错误提示。此元素不授予外部服务请求权限,也不创建 API。公开 JSON 保持可重新验证,脚本和样式通过哈希地址长久缓存。"}
13
+ ]]}]
14
+ }
@@ -0,0 +1,107 @@
1
+ {
2
+ "$schema": "../../../schemas/pages.schema.json",
3
+ "title": "Read Pages as nested collections",
4
+ "lang": "en",
5
+ "slug": "page-authoring",
6
+ "description": "Author JSON Pages with editor schema, nested objects and arrays, and independent folding.",
7
+ "blocks": [
8
+ {
9
+ "columns": 1,
10
+ "cells": [
11
+ [
12
+ {
13
+ "type": "hero",
14
+ "title": "Read Pages as nested collections",
15
+ "text": "Author JSON Pages with editor schema, nested objects and arrays, and independent folding."
16
+ }
17
+ ]
18
+ ]
19
+ },
20
+ {
21
+ "columns": 1,
22
+ "cells": [
23
+ [
24
+ {
25
+ "type": "code",
26
+ "title": "Complete two-column JSON Page",
27
+ "language": "json",
28
+ "code": "{\n \"title\": \"My page\",\n \"lang\": \"en\",\n \"slug\": \"my-page\",\n \"blocks\": [\n {\n \"columns\": 2,\n \"cells\": [\n [\n {\n \"type\": \"heading\",\n \"level\": 2,\n \"text\": \"About this project\"\n },\n {\n \"type\": \"text\",\n \"text\": \"A small tool for everyday writing.\"\n }\n ],\n [\n {\n \"type\": \"link-list\",\n \"title\": \"Read more\",\n \"items\": [\n {\n \"label\": \"Project\",\n \"url\": \"/[launge]/project-introduction/\"\n }\n ]\n }\n ]\n ]\n }\n ]\n}"
29
+ }
30
+ ]
31
+ ]
32
+ },
33
+ {
34
+ "columns": 1,
35
+ "cells": [
36
+ [
37
+ {
38
+ "type": "text",
39
+ "paragraphs": [
40
+ "Save the example as content/pages/my-page/en.json. Locale filenames are lowercase; lang must match an enabled locale. homepage: true publishes at the localized site root. slug selects an ordinary page path. JSON Pages have no YAML front matter or Markdown body.",
41
+ "The blocks array holds rows in order. A row sets columns from 1 to 4 and contains that many arrays in cells. Each cell is an array containing at least one element. Elements appear from top to bottom.",
42
+ "JSON keys and strings use double quotes. Objects use braces and arrays use brackets; commas separate siblings. Do not add an elements field: the innermost arrays directly contain the elements.",
43
+ "A section’s blocks hold child elements, not new rows. For prose use text or paragraphs; for code use a code string with \\n for line breaks. Articles remain Markdown under content/posts.",
44
+ "A local $schema reference enables field help and validation in VS Code. The editor can fold each object and array and show its children in Outline. Legacy .md YAML Pages remain readable, but do not keep both formats for the same locale."
45
+ ]
46
+ }
47
+ ]
48
+ ]
49
+ },
50
+ {
51
+ "columns": 1,
52
+ "cells": [
53
+ [
54
+ {
55
+ "type": "data-table",
56
+ "title": "Common elements (fields)",
57
+ "headers": [
58
+ "Purpose",
59
+ "Element and key fields"
60
+ ],
61
+ "rows": [
62
+ [
63
+ "Title",
64
+ "heading (level, text)"
65
+ ],
66
+ [
67
+ "Prose",
68
+ "text (text OR paragraphs)"
69
+ ],
70
+ [
71
+ "Group",
72
+ "section (title, blocks)"
73
+ ],
74
+ [
75
+ "Code",
76
+ "code (language, code)"
77
+ ],
78
+ [
79
+ "Articles",
80
+ "post-list (title, category OR categories, count)"
81
+ ],
82
+ [
83
+ "Document",
84
+ "document (title, src)"
85
+ ],
86
+ [
87
+ "Gallery",
88
+ "media-viewer (title, items)"
89
+ ]
90
+ ]
91
+ }
92
+ ]
93
+ ]
94
+ },
95
+ {
96
+ "columns": 1,
97
+ "cells": [
98
+ [
99
+ {
100
+ "type": "text",
101
+ "text": "Run npm run pages:format to preview migration, then npm run pages:format -- --write to apply it. The tool checks field values and order before removing the legacy file. Run npm run build to validate the renderer."
102
+ }
103
+ ]
104
+ ]
105
+ }
106
+ ]
107
+ }