@geekity/cms 0.39.0 → 0.41.0

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 (297) hide show
  1. package/admin/pages/appearance/look.njk +135 -0
  2. package/admin/pages/dashboard/home.njk +9 -3
  3. package/admin/pages/documents/conflict.njk +35 -10
  4. package/admin/pages/documents/editor.njk +28 -0
  5. package/admin/pages/documents/list.njk +44 -1
  6. package/admin/pages/settings/general.njk +4 -0
  7. package/admin/pages/users/edit.njk +1 -1
  8. package/admin/src/admin.css +32 -0
  9. package/admin/static/admin.css +197 -3
  10. package/admin/static/dashboard.js +51 -23
  11. package/admin/static/editor.js +19 -19
  12. package/dist/admin/autosave-client.d.ts +85 -0
  13. package/dist/admin/autosave-client.d.ts.map +1 -0
  14. package/dist/admin/autosave-client.js +218 -0
  15. package/dist/admin/autosave-client.js.map +1 -0
  16. package/dist/admin/autosave.d.ts +11 -0
  17. package/dist/admin/autosave.d.ts.map +1 -0
  18. package/dist/admin/autosave.js +76 -0
  19. package/dist/admin/autosave.js.map +1 -0
  20. package/dist/admin/dashboard.d.ts +2 -2
  21. package/dist/admin/dashboard.d.ts.map +1 -1
  22. package/dist/admin/dashboard.js +23 -15
  23. package/dist/admin/dashboard.js.map +1 -1
  24. package/dist/admin/documents.d.ts.map +1 -1
  25. package/dist/admin/documents.js +205 -16
  26. package/dist/admin/documents.js.map +1 -1
  27. package/dist/admin/flash.d.ts +2 -0
  28. package/dist/admin/flash.d.ts.map +1 -1
  29. package/dist/admin/flash.js +12 -0
  30. package/dist/admin/flash.js.map +1 -1
  31. package/dist/admin/focus-mode.d.ts +39 -0
  32. package/dist/admin/focus-mode.d.ts.map +1 -0
  33. package/dist/admin/focus-mode.js +81 -0
  34. package/dist/admin/focus-mode.js.map +1 -0
  35. package/dist/admin/formatting.d.ts +0 -2
  36. package/dist/admin/formatting.d.ts.map +1 -1
  37. package/dist/admin/formatting.js +0 -8
  38. package/dist/admin/formatting.js.map +1 -1
  39. package/dist/admin/look.d.ts +12 -0
  40. package/dist/admin/look.d.ts.map +1 -0
  41. package/dist/admin/look.js +179 -0
  42. package/dist/admin/look.js.map +1 -0
  43. package/dist/admin/menu.d.ts.map +1 -1
  44. package/dist/admin/menu.js +5 -3
  45. package/dist/admin/menu.js.map +1 -1
  46. package/dist/admin/preview.d.ts.map +1 -1
  47. package/dist/admin/preview.js +1 -0
  48. package/dist/admin/preview.js.map +1 -1
  49. package/dist/admin/routes.d.ts.map +1 -1
  50. package/dist/admin/routes.js +6 -4
  51. package/dist/admin/routes.js.map +1 -1
  52. package/dist/admin/settings-fields.d.ts +1 -1
  53. package/dist/admin/settings-fields.d.ts.map +1 -1
  54. package/dist/admin/settings-fields.js +1 -0
  55. package/dist/admin/settings-fields.js.map +1 -1
  56. package/dist/admin/settings-general.d.ts.map +1 -1
  57. package/dist/admin/settings-general.js +1 -0
  58. package/dist/admin/settings-general.js.map +1 -1
  59. package/dist/admin/templates.d.ts +1 -0
  60. package/dist/admin/templates.d.ts.map +1 -1
  61. package/dist/admin/templates.js +2 -1
  62. package/dist/admin/templates.js.map +1 -1
  63. package/dist/admin/users.d.ts.map +1 -1
  64. package/dist/admin/users.js +2 -0
  65. package/dist/admin/users.js.map +1 -1
  66. package/dist/admin/widget-fediverse.js +1 -1
  67. package/dist/admin/widget-posting.d.ts.map +1 -1
  68. package/dist/admin/widget-posting.js +4 -75
  69. package/dist/admin/widget-posting.js.map +1 -1
  70. package/dist/admin/widget-scheduled.js +1 -1
  71. package/dist/admin/widget-top-posts.js +1 -1
  72. package/dist/autosave/index.d.ts +5 -0
  73. package/dist/autosave/index.d.ts.map +1 -0
  74. package/dist/autosave/index.js +3 -0
  75. package/dist/autosave/index.js.map +1 -0
  76. package/dist/autosave/key.d.ts +13 -0
  77. package/dist/autosave/key.d.ts.map +1 -0
  78. package/dist/autosave/key.js +29 -0
  79. package/dist/autosave/key.js.map +1 -0
  80. package/dist/autosave/store.d.ts +23 -0
  81. package/dist/autosave/store.d.ts.map +1 -0
  82. package/dist/autosave/store.js +114 -0
  83. package/dist/autosave/store.js.map +1 -0
  84. package/dist/cli.js +1 -1
  85. package/dist/cli.js.map +1 -1
  86. package/dist/cms/app.d.ts.map +1 -1
  87. package/dist/cms/app.js +1 -0
  88. package/dist/cms/app.js.map +1 -1
  89. package/dist/cms/boot.d.ts.map +1 -1
  90. package/dist/cms/boot.js +2 -0
  91. package/dist/cms/boot.js.map +1 -1
  92. package/dist/cms/create.d.ts +6 -0
  93. package/dist/cms/create.d.ts.map +1 -1
  94. package/dist/cms/create.js +1 -0
  95. package/dist/cms/create.js.map +1 -1
  96. package/dist/cms/server-error.d.ts.map +1 -1
  97. package/dist/cms/server-error.js +6 -6
  98. package/dist/cms/server-error.js.map +1 -1
  99. package/dist/cms/services.d.ts +2 -0
  100. package/dist/cms/services.d.ts.map +1 -1
  101. package/dist/cms/services.js +9 -0
  102. package/dist/cms/services.js.map +1 -1
  103. package/dist/{micropub/content.d.ts → content/html-to-markdown.d.ts} +1 -1
  104. package/dist/content/html-to-markdown.d.ts.map +1 -0
  105. package/dist/{micropub/content.js → content/html-to-markdown.js} +11 -9
  106. package/dist/content/html-to-markdown.js.map +1 -0
  107. package/dist/content/post-type.d.ts +1 -0
  108. package/dist/content/post-type.d.ts.map +1 -1
  109. package/dist/content/post-type.js +1 -1
  110. package/dist/content/post-type.js.map +1 -1
  111. package/dist/content/review.d.ts +14 -0
  112. package/dist/content/review.d.ts.map +1 -1
  113. package/dist/content/review.js +31 -8
  114. package/dist/content/review.js.map +1 -1
  115. package/dist/content/write.d.ts +8 -0
  116. package/dist/content/write.d.ts.map +1 -1
  117. package/dist/content/write.js +1 -1
  118. package/dist/content/write.js.map +1 -1
  119. package/dist/files/data-files.d.ts +2 -0
  120. package/dist/files/data-files.d.ts.map +1 -1
  121. package/dist/files/data-files.js +12 -0
  122. package/dist/files/data-files.js.map +1 -1
  123. package/dist/fonts/css.d.ts +25 -0
  124. package/dist/fonts/css.d.ts.map +1 -0
  125. package/dist/fonts/css.js +88 -0
  126. package/dist/fonts/css.js.map +1 -0
  127. package/dist/fonts/family.d.ts +23 -0
  128. package/dist/fonts/family.d.ts.map +1 -0
  129. package/dist/fonts/family.js +41 -0
  130. package/dist/fonts/family.js.map +1 -0
  131. package/dist/fonts/index.d.ts +10 -0
  132. package/dist/fonts/index.d.ts.map +1 -0
  133. package/dist/fonts/index.js +6 -0
  134. package/dist/fonts/index.js.map +1 -0
  135. package/dist/fonts/job.d.ts +20 -0
  136. package/dist/fonts/job.d.ts.map +1 -0
  137. package/dist/fonts/job.js +49 -0
  138. package/dist/fonts/job.js.map +1 -0
  139. package/dist/fonts/roles.d.ts +53 -0
  140. package/dist/fonts/roles.d.ts.map +1 -0
  141. package/dist/fonts/roles.js +64 -0
  142. package/dist/fonts/roles.js.map +1 -0
  143. package/dist/fonts/store.d.ts +69 -0
  144. package/dist/fonts/store.d.ts.map +1 -0
  145. package/dist/fonts/store.js +237 -0
  146. package/dist/fonts/store.js.map +1 -0
  147. package/dist/maintenance.d.ts +1 -0
  148. package/dist/maintenance.d.ts.map +1 -1
  149. package/dist/maintenance.js +1 -1
  150. package/dist/maintenance.js.map +1 -1
  151. package/dist/micropub/create.js +1 -1
  152. package/dist/micropub/create.js.map +1 -1
  153. package/dist/plugin.d.ts +1 -1
  154. package/dist/plugin.d.ts.map +1 -1
  155. package/dist/settings/registry.d.ts.map +1 -1
  156. package/dist/settings/registry.js +5 -1
  157. package/dist/settings/registry.js.map +1 -1
  158. package/dist/settings/types.d.ts +1 -1
  159. package/dist/settings/types.d.ts.map +1 -1
  160. package/dist/site/dashboard-layout.d.ts +33 -26
  161. package/dist/site/dashboard-layout.d.ts.map +1 -1
  162. package/dist/site/dashboard-layout.js +94 -39
  163. package/dist/site/dashboard-layout.js.map +1 -1
  164. package/dist/site/namespace.d.ts +5 -0
  165. package/dist/site/namespace.d.ts.map +1 -1
  166. package/dist/site/namespace.js +40 -1
  167. package/dist/site/namespace.js.map +1 -1
  168. package/dist/store/schema.d.ts.map +1 -1
  169. package/dist/store/schema.js +4 -0
  170. package/dist/store/schema.js.map +1 -1
  171. package/dist/store/sessions.d.ts +2 -1
  172. package/dist/store/sessions.d.ts.map +1 -1
  173. package/dist/store/sessions.js +30 -12
  174. package/dist/store/sessions.js.map +1 -1
  175. package/dist/theme/font-family.d.ts +13 -0
  176. package/dist/theme/font-family.d.ts.map +1 -0
  177. package/dist/theme/font-family.js +21 -0
  178. package/dist/theme/font-family.js.map +1 -0
  179. package/dist/theme/scheme-tokens.d.ts +50 -0
  180. package/dist/theme/scheme-tokens.d.ts.map +1 -0
  181. package/dist/theme/scheme-tokens.js +240 -0
  182. package/dist/theme/scheme-tokens.js.map +1 -0
  183. package/dist/theme/site-data.d.ts +12 -0
  184. package/dist/theme/site-data.d.ts.map +1 -1
  185. package/dist/theme/site-data.js +15 -0
  186. package/dist/theme/site-data.js.map +1 -1
  187. package/dist/theme/themes.d.ts +74 -0
  188. package/dist/theme/themes.d.ts.map +1 -1
  189. package/dist/theme/themes.js +100 -9
  190. package/dist/theme/themes.js.map +1 -1
  191. package/dist/util/file-size.d.ts +3 -0
  192. package/dist/util/file-size.d.ts.map +1 -0
  193. package/dist/util/file-size.js +9 -0
  194. package/dist/util/file-size.js.map +1 -0
  195. package/dist/web/asset-routes.d.ts.map +1 -1
  196. package/dist/web/asset-routes.js +2 -1
  197. package/dist/web/asset-routes.js.map +1 -1
  198. package/dist/web/conversation.d.ts +15 -0
  199. package/dist/web/conversation.d.ts.map +1 -1
  200. package/dist/web/conversation.js +10 -3
  201. package/dist/web/conversation.js.map +1 -1
  202. package/dist/web/document-page.d.ts.map +1 -1
  203. package/dist/web/document-page.js +11 -13
  204. package/dist/web/document-page.js.map +1 -1
  205. package/dist/web/embed.d.ts.map +1 -1
  206. package/dist/web/embed.js +4 -2
  207. package/dist/web/embed.js.map +1 -1
  208. package/dist/web/env.d.ts +2 -0
  209. package/dist/web/env.d.ts.map +1 -1
  210. package/dist/web/federation-routes.d.ts.map +1 -1
  211. package/dist/web/federation-routes.js +2 -1
  212. package/dist/web/federation-routes.js.map +1 -1
  213. package/dist/web/feed-routes.d.ts +4 -2
  214. package/dist/web/feed-routes.d.ts.map +1 -1
  215. package/dist/web/feed-routes.js +22 -4
  216. package/dist/web/feed-routes.js.map +1 -1
  217. package/dist/web/feed-source.d.ts +1 -1
  218. package/dist/web/feed-source.d.ts.map +1 -1
  219. package/dist/web/feed-source.js +1 -1
  220. package/dist/web/feed-source.js.map +1 -1
  221. package/dist/web/font-routes.d.ts +13 -0
  222. package/dist/web/font-routes.d.ts.map +1 -0
  223. package/dist/web/font-routes.js +27 -0
  224. package/dist/web/font-routes.js.map +1 -0
  225. package/dist/web/listing-pages.d.ts.map +1 -1
  226. package/dist/web/listing-pages.js +12 -14
  227. package/dist/web/listing-pages.js.map +1 -1
  228. package/dist/web/maintenance.d.ts.map +1 -1
  229. package/dist/web/maintenance.js +12 -8
  230. package/dist/web/maintenance.js.map +1 -1
  231. package/dist/web/manifest.d.ts +8 -5
  232. package/dist/web/manifest.d.ts.map +1 -1
  233. package/dist/web/manifest.js +10 -7
  234. package/dist/web/manifest.js.map +1 -1
  235. package/dist/web/markdown-conversation.d.ts +72 -0
  236. package/dist/web/markdown-conversation.d.ts.map +1 -0
  237. package/dist/web/markdown-conversation.js +63 -0
  238. package/dist/web/markdown-conversation.js.map +1 -0
  239. package/dist/web/markdown-page.d.ts +39 -0
  240. package/dist/web/markdown-page.d.ts.map +1 -1
  241. package/dist/web/markdown-page.js +5 -2
  242. package/dist/web/markdown-page.js.map +1 -1
  243. package/dist/web/markdown-representation.d.ts +31 -1
  244. package/dist/web/markdown-representation.d.ts.map +1 -1
  245. package/dist/web/markdown-representation.js +161 -8
  246. package/dist/web/markdown-representation.js.map +1 -1
  247. package/dist/web/negotiate.d.ts +3 -2
  248. package/dist/web/negotiate.d.ts.map +1 -1
  249. package/dist/web/negotiate.js +7 -3
  250. package/dist/web/negotiate.js.map +1 -1
  251. package/dist/web/oembed.d.ts +17 -3
  252. package/dist/web/oembed.d.ts.map +1 -1
  253. package/dist/web/oembed.js +68 -26
  254. package/dist/web/oembed.js.map +1 -1
  255. package/dist/web/render.d.ts +64 -5
  256. package/dist/web/render.d.ts.map +1 -1
  257. package/dist/web/render.js +185 -10
  258. package/dist/web/render.js.map +1 -1
  259. package/dist/web/request.d.ts +0 -3
  260. package/dist/web/request.d.ts.map +1 -1
  261. package/dist/web/request.js +0 -7
  262. package/dist/web/request.js.map +1 -1
  263. package/dist/web/routes.d.ts.map +1 -1
  264. package/dist/web/routes.js +13 -7
  265. package/dist/web/routes.js.map +1 -1
  266. package/dist/web/search.d.ts +6 -3
  267. package/dist/web/search.d.ts.map +1 -1
  268. package/dist/web/search.js +20 -5
  269. package/dist/web/search.js.map +1 -1
  270. package/dist/web/site-index.d.ts.map +1 -1
  271. package/dist/web/site-index.js +2 -1
  272. package/dist/web/site-index.js.map +1 -1
  273. package/dist/web/status-pages.d.ts +19 -0
  274. package/dist/web/status-pages.d.ts.map +1 -0
  275. package/dist/web/status-pages.js +44 -0
  276. package/dist/web/status-pages.js.map +1 -0
  277. package/dist/webmention/fetch-public.d.ts +6 -0
  278. package/dist/webmention/fetch-public.d.ts.map +1 -1
  279. package/dist/webmention/fetch-public.js +6 -1
  280. package/dist/webmention/fetch-public.js.map +1 -1
  281. package/package.json +1 -1
  282. package/themes/default/layouts/404.md.njk +8 -0
  283. package/themes/default/layouts/410.md.njk +7 -0
  284. package/themes/default/layouts/500.md.njk +8 -0
  285. package/themes/default/layouts/503.md.njk +9 -0
  286. package/themes/default/layouts/base.njk +28 -16
  287. package/themes/default/layouts/page.njk +4 -8
  288. package/themes/default/partials/bio.njk +1 -1
  289. package/themes/default/partials/contact-form.njk +1 -1
  290. package/themes/default/partials/markdown-footer.md.njk +121 -3
  291. package/themes/default/partials/markdown-header.md.njk +102 -0
  292. package/themes/default/partials/markdown-reply.md.njk +31 -0
  293. package/themes/default/src/style.css +326 -15
  294. package/themes/default/static/style.css +489 -3
  295. package/themes/default/theme.json +23 -1
  296. package/dist/micropub/content.d.ts.map +0 -1
  297. package/dist/micropub/content.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import type { SearchHit } from '../content/store.ts';
2
- import type { DocumentJson, Representation } from './negotiate.ts';
2
+ import type { DocumentJson } from './negotiate.ts';
3
3
  import type { Pagination } from './pagination.ts';
4
4
  /**
5
5
  * The site's search (TASK-22): where it lives, how its URLs are spelled, and
@@ -19,13 +19,14 @@ export declare const SEARCH_PAGE_PARAM = "page";
19
19
  /** The longest query read. Past this it is not a search, it is a post pasted into the box. */
20
20
  export declare const MAXIMUM_QUERY_LENGTH = 256;
21
21
  /**
22
- * The URL of one page of the results for a query, in one representation.
22
+ * The URL of one page of the results for a query. `representationHref` puts
23
+ * a representation's extension before the query.
23
24
  *
24
25
  * The first page carries no page number, so the form's own submission and the
25
26
  * pager's link back to it are the same URL. An empty query is the page with
26
27
  * the form and nothing else, at the bare path.
27
28
  */
28
- export declare function searchHref(query: string, index: number, representation?: Representation): string;
29
+ export declare function searchHref(query: string, index: number): string;
29
30
  /**
30
31
  * The query a request asked for: trimmed, cut to {@link MAXIMUM_QUERY_LENGTH}
31
32
  * and empty when there is none.
@@ -41,6 +42,8 @@ export declare function searchPageIndex(raw: string | undefined): number | undef
41
42
  * into `<mark>`, so the words of a post about markup are printed as words.
42
43
  */
43
44
  export declare function snippetHtml(snippet: string): string;
45
+ /** A snippet as Markdown on one line: escaped, with the matched words in bold. */
46
+ export declare function snippetMarkdown(snippet: string): string;
44
47
  /** One hit as JSON: the document's own JSON summary, and where it matched. */
45
48
  export interface SearchResultJson extends DocumentJson {
46
49
  /** {@link snippetHtml} of the passage the words were found in. */
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/web/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;;;GAQG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,WAAW,aAAa,CAAC;AAEtC,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,SAAS,CAAC;AAExC,8FAA8F;AAC9F,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,cAAc,GAAG,MAAM,CAQhG;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAK3E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAInD;AAED,8EAA8E;AAC9E,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACtC,oDAAoD;IACpD,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAWjE"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/web/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;;;GAQG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,WAAW,aAAa,CAAC;AAEtC,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,SAAS,CAAC;AAExC,8FAA8F;AAC9F,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAM/D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAK3E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAInD;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED,8EAA8E;AAC9E,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACtC,oDAAoD;IACpD,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAWjE"}
@@ -1,6 +1,7 @@
1
1
  import { SNIPPET_CLOSE, SNIPPET_OPEN } from '../content/search.js';
2
2
  import { escapeText } from '../util/html.js';
3
- import { documentJson, JSON_SCHEMA_VERSION, representationHref } from './negotiate.js';
3
+ import { escapeInline, oneLine } from './markdown-page.js';
4
+ import { documentJson, JSON_SCHEMA_VERSION } from './negotiate.js';
4
5
  /**
5
6
  * The site's search (TASK-22): where it lives, how its URLs are spelled, and
6
7
  * what a hit looks like once it leaves the index.
@@ -19,21 +20,21 @@ export const SEARCH_PAGE_PARAM = 'page';
19
20
  /** The longest query read. Past this it is not a search, it is a post pasted into the box. */
20
21
  export const MAXIMUM_QUERY_LENGTH = 256;
21
22
  /**
22
- * The URL of one page of the results for a query, in one representation.
23
+ * The URL of one page of the results for a query. `representationHref` puts
24
+ * a representation's extension before the query.
23
25
  *
24
26
  * The first page carries no page number, so the form's own submission and the
25
27
  * pager's link back to it are the same URL. An empty query is the page with
26
28
  * the form and nothing else, at the bare path.
27
29
  */
28
- export function searchHref(query, index, representation) {
30
+ export function searchHref(query, index) {
29
31
  const params = new URLSearchParams();
30
32
  if (query !== '')
31
33
  params.set(SEARCH_QUERY_PARAM, query);
32
34
  if (index > 0)
33
35
  params.set(SEARCH_PAGE_PARAM, String(index + 1));
34
36
  const search = params.toString();
35
- const path = representation === undefined ? SEARCH_PATH : representationHref(SEARCH_PATH, representation);
36
- return search === '' ? path : `${path}?${search}`;
37
+ return search === '' ? SEARCH_PATH : `${SEARCH_PATH}?${search}`;
37
38
  }
38
39
  /**
39
40
  * The query a request asked for: trimmed, cut to {@link MAXIMUM_QUERY_LENGTH}
@@ -63,6 +64,20 @@ export function snippetHtml(snippet) {
63
64
  .replaceAll(SNIPPET_OPEN, '<mark>')
64
65
  .replaceAll(SNIPPET_CLOSE, '</mark>');
65
66
  }
67
+ /** A snippet as Markdown on one line: escaped, with the matched words in bold. */
68
+ export function snippetMarkdown(snippet) {
69
+ return oneLine(snippet)
70
+ .split(SNIPPET_OPEN)
71
+ .map((part, index) => {
72
+ if (index === 0)
73
+ return escapeInline(part);
74
+ const close = part.indexOf(SNIPPET_CLOSE);
75
+ const marked = close < 0 ? part : part.slice(0, close);
76
+ const rest = close < 0 ? '' : part.slice(close + SNIPPET_CLOSE.length);
77
+ return `**${escapeInline(marked)}**${escapeInline(rest)}`;
78
+ })
79
+ .join('');
80
+ }
66
81
  /**
67
82
  * A page of results as JSON.
68
83
  *
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/web/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/web/search.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"site-index.d.ts","sourceRoot":"","sources":["../../src/web/site-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAKpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAgB3C;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAQlF;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAMxD"}
1
+ {"version":3,"file":"site-index.d.ts","sourceRoot":"","sources":["../../src/web/site-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAKpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAiB3C;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAQlF;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAMxD"}
@@ -8,7 +8,8 @@ import { markdownUrlFor } from './markdown-representation.js';
8
8
  import { navigationLinks } from '../site/navigation.js';
9
9
  import { lastModifiedOf, latestModified } from './negotiate.js';
10
10
  import { pageCount } from './pagination.js';
11
- import { conditionalHeaders, documentLabel, encodePath, notFound } from './request.js';
11
+ import { conditionalHeaders, documentLabel, encodePath } from './request.js';
12
+ import { notFound } from './status-pages.js';
12
13
  import { servedPath, siteView } from './site-view.js';
13
14
  import { sitemapResponse } from './sitemap.js';
14
15
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"site-index.js","sourceRoot":"","sources":["../../src/web/site-index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"site-index.js","sourceRoot":"","sources":["../../src/web/site-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Context } from 'hono';
2
+ import type { ContentfulStatusCode } from 'hono/utils/http-status';
3
+ import type { GeekityEnv } from './env.ts';
4
+ import type { StatusPageName } from './render.ts';
5
+ /** The theme's 404 page, for a path that resolved to nothing. */
6
+ export declare function notFound(c: Context<GeekityEnv>): Response;
7
+ /** The theme's 410 page, for the URL of a document that was deleted. */
8
+ export declare function gone(c: Context<GeekityEnv>): Response;
9
+ /** How {@link statusMarkdownResponse} answers. */
10
+ export interface StatusMarkdownOptions {
11
+ /** The maintenance page's back-by time. */
12
+ until?: Date | undefined;
13
+ /** The body when the theme's fails to render; without one the failure is thrown. */
14
+ fallback?: string | undefined;
15
+ headers?: Record<string, string> | undefined;
16
+ }
17
+ /** A status page's Markdown, labelled as the representation the request asked for. */
18
+ export declare function statusMarkdownResponse(c: Context<GeekityEnv>, representation: 'markdown' | 'text', page: StatusPageName, status: ContentfulStatusCode, { until, fallback, headers }?: StatusMarkdownOptions): Response;
19
+ //# sourceMappingURL=status-pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-pages.d.ts","sourceRoot":"","sources":["../../src/web/status-pages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,iEAAiE;AACjE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAEzD;AAED,wEAAwE;AACxE,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAErD;AAoBD,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,KAAK,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC9C;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,CACpC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,EACtB,cAAc,EAAE,UAAU,GAAG,MAAM,EACnC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,oBAAoB,EAC5B,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAE,qBAA0B,GACvD,QAAQ,CASV"}
@@ -0,0 +1,44 @@
1
+ import { statusMarkdown } from './markdown-representation.js';
2
+ import { CONTENT_TYPES, representationOf } from './negotiate.js';
3
+ import { requestPath } from './request.js';
4
+ /** The theme's 404 page, for a path that resolved to nothing. */
5
+ export function notFound(c) {
6
+ return statusPage(c, 'notFound', 404, (url) => c.var.renderer.renderNotFound(url));
7
+ }
8
+ /** The theme's 410 page, for the URL of a document that was deleted. */
9
+ export function gone(c) {
10
+ return statusPage(c, 'gone', 410, (url) => c.var.renderer.renderGone(url));
11
+ }
12
+ /**
13
+ * A status page in the representation the request asked for: Markdown for a
14
+ * `.md` URL or an `Accept` that prefers it, HTML for anything else.
15
+ */
16
+ function statusPage(c, page, status, html) {
17
+ const pathname = requestPath(c);
18
+ const representation = representationOf(pathname, c.req.header('accept'));
19
+ if (representation === 'markdown' || representation === 'text') {
20
+ return statusMarkdownResponse(c, representation, page, status);
21
+ }
22
+ return c.html(html(pathname), status, { vary: 'Accept' });
23
+ }
24
+ /** A status page's Markdown, labelled as the representation the request asked for. */
25
+ export function statusMarkdownResponse(c, representation, page, status, { until, fallback, headers } = {}) {
26
+ const draw = () => statusMarkdown(c, page, requestPath(c), until);
27
+ const body = fallback === undefined ? draw() : orFallback(draw, fallback);
28
+ return c.body(body, status, {
29
+ ...headers,
30
+ vary: 'Accept',
31
+ 'content-type': CONTENT_TYPES[representation],
32
+ 'content-disposition': 'inline',
33
+ });
34
+ }
35
+ function orFallback(draw, fallback) {
36
+ try {
37
+ return draw();
38
+ }
39
+ catch (error) {
40
+ console.error('A status page could not be rendered in Markdown:', error);
41
+ return fallback;
42
+ }
43
+ }
44
+ //# sourceMappingURL=status-pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-pages.js","sourceRoot":"","sources":["../../src/web/status-pages.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,iEAAiE;AACjE,MAAM,UAAU,QAAQ,CAAC,CAAsB;IAC7C,OAAO,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,IAAI,CAAC,CAAsB;IACzC,OAAO,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CACjB,CAAsB,EACtB,IAAoB,EACpB,MAA4B,EAC5B,IAA6B;IAE7B,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1E,IAAI,cAAc,KAAK,UAAU,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC/D,OAAO,sBAAsB,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC5D,CAAC;AAWD,sFAAsF;AACtF,MAAM,UAAU,sBAAsB,CACpC,CAAsB,EACtB,cAAmC,EACnC,IAAoB,EACpB,MAA4B,EAC5B,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAA0B,EAAE;IAExD,MAAM,IAAI,GAAG,GAAW,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1E,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE;QAC1B,GAAG,OAAO;QACV,IAAI,EAAE,QAAQ;QACd,cAAc,EAAE,aAAa,CAAC,cAAc,CAAC;QAC7C,qBAAqB,EAAE,QAAQ;KAChC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,IAAkB,EAAE,QAAgB;IACtD,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAC;QACzE,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -13,6 +13,10 @@ export interface FetchPublicOptions {
13
13
  readonly headers?: Readonly<Record<string, string>> & {
14
14
  readonly 'user-agent'?: never;
15
15
  };
16
+ /** The `User-Agent` sent. Defaults to the site's own. */
17
+ readonly userAgent?: string;
18
+ /** Which URLs may be fetched, checked on every hop besides the public-address check. */
19
+ readonly allowed?: (url: URL) => boolean;
16
20
  /** The content types taken, and what to call anything else when refusing it. */
17
21
  readonly contentType: {
18
22
  readonly pattern: RegExp;
@@ -60,6 +64,8 @@ export interface RequestPublicOptions {
60
64
  readonly 'user-agent'?: never;
61
65
  };
62
66
  readonly body?: string;
67
+ readonly userAgent?: string | undefined;
68
+ readonly allowed?: ((url: URL) => boolean) | undefined;
63
69
  }
64
70
  export interface PublicAnswer {
65
71
  readonly ok: true;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-public.d.ts","sourceRoot":"","sources":["../../src/webmention/fetch-public.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-public.d.ts","sourceRoot":"","sources":["../../src/webmention/fetch-public.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,8 @@ export async function fetchPublic(target, options) {
17
17
  lookup: options.lookup,
18
18
  signal: options.signal,
19
19
  headers: { ...options.headers, accept: options.accept },
20
+ userAgent: options.userAgent,
21
+ allowed: options.allowed,
20
22
  });
21
23
  if (!answered.ok)
22
24
  return answered;
@@ -52,13 +54,16 @@ export async function requestPublic(target, options) {
52
54
  let body = options.body ?? null;
53
55
  let headers = {
54
56
  ...options.headers,
55
- 'user-agent': WEBMENTION_USER_AGENT,
57
+ 'user-agent': options.userAgent ?? WEBMENTION_USER_AGENT,
56
58
  };
57
59
  try {
58
60
  for (let hop = 0;; hop += 1) {
59
61
  const url = webUrl(at);
60
62
  if (url === undefined)
61
63
  return refuse('not an http or https URL');
64
+ if (options.allowed !== undefined && !options.allowed(url)) {
65
+ return refuse(`${url.origin} is not a host this fetch may reach`);
66
+ }
62
67
  if (!(await publicHost(url.hostname, options.lookup))) {
63
68
  return refuse('not a public address');
64
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-public.js","sourceRoot":"","sources":["../../src/webmention/fetch-public.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-public.js","sourceRoot":"","sources":["../../src/webmention/fetch-public.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geekity/cms",
3
- "version": "0.39.0",
3
+ "version": "0.41.0",
4
4
  "type": "module",
5
5
  "description": "A file-first CMS: Markdown content, a SQLite index, a Hono server that is both the editor and the public site.",
6
6
  "license": "MIT",
@@ -0,0 +1,8 @@
1
+ {#
2
+ The body of the 404 page's Markdown, between the header, which writes
3
+ `title` as its heading, and the footer. `url` is the path that was asked
4
+ for. Autoescaping is off; links go through `markdownUrl`.
5
+ #}
6
+ Content not found.
7
+
8
+ Go [home]({{ "/" | markdownUrl }}), or [search the site]({{ "/search/" | markdownUrl }}).
@@ -0,0 +1,7 @@
1
+ {#
2
+ The body of the 410 page's Markdown, for the URL of a document that was
3
+ deleted. The context is the 404's.
4
+ #}
5
+ This content has been deleted.
6
+
7
+ Go [home]({{ "/" | markdownUrl }}), or [search the site]({{ "/search/" | markdownUrl }}).
@@ -0,0 +1,8 @@
1
+ {#
2
+ The body of the 500 page's Markdown, for a request that failed on the
3
+ server. The context is the 404's. When this fails too, the CMS writes a
4
+ fixed body instead.
5
+ #}
6
+ This page could not be shown because of a problem on the server. Try again in a moment.
7
+
8
+ Go [home]({{ "/" | markdownUrl }}), or [search the site]({{ "/search/" | markdownUrl }}).
@@ -0,0 +1,9 @@
1
+ {#
2
+ The body of the maintenance page's Markdown. `until` (an ISO 8601 time)
3
+ and `untilText` (an HTTP date) are when the operator expects the site
4
+ back, absent when they named no time or it has passed. Otherwise the
5
+ context is the 404's. When this fails, the CMS writes a fixed body instead.
6
+ #}
7
+ This site is down for maintenance and will be back shortly.{% if until %} It should be back by {{ untilText }}.{% endif %} Please try again then.
8
+
9
+ Go [home]({{ "/" | markdownUrl }}), or [search the site]({{ "/search/" | markdownUrl }}).
@@ -87,23 +87,19 @@
87
87
  {% endif %}
88
88
  {% set breadcrumbs = [{ "name": "Home", "url": "/" }].concat(crumbs) if crumbs.length else [] %}
89
89
  <!doctype html>
90
- <html lang="{{ site.language | default("en") }}">
90
+ <html lang="{{ site.language | default("en") }}"{% if theme.scheme %} data-scheme="{{ theme.scheme.name }}" data-mode="{{ theme.mode }}"{% endif %}>
91
91
  <head>
92
92
  <meta charset="utf-8">
93
93
  <meta name="viewport" content="width=device-width, initial-scale=1">
94
- {#
95
- The colours the theme's `theme.json` declares (TASK-146). The colour
96
- scheme goes before the stylesheet, so a reader in dark mode gets a dark
97
- canvas while the stylesheet is still on its way rather than a white
98
- flash. The theme colour tints the browser around the page, one per
99
- scheme, and is the page's own background so the two meet without a seam.
100
- #}
101
- {% if theme.colorScheme %}
102
- <meta name="color-scheme" content="{{ theme.colorScheme }}">
94
+ {% set colorModes = (["light", "dark"] if theme.mode == "system" else [theme.mode]) if theme.scheme else ["light", "dark"] %}
95
+ {% set themeColor = theme.scheme.themeColor if theme.scheme else theme.themeColor %}
96
+ {% set colorScheme = colorModes | join(" ") if theme.scheme else theme.colorScheme %}
97
+ {% if colorScheme %}
98
+ <meta name="color-scheme" content="{{ colorScheme }}">
103
99
  {% endif %}
104
- {% for scheme in ["light", "dark"] %}
105
- {% if theme.themeColor[scheme] %}
106
- <meta name="theme-color" content="{{ theme.themeColor[scheme] }}" media="(prefers-color-scheme: {{ scheme }})">
100
+ {% for mode in colorModes %}
101
+ {% if themeColor[mode] %}
102
+ <meta name="theme-color" content="{{ themeColor[mode] }}"{% if colorModes.length > 1 %} media="(prefers-color-scheme: {{ mode }})"{% endif %}>
107
103
  {% endif %}
108
104
  {% endfor %}
109
105
  <title>{% block title %}{% if pageTitle %}{{ pageTitle }} &middot; {% endif %}{{ site.title }}{% endblock %}</title>
@@ -114,6 +110,18 @@
114
110
  {% endif %}
115
111
  <link rel="canonical" href="{{ canonicalUrl }}">
116
112
  <link rel="stylesheet" href="{{ "style.css" | asset }}">
113
+ {% if fonts %}
114
+ {% for href in fonts.stylesheets %}
115
+ <link rel="stylesheet" href="{{ href | url }}">
116
+ {% endfor %}
117
+ <style{% if cspNonce %} nonce="{{ cspNonce }}"{% endif %}>
118
+ :root {
119
+ {% for font in fonts.properties %}
120
+ {{ font.property }}: {{ font.value | safe }};
121
+ {% endfor %}
122
+ }
123
+ </style>
124
+ {% endif %}
117
125
  {% block speculationRules %}
118
126
  {#
119
127
  Prefetch the page behind a link the reader is about to follow: a hover
@@ -283,7 +291,9 @@
283
291
  <header class="global-header">
284
292
  {% if atRoot %}
285
293
  <h1 class="main-heading">
286
- <a href="{{ "/" | url }}">{{ site.title }}</a>
294
+ <a href="{{ "/" | url }}">
295
+ {%- if headerIcon %}<img class="site-icon" src="{{ headerIcon | url }}" alt="" width="48" height="48">{% endif -%}
296
+ {{ site.title }}</a>
287
297
  </h1>
288
298
  {% if site.tagline %}
289
299
  <p class="site-tagline">{{ site.tagline }}</p>
@@ -291,7 +301,9 @@
291
301
  {% else %}
292
302
  {#- The solo author's own archive claims the homepage back, so the
293
303
  two URLs are provably one person (TASK-180). -#}
294
- <a class="header-link-home"{% if isAuthorArchive and soloAuthor.url == author.url %} rel="me"{% endif %} href="{{ "/" | url }}">{{ site.title }}</a>
304
+ <a class="header-link-home"{% if isAuthorArchive and soloAuthor.url == author.url %} rel="me"{% endif %} href="{{ "/" | url }}">
305
+ {%- if headerIcon %}<img class="site-icon" src="{{ headerIcon | url }}" alt="" width="24" height="24">{% endif -%}
306
+ {{ site.title }}</a>
295
307
  {% endif %}
296
308
  {{ nav.list(menus.primary, "Site") }}
297
309
  </header>
@@ -304,7 +316,7 @@
304
316
 
305
317
  {% block footer %}
306
318
  <footer>
307
- <p>&copy; {{ "now" | date("year") }}, {{ soloAuthor.name or site.title }}{% if license %} &middot; <a rel="license" href="{{ license.url }}">{{ license.name }}</a>{% endif %} &middot; Published with Geekity</p>
319
+ <p>&copy; {{ "now" | date("year") }}, {{ soloAuthor.name or site.title }}{% if license %} &middot; <a rel="license" href="{{ license.url }}">{{ license.name }}</a>{% endif %} &middot; Published with Geekity CMS</p>
308
320
  {#
309
321
  The footer menu: the `footer` area this theme declares in its
310
322
  `theme.json`, which a site fills in on the Navigation screen, and the
@@ -3,10 +3,6 @@
3
3
  TASK-83): the same `blog-post h-entry` a post is, with the same Published
4
4
  line inside the `e-content` and the same bio under a rule.
5
5
 
6
- Two front matter keys add to it: `contact: true` puts the contact form under
7
- the words, and `archive: true` puts every post the site has published under
8
- them, month by month (TASK-85).
9
-
10
6
  What a page does not have: an IndieNews link, since it is not a post
11
7
  anybody syndicates; neighbours, since it is in no archive; and taxonomy,
12
8
  since only posts are filed. The bio credits `siteAuthor` — a page is by
@@ -53,6 +49,10 @@
53
49
  {% include "partials/archive.njk" %}
54
50
  {% endif %}
55
51
 
52
+ {% if contactForm %}
53
+ {% include "partials/contact-form.njk" %}
54
+ {% endif %}
55
+
56
56
  {#- The rule and the footer are the bio's own: a site whose author setting
57
57
  names nobody with an account here ends the page at its words. -#}
58
58
  {% if bioAuthor %}
@@ -72,8 +72,4 @@
72
72
  {% include "partials/comment-form.njk" %}
73
73
  {% endif %}
74
74
 
75
- {# Only a page whose front matter says `contact: true` has one (TASK-56). #}
76
- {% if contactForm %}
77
- {% include "partials/contact-form.njk" %}
78
- {% endif %}
79
75
  {% endblock %}
@@ -68,7 +68,7 @@
68
68
  {%- else %}
69
69
  <strong class="p-name">{{ bioAuthor.name }}</strong>
70
70
  {%- endif %}
71
- {%- if bioAuthor.jobTitle %}, a <span class="p-job-title">{{ bioAuthor.jobTitle }}</span>{% endif %}
71
+ {%- if bioAuthor.jobTitle %}, <span class="p-job-title">{{ bioAuthor.jobTitle }}</span>{% endif %}
72
72
  {%- if bioAuthor.location %} from <span class="p-locality">{{ bioAuthor.location }}</span>{% endif %}.
73
73
  </p>
74
74
 
@@ -1,5 +1,5 @@
1
1
  {#
2
- The form under a page whose front matter says `contact: true`.
2
+ The form on a page whose front matter says `contact: true`.
3
3
 
4
4
  `contactForm` is on the context only when the page asked for one, so a layout
5
5
  asks `{% if contactForm %}` and nothing else. A site replaces this whole