@geekity/cms 0.28.0 → 0.29.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 (187) hide show
  1. package/README.md +303 -53
  2. package/admin/pages/comments/all.njk +3 -1
  3. package/admin/pages/federation/followers.njk +8 -2
  4. package/dist/admin/comments.d.ts +2 -0
  5. package/dist/admin/comments.d.ts.map +1 -1
  6. package/dist/admin/comments.js +19 -49
  7. package/dist/admin/comments.js.map +1 -1
  8. package/dist/admin/documents.d.ts +5 -0
  9. package/dist/admin/documents.d.ts.map +1 -1
  10. package/dist/admin/documents.js +45 -17
  11. package/dist/admin/documents.js.map +1 -1
  12. package/dist/admin/federation.d.ts +21 -1
  13. package/dist/admin/federation.d.ts.map +1 -1
  14. package/dist/admin/federation.js +17 -7
  15. package/dist/admin/federation.js.map +1 -1
  16. package/dist/admin/store.d.ts +64 -10
  17. package/dist/admin/store.d.ts.map +1 -1
  18. package/dist/admin/store.js +166 -17
  19. package/dist/admin/store.js.map +1 -1
  20. package/dist/cli.js +2 -2
  21. package/dist/cli.js.map +1 -1
  22. package/dist/comments/form.d.ts +3 -1
  23. package/dist/comments/form.d.ts.map +1 -1
  24. package/dist/comments/form.js +2 -1
  25. package/dist/comments/form.js.map +1 -1
  26. package/dist/comments/index.d.ts +2 -2
  27. package/dist/comments/index.d.ts.map +1 -1
  28. package/dist/comments/index.js +1 -1
  29. package/dist/comments/index.js.map +1 -1
  30. package/dist/comments/records.d.ts +24 -20
  31. package/dist/comments/records.d.ts.map +1 -1
  32. package/dist/comments/records.js +74 -23
  33. package/dist/comments/records.js.map +1 -1
  34. package/dist/comments/reply-notices.d.ts +42 -0
  35. package/dist/comments/reply-notices.d.ts.map +1 -0
  36. package/dist/comments/reply-notices.js +76 -0
  37. package/dist/comments/reply-notices.js.map +1 -0
  38. package/dist/comments/reply-post.d.ts +49 -0
  39. package/dist/comments/reply-post.d.ts.map +1 -0
  40. package/dist/comments/reply-post.js +66 -0
  41. package/dist/comments/reply-post.js.map +1 -0
  42. package/dist/comments/routes.d.ts +6 -1
  43. package/dist/comments/routes.d.ts.map +1 -1
  44. package/dist/comments/routes.js +49 -21
  45. package/dist/comments/routes.js.map +1 -1
  46. package/dist/comments/submission.d.ts +8 -25
  47. package/dist/comments/submission.d.ts.map +1 -1
  48. package/dist/comments/submission.js +19 -38
  49. package/dist/comments/submission.js.map +1 -1
  50. package/dist/comments/viewer.d.ts.map +1 -1
  51. package/dist/comments/viewer.js +1 -0
  52. package/dist/comments/viewer.js.map +1 -1
  53. package/dist/content/citation.d.ts +1 -0
  54. package/dist/content/citation.d.ts.map +1 -1
  55. package/dist/content/citation.js +2 -0
  56. package/dist/content/citation.js.map +1 -1
  57. package/dist/content/original.d.ts +6 -1
  58. package/dist/content/original.d.ts.map +1 -1
  59. package/dist/content/original.js +7 -4
  60. package/dist/content/original.js.map +1 -1
  61. package/dist/content/store.d.ts +43 -11
  62. package/dist/content/store.d.ts.map +1 -1
  63. package/dist/content/store.js +170 -10
  64. package/dist/content/store.js.map +1 -1
  65. package/dist/content/sync.d.ts +8 -0
  66. package/dist/content/sync.d.ts.map +1 -1
  67. package/dist/content/sync.js +164 -71
  68. package/dist/content/sync.js.map +1 -1
  69. package/dist/federation/article.d.ts.map +1 -1
  70. package/dist/federation/article.js +2 -1
  71. package/dist/federation/article.js.map +1 -1
  72. package/dist/federation/backfill.d.ts +114 -0
  73. package/dist/federation/backfill.d.ts.map +1 -0
  74. package/dist/federation/backfill.js +312 -0
  75. package/dist/federation/backfill.js.map +1 -0
  76. package/dist/federation/inbox.js +1 -1
  77. package/dist/federation/inbox.js.map +1 -1
  78. package/dist/federation/records.d.ts +13 -0
  79. package/dist/federation/records.d.ts.map +1 -1
  80. package/dist/federation/records.js +49 -10
  81. package/dist/federation/records.js.map +1 -1
  82. package/dist/federation/replies.d.ts +6 -0
  83. package/dist/federation/replies.d.ts.map +1 -1
  84. package/dist/federation/replies.js +18 -1
  85. package/dist/federation/replies.js.map +1 -1
  86. package/dist/index.d.ts +11 -3
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +79 -10
  89. package/dist/index.js.map +1 -1
  90. package/dist/init.d.ts +1 -1
  91. package/dist/init.d.ts.map +1 -1
  92. package/dist/init.js +1 -7
  93. package/dist/init.js.map +1 -1
  94. package/dist/web/context.d.ts +18 -3
  95. package/dist/web/context.d.ts.map +1 -1
  96. package/dist/web/context.js +17 -4
  97. package/dist/web/context.js.map +1 -1
  98. package/dist/web/conversation.d.ts +155 -16
  99. package/dist/web/conversation.d.ts.map +1 -1
  100. package/dist/web/conversation.js +602 -135
  101. package/dist/web/conversation.js.map +1 -1
  102. package/dist/web/documents.d.ts +0 -22
  103. package/dist/web/documents.d.ts.map +1 -1
  104. package/dist/web/documents.js +1 -34
  105. package/dist/web/documents.js.map +1 -1
  106. package/dist/web/feed-item.d.ts +12 -8
  107. package/dist/web/feed-item.d.ts.map +1 -1
  108. package/dist/web/feed-item.js +10 -10
  109. package/dist/web/feed-item.js.map +1 -1
  110. package/dist/web/feed-rss.d.ts.map +1 -1
  111. package/dist/web/feed-rss.js +34 -10
  112. package/dist/web/feed-rss.js.map +1 -1
  113. package/dist/web/feed-source.d.ts +30 -1
  114. package/dist/web/feed-source.d.ts.map +1 -1
  115. package/dist/web/feed-source.js +25 -0
  116. package/dist/web/feed-source.js.map +1 -1
  117. package/dist/web/feeds.d.ts +1 -1
  118. package/dist/web/feeds.d.ts.map +1 -1
  119. package/dist/web/feeds.js +7 -2
  120. package/dist/web/feeds.js.map +1 -1
  121. package/dist/web/guids.d.ts +59 -0
  122. package/dist/web/guids.d.ts.map +1 -0
  123. package/dist/web/guids.js +79 -0
  124. package/dist/web/guids.js.map +1 -0
  125. package/dist/web/index.d.ts +5 -6
  126. package/dist/web/index.d.ts.map +1 -1
  127. package/dist/web/index.js +3 -3
  128. package/dist/web/index.js.map +1 -1
  129. package/dist/web/redirects.d.ts +12 -0
  130. package/dist/web/redirects.d.ts.map +1 -1
  131. package/dist/web/redirects.js +16 -4
  132. package/dist/web/redirects.js.map +1 -1
  133. package/dist/web/render.d.ts +19 -9
  134. package/dist/web/render.d.ts.map +1 -1
  135. package/dist/web/render.js +44 -42
  136. package/dist/web/render.js.map +1 -1
  137. package/dist/web/routes.d.ts +2 -2
  138. package/dist/web/routes.d.ts.map +1 -1
  139. package/dist/web/routes.js +94 -31
  140. package/dist/web/routes.js.map +1 -1
  141. package/dist/webmention/index.d.ts +1 -1
  142. package/dist/webmention/index.d.ts.map +1 -1
  143. package/dist/webmention/index.js +1 -1
  144. package/dist/webmention/index.js.map +1 -1
  145. package/dist/webmention/links.d.ts +55 -0
  146. package/dist/webmention/links.d.ts.map +1 -1
  147. package/dist/webmention/links.js +162 -0
  148. package/dist/webmention/links.js.map +1 -1
  149. package/dist/webmention/microformats.d.ts +15 -0
  150. package/dist/webmention/microformats.d.ts.map +1 -1
  151. package/dist/webmention/microformats.js +63 -1
  152. package/dist/webmention/microformats.js.map +1 -1
  153. package/dist/webmention/pingback.js +2 -1
  154. package/dist/webmention/pingback.js.map +1 -1
  155. package/dist/webmention/receive.d.ts +5 -0
  156. package/dist/webmention/receive.d.ts.map +1 -1
  157. package/dist/webmention/receive.js +99 -3
  158. package/dist/webmention/receive.js.map +1 -1
  159. package/dist/webmention/reply-context.d.ts +15 -0
  160. package/dist/webmention/reply-context.d.ts.map +1 -1
  161. package/dist/webmention/reply-context.js +29 -0
  162. package/dist/webmention/reply-context.js.map +1 -1
  163. package/dist/webmention/reply-contexts.d.ts +6 -0
  164. package/dist/webmention/reply-contexts.d.ts.map +1 -1
  165. package/dist/webmention/reply-contexts.js +16 -10
  166. package/dist/webmention/reply-contexts.js.map +1 -1
  167. package/dist/webmention/routes.d.ts.map +1 -1
  168. package/dist/webmention/routes.js +2 -1
  169. package/dist/webmention/routes.js.map +1 -1
  170. package/dist/webmention/service.d.ts +30 -1
  171. package/dist/webmention/service.d.ts.map +1 -1
  172. package/dist/webmention/service.js +172 -32
  173. package/dist/webmention/service.js.map +1 -1
  174. package/package.json +1 -2
  175. package/themes/default/README.md +242 -78
  176. package/themes/default/layouts/base.njk +8 -0
  177. package/themes/default/layouts/comment.njk +90 -0
  178. package/themes/default/layouts/front-page.njk +9 -47
  179. package/themes/default/layouts/page.njk +2 -0
  180. package/themes/default/layouts/post.njk +14 -2
  181. package/themes/default/partials/backlinks.njk +19 -0
  182. package/themes/default/partials/cited-page.njk +3 -1
  183. package/themes/default/partials/comment-form.njk +10 -0
  184. package/themes/default/partials/comment.njk +79 -0
  185. package/themes/default/partials/conversation.njk +14 -59
  186. package/themes/default/src/style.css +42 -0
  187. package/themes/default/static/style.css +67 -0
@@ -7,7 +7,7 @@ import type { DocumentNeighbours, SearchHit } from '../content/store.ts';
7
7
  import type { AuthorContext } from './authors.ts';
8
8
  import type { CommentFormContext, CommentViewer } from '../comments/form.ts';
9
9
  import type { ContactFormContext } from '../contact/form.ts';
10
- import type { Conversation } from './conversation.ts';
10
+ import type { CommentThread, Conversation } from './conversation.ts';
11
11
  import type { FrontPageSlugs, SiteData } from './context.ts';
12
12
  import type { Pagination } from './pagination.ts';
13
13
  import type { TaxonomyBases, TaxonomyRedirect } from './taxonomy.ts';
@@ -23,6 +23,7 @@ export declare const TEMPLATES: {
23
23
  readonly category: 'layouts/category.njk';
24
24
  readonly author: 'layouts/author.njk';
25
25
  readonly search: 'layouts/search.njk';
26
+ readonly comment: 'layouts/comment.njk';
26
27
  readonly notFound: 'layouts/404.njk';
27
28
  readonly gone: 'layouts/410.njk';
28
29
  readonly serverError: 'layouts/500.njk';
@@ -154,6 +155,11 @@ export interface Renderer {
154
155
  * `snippet` of HTML showing where the words were found.
155
156
  */
156
157
  renderSearch(search: SearchPage): string;
158
+ /**
159
+ * A native comment's own page (TASK-318) through the comment layout: the
160
+ * comment, the thread above it from its post down, and its replies.
161
+ */
162
+ renderComment(thread: CommentThread): string;
157
163
  /** The 404 page, for a path that resolved to nothing. */
158
164
  renderNotFound(url: string): string;
159
165
  /** The 410 page, for the URL of a document that was deleted (TASK-195). */
@@ -291,19 +297,23 @@ export interface CreateRendererOptions {
291
297
  */
292
298
  neighbours?: ((document: Document) => DocumentNeighbours) | undefined;
293
299
  /**
294
- * The newest posts, for `recentPosts` on the front page (TASK-79).
295
- *
296
- * Which posts are recent is `web/recent.ts`'s rule and the query behind it
297
- * is the index's; this is only how the answer reaches a template. Asked per
298
- * render, and only while drawing the front page, so a site whose `/` is its
299
- * listing never runs it at all.
300
+ * The listed posts and pages of the site whose body links to a document,
301
+ * newest first, for `backlinks` on its page (TASK-322). Injected and asked
302
+ * per render for the reason the neighbours are; a renderer built without it
303
+ * lists none.
304
+ */
305
+ backlinks?: ((document: Document) => readonly Document[]) | undefined;
306
+ /**
307
+ * The newest `count` published posts, for `newestPosts` on the front page
308
+ * (TASK-317). The theme chooses the count; the index decides what is
309
+ * published.
300
310
  */
301
- recentPosts?: (() => readonly Document[]) | undefined;
311
+ newestPosts?: ((count: number) => readonly Document[]) | undefined;
302
312
  /**
303
313
  * Every published post, for a page whose front matter says `archive: true`
304
314
  * (TASK-85).
305
315
  *
306
- * Injected for the reason the recent posts are, and asked per render and
316
+ * Injected for the reason the newest posts are, and asked per render and
307
317
  * only for a page that asked for the list: an archive is the one listing
308
318
  * with no paging, so a site with a thousand posts runs the query on the one
309
319
  * page that prints a thousand links and on no other.
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/web/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/web/render.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,9 @@ import { archiveMonths, archiveOpen } from './archive.js';
9
9
  import { authorContext, siteAuthorContext } from './authors.js';
10
10
  import { citedPhotoContext, citedPictureContext, createSiteDataSource, documentContext, frontPageSlugs, postsPerPage, siteLocale, siteTimezone, taxonomyBases, termRedirects, themeName, } from './context.js';
11
11
  import { answerable, commentPolicyOf } from '../comments/policy.js';
12
- import { activityStreamsId } from './documents.js';
12
+ import { commentAnchor } from './conversation.js';
13
+ import { commentPageHref } from './guids.js';
14
+ import { activityStreamsId, isServed } from './documents.js';
13
15
  import { commentsFeedPath } from './feeds.js';
14
16
  import { navigationMenus } from './navigation.js';
15
17
  import { resolveLicense } from './license.js';
@@ -20,7 +22,7 @@ import { createThemeSource, findThemeFile } from './themes.js';
20
22
  import { citedPictureAlt } from '../webmention/cited-picture.js';
21
23
  import { readCitedStart } from '../webmention/cited-start.js';
22
24
  import { handSyndicationOf } from '../webmention/syndication.js';
23
- import { locationContext, syndicationLinks } from './context.js';
25
+ import { backlinkContext, locationContext, syndicationLinks } from './context.js';
24
26
  import { pingbackEndpointFor } from '../webmention/pingback.js';
25
27
  import { webmentionEndpointFor } from '../webmention/routes.js';
26
28
  /** Templates the default theme ships and the public routes ask for by name. */
@@ -32,6 +34,7 @@ export const TEMPLATES = {
32
34
  category: 'layouts/category.njk',
33
35
  author: 'layouts/author.njk',
34
36
  search: 'layouts/search.njk',
37
+ comment: 'layouts/comment.njk',
35
38
  notFound: 'layouts/404.njk',
36
39
  gone: 'layouts/410.njk',
37
40
  serverError: 'layouts/500.njk',
@@ -209,24 +212,19 @@ export function createRenderer(options) {
209
212
  const context = documentContext(document, config, authorContext(people, document.author), loading, options.replyContext);
210
213
  return { ...context, ...citedBy(document) };
211
214
  }
212
- /**
213
- * The front page's recent posts, as the entries a listing prints, or nothing
214
- * at all when the renderer was built without a source for them.
215
- *
216
- * One read of the users file for the whole list, the way a listing does it:
217
- * five posts is five bylines resolved against the same people.
218
- *
219
- * The first post's first image is fetched at once when the front page's own
220
- * words above it have no image, because it is then the first one on the page.
221
- */
222
- function recentPostsContext(page) {
223
- const posts = options.recentPosts?.();
224
- if (posts === undefined)
215
+ function newestPostsContext(page) {
216
+ const source = options.newestPosts;
217
+ if (source === undefined)
225
218
  return {};
226
- const people = users();
227
219
  const pageLeads = page.html.includes('<img');
228
220
  return {
229
- recentPosts: posts.map((document, index) => entryContext(document, people, { lead: !pageLeads && index === 0 })),
221
+ newestPosts: (count) => {
222
+ if (typeof count !== 'number' || !Number.isInteger(count) || count < 1) {
223
+ throw new RangeError(`newestPosts(count) takes a whole number of posts, at least 1, not ${String(count)}`);
224
+ }
225
+ const people = users();
226
+ return source(count).map((document, index) => entryContext(document, people, { lead: !pageLeads && index === 0 }));
227
+ },
230
228
  };
231
229
  }
232
230
  /**
@@ -299,17 +297,16 @@ export function createRenderer(options) {
299
297
  // added here rather than in `documentContext` because it needs the
300
298
  // site's base URL, which a document on its own does not carry.
301
299
  const objectId = activityStreamsId(document, config.baseUrl);
302
- // `commentsFeed` is where this post's replies are syndicated. It is set
303
- // here rather than in a layout because only a published post has one —
304
- // a page never federates, so nothing can ever have replied to it — and
305
- // because a site that overrides `post.njk` should keep the link anyway.
306
- // `conversation` is what the fediverse said back. It is on the context
307
- // only when there is something in it, so a theme can ask `{% if
308
- // conversation %}` and a post nobody has answered renders no empty
309
- // section (TASK-49).
310
- const said = answerable(document, commentPolicyOf(siteData.read()), config.now())
311
- ? options.conversation?.(document)
312
- : undefined;
300
+ // `conversation` is what was said back. It is on the context only when
301
+ // there is something in it, so a theme can ask `{% if conversation %}`
302
+ // and a post nobody has answered renders no empty section (TASK-49).
303
+ // `commentsFeed` is where it is syndicated, for a served document that
304
+ // shows one, and is set here rather than in a layout so that a site which
305
+ // overrides `post.njk` or `page.njk` keeps the link.
306
+ const now = config.now();
307
+ const shows = answerable(document, commentPolicyOf(siteData.read()), now);
308
+ const said = shows ? options.conversation?.(document) : undefined;
309
+ const feedsIt = shows && isServed(document, now);
313
310
  // `commentForm` is on the context only when the post is open, so the
314
311
  // theme asks `{% if commentForm %}` rather than working the rules out
315
312
  // for itself — and a closed post shows the thread with no form.
@@ -324,7 +321,7 @@ export function createRenderer(options) {
324
321
  // only when the site takes them, so a theme asks `{% if webmention %}`
325
322
  // and a site that has turned them off advertises nothing.
326
323
  const webmention = webmentionEndpointFor(siteData.read());
327
- const pingback = pingbackEndpointFor(siteData.read(), document, config.now());
324
+ const pingback = pingbackEndpointFor(siteData.read(), document, now);
328
325
  // The posts either side of this one, as the two links a theme draws under
329
326
  // an entry (TASK-79). Each is on the context only when there is one, so a
330
327
  // theme asks `{% if previous %}` and the ends of the archive draw nothing.
@@ -343,14 +340,11 @@ export function createRenderer(options) {
343
340
  ...(writer === undefined ? {} : { siteAuthor: writer }),
344
341
  ...neighbourContext('previous', either.previous, options.replyContext),
345
342
  ...neighbourContext('next', either.next, options.replyContext),
343
+ backlinks: (options.backlinks?.(document) ?? []).map((linking) => backlinkContext(linking, options.replyContext)),
346
344
  url,
347
345
  page: { ...context.page, url },
348
- ...(objectId === undefined
349
- ? {}
350
- : {
351
- activityStreams: objectId,
352
- commentsFeed: commentsFeedPath(document.permalink),
353
- }),
346
+ ...(objectId === undefined ? {} : { activityStreams: objectId }),
347
+ ...(feedsIt ? { commentsFeed: commentsFeedPath(document.permalink) } : {}),
354
348
  // And the whole archive, for a page whose front matter asked for it
355
349
  // (TASK-85). On the context only for that page, so a theme asks
356
350
  // `{% if archiveMonths %}` exactly as it asks about the contact form.
@@ -399,13 +393,7 @@ export function createRenderer(options) {
399
393
  // should say the URL this is served at rather than the one that
400
394
  // redirects here.
401
395
  url: '/',
402
- // The newest posts under the page's own words, which is what a front
403
- // page is for (decision-16). Built here rather than by the route
404
- // because it is the same document context every listing entry is, and
405
- // resolved once for the whole list the way a listing's bylines are.
406
- // `postsPage` goes with them: the front page is the one page that
407
- // links the listing by name rather than by menu item.
408
- extra: { ...recentPostsContext(document), ...postsPageContext(), ...extra },
396
+ extra: { ...newestPostsContext(document), ...postsPageContext(), ...extra },
409
397
  viewer,
410
398
  });
411
399
  }
@@ -504,6 +492,20 @@ export function createRenderer(options) {
504
492
  pagination: { ...search.pagination, items },
505
493
  });
506
494
  },
495
+ renderComment({ post, comment, ancestors }) {
496
+ const url = commentPageHref(comment.id);
497
+ const on = entryContext(post, users(), { lead: false });
498
+ return render(TEMPLATES.comment, {
499
+ title: `${comment.author.name} on ${on.label}`,
500
+ url,
501
+ page: { url },
502
+ noindex: true,
503
+ comment,
504
+ ancestors,
505
+ post: on,
506
+ threadUrl: `${post.permalink}#${commentAnchor(comment.id)}`,
507
+ });
508
+ },
507
509
  renderNotFound(url) {
508
510
  return render(TEMPLATES.notFound, {
509
511
  title: 'Not found',
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/web/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/web/render.ts"],"names":[],"mappings":"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"}
@@ -30,10 +30,10 @@ export declare function listingPageHref(root: string, index: number): string;
30
30
  */
31
31
  export declare function feedHref(term: TaxonomyTerm | undefined, format: FeedFormat, bases: TaxonomyBases): string;
32
32
  /**
33
- * Where the site's comments feed lives, and where one post's does.
33
+ * Where the site's comments feed lives, and where one document's does.
34
34
  *
35
35
  * WordPress's URLs, so a site migrated from it keeps both: the whole site's
36
- * comments at `/comments/feed/`, and a post's under its own permalink. There
36
+ * comments at `/comments/feed/`, and a document's under its own permalink. There
37
37
  * is one format, RSS 2.0, because that is what a comments feed is read in.
38
38
  */
39
39
  export declare function commentsFeedHref(document: Document | undefined): string;
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/web/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAqB,MAAM,MAAM,CAAC;AAK7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAIvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AA6D5C,OAAO,KAAK,EAAkC,UAAU,EAAc,MAAM,YAAY,CAAC;AAyDzF,OAAO,KAAK,EAAY,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE3E;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CA0K3D;AA4+CD,kEAAkE;AAClE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AA6BD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,YAAY,GAAG,SAAS,EAC9B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,aAAa,GACnB,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAEvE;AAMD,4BAA4B;AAC5B,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,CAO1D"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/web/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAqB,MAAM,MAAM,CAAC;AAK7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAIvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAmE5C,OAAO,KAAK,EAAkC,UAAU,EAAc,MAAM,YAAY,CAAC;AAyDzF,OAAO,KAAK,EAAY,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE3E;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAiL3D;AAyiDD,kEAAkE;AAClE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AA6BD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,YAAY,GAAG,SAAS,EAC9B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,aAAa,GACnB,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAEvE;AAMD,4BAA4B;AAC5B,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,CAO1D"}
@@ -9,6 +9,7 @@ import { sourceVersion } from '../images/paths.js';
9
9
  import { findImageVariant, VARIANT_ASSET_PREFIX } from '../images/variants.js';
10
10
  import { ASSET_VERSION_PARAM, assetNotModified, assetRangeResponse, assetResponse, assetVersion, findThemeAsset, findUpload, IMMUTABLE_ASSET, matchesEtag, THEME_ASSET_PREFIX, UPLOAD_ASSET_MAX_AGE, UPLOAD_ASSET_PREFIX, } from './assets.js';
11
11
  import { COMMENT_NOTICE_PARAM, COMMENT_REPLY_PARAM } from '../comments/form.js';
12
+ import { answerable, commentPolicyOf } from '../comments/policy.js';
12
13
  import { commentNoticeFor, commentReplyTarget, mountComments } from '../comments/routes.js';
13
14
  import { commenterOf } from '../comments/viewer.js';
14
15
  import { CONTACT_NOTICE_PARAM, contactNoticeFor } from '../contact/form.js';
@@ -20,8 +21,9 @@ import { advertiseIdentityEndpoints } from '../indieauth/discovery.js';
20
21
  import { publicAdminBar } from './admin-bar.js';
21
22
  import { authorFeedHref, authorContext, authorHref, authorNames, parseAuthorPath, profileContext, siteAuthorContext, } from './authors.js';
22
23
  import { feedComments, spokenIn } from './conversation.js';
23
- import { goneDocumentAt, isListed, isServed, permalinkOfObjectId, previewDocumentAt, publicDocumentAt, } from './documents.js';
24
- import { commentsFeedPath, commentsFeedResponse, feedPathUnder, feedResponse, feedSize, splitFeedPath, COMMENTS_ROOT, COMMENTS_TITLE_PREFIX, FEED_FORMATS, FEED_SEGMENTS, } from './feeds.js';
24
+ import { COMMENT_PAGE_PREFIX } from './guids.js';
25
+ import { goneDocumentAt, isGone, isListed, isServed, permalinkOfObjectId, previewDocumentAt, publicDocumentAt, } from './documents.js';
26
+ import { commentsFeedPath, REPLIES_ROOT, repliesFeedPath, commentsFeedResponse, feedPathUnder, feedResponse, feedSize, splitFeedPath, COMMENTS_ROOT, COMMENTS_TITLE_PREFIX, FEED_FORMATS, FEED_SEGMENTS, } from './feeds.js';
25
27
  import { absoluteUrl, DOCUMENT_REPRESENTATIONS, documentJson, LISTING_REPRESENTATIONS, SEARCH_REPRESENTATIONS, lastModifiedOf, latestModified, MEDIA_TYPES, notAcceptableResponse, representationHref, representationEtag, representationResponse, selectRepresentation, splitRepresentationExtension, } from './negotiate.js';
26
28
  import { offsetForPage, paginate } from './pagination.js';
27
29
  import { TEMPLATES } from './render.js';
@@ -33,7 +35,7 @@ import { EMBED_PATH, embedPage, embedResponse, OEMBED_PATH, oEmbedFor, oEmbedReq
33
35
  import { generatedLlmsTxt, llmsListingTxt, LLMS_TXT_LINK, LLMS_TXT_PATH, llmsTxtResponse, ownLlmsTxt, } from './llms.js';
34
36
  import { indexNowKeyPath, indexNowKeyResponse } from './indexnow.js';
35
37
  import { searchHref, searchJson, searchPageIndex, searchQuery, SEARCH_PAGE_PARAM, SEARCH_PATH, SEARCH_QUERY_PARAM, } from './search.js';
36
- import { findQueryRedirect, redirectLocation } from './redirects.js';
38
+ import { findPathRedirect, findQueryRedirect, redirectLocation } from './redirects.js';
37
39
  import { PAGE_SEGMENT, redirectedTerm, taxonomyForSegment, termHref } from './taxonomy.js';
38
40
  /**
39
41
  * Register the public site on a Hono app.
@@ -114,6 +116,11 @@ export function mountPublicSite(app) {
114
116
  }
115
117
  // The site-wide comments feed, for the same reason and at WordPress's URL.
116
118
  app.get(commentsFeedHref(undefined), (c) => comments(c, undefined));
119
+ // A native comment's own page (TASK-318), at a fixed path so a permalink
120
+ // cannot take it.
121
+ app.get(`${COMMENT_PAGE_PREFIX}:id/`, (c) => commentPage(c, c.req.param('id')));
122
+ // The feed of one item's direct replies (TASK-324), fixed for the same reason.
123
+ app.get(`${REPLIES_ROOT}:segment/`, (c) => repliesFeed(c, c.req.param('segment')));
117
124
  // The sitemap, its children and the robots file: fixed paths at the root of
118
125
  // the site, which is the only place a crawler looks, and routes for the same
119
126
  // reason the feeds are — no document permalinked there can take the URL a
@@ -292,7 +299,7 @@ function resolveRequest(c) {
292
299
  return listing(c, request);
293
300
  }
294
301
  }
295
- const feedRequest = parseFeedPath(store, pathname, bases, authors);
302
+ const feedRequest = parseFeedPath(c, pathname, bases, authors);
296
303
  if (feedRequest !== undefined) {
297
304
  const { target, format } = feedRequest;
298
305
  const canonical = feedTargetHref(target, format, bases);
@@ -321,11 +328,11 @@ function resolveRequest(c) {
321
328
  // is the front page.
322
329
  if (document.path === pages.home?.path)
323
330
  return c.redirect('/', 301);
324
- // WordPress answered `?feed=rss2` on a permalink with that post's comments
325
- // feed, which is the only feed a post has here too. The other spellings
326
- // name a format a comments feed does not come in, so they are not a feed
327
- // request at all and the page is served.
328
- if (document.type === 'post' && queryFeedFormat(c) === 'rss') {
331
+ // WordPress answered `?feed=rss2` on a permalink with that document's
332
+ // comments feed, which is the only feed a document has here too. The other
333
+ // spellings name a format a comments feed does not come in, so they are
334
+ // not a feed request at all and the page is served.
335
+ if (queryFeedFormat(c) === 'rss' && showsConversation(c, document)) {
329
336
  return c.redirect(commentsFeedHref(document), 301);
330
337
  }
331
338
  return negotiateDocument(c, document, selectFromAccept(c, DOCUMENT_REPRESENTATIONS));
@@ -385,10 +392,8 @@ function resolveRequest(c) {
385
392
  return c.redirect(canonical, 301);
386
393
  // And a URL the site itself says has moved (TASK-128), after every live
387
394
  // lookup and after the slash that would lead to one, so a declared source
388
- // never shadows a live document. One asked for without its trailing slash
389
- // reaches the target in one hop.
390
- const declared = c.var.redirects.current().paths;
391
- const redirect = declared.get(pathname) ?? (pathname.endsWith('/') ? undefined : declared.get(`${pathname}/`));
395
+ // never shadows a live document.
396
+ const redirect = findPathRedirect(c.var.redirects.current(), pathname);
392
397
  if (redirect !== undefined) {
393
398
  return c.redirect(redirectLocation(redirect, search), redirect.status);
394
399
  }
@@ -485,9 +490,10 @@ function movedTerm(c, term) {
485
490
  *
486
491
  * The site's own canonical feeds are real routes and never reach here; what
487
492
  * does reach here is every taxonomy feed — their bases are a setting, so they
488
- * cannot be in the route table — every post's comments feed, and every alias.
493
+ * cannot be in the route table — every document's comments feed, and every alias.
489
494
  */
490
- function parseFeedPath(store, pathname, bases, authors) {
495
+ function parseFeedPath(c, pathname, bases, authors) {
496
+ const { store } = c.var;
491
497
  const split = splitFeedPath(pathname);
492
498
  if (split === undefined)
493
499
  return undefined;
@@ -505,16 +511,19 @@ function parseFeedPath(store, pathname, bases, authors) {
505
511
  ? { target: { kind: 'listing', subject: root }, format, canonical }
506
512
  : undefined;
507
513
  }
508
- // Otherwise it may be a post's comments feed. Only a published post has one:
509
- // a page never federates, so nothing in the fediverse can ever have replied
510
- // to it, and a comments feed for it would be empty for ever.
514
+ // Otherwise it may be a document's comments feed, which it has exactly when
515
+ // its page shows its conversation.
511
516
  if (format !== 'rss')
512
517
  return undefined;
513
518
  const document = publicDocumentAt(store, split.root);
514
- if (document?.type !== 'post')
519
+ if (document === undefined || !showsConversation(c, document))
515
520
  return undefined;
516
521
  return { target: { kind: 'comments', document }, format, canonical };
517
522
  }
523
+ /** Whether this document's page shows its conversation, and so has a comments feed. */
524
+ function showsConversation(c, document) {
525
+ return answerable(document, commentPolicyOf(c.var.renderer.site()), c.var.store.now());
526
+ }
518
527
  /** Where the canonical URL of one feed is. */
519
528
  function feedTargetHref(target, format, bases) {
520
529
  return target.kind === 'listing'
@@ -543,7 +552,7 @@ function queryFeedFormat(c) {
543
552
  * URL and is read back here. An unknown value says nothing at all rather than
544
553
  * being printed, so the query cannot be used to put words on somebody's post.
545
554
  */
546
- function commentNotice(c, document) {
555
+ function commentNotice(c, document, viewer) {
547
556
  const notice = commentNoticeFor(c.req.query(COMMENT_NOTICE_PARAM));
548
557
  return {
549
558
  ...(notice === undefined ? {} : { commentNotice: notice }),
@@ -554,6 +563,7 @@ function commentNotice(c, document) {
554
563
  admin: c.var.admin,
555
564
  document,
556
565
  id: c.req.query(COMMENT_REPLY_PARAM),
566
+ thread: viewer === undefined ? undefined : c.var.conversation.thread(document),
557
567
  }),
558
568
  // And the thank-you after a contact form was sent, which travels the same
559
569
  // way for the same reason (TASK-56).
@@ -602,7 +612,7 @@ function negotiateDocument(c, document, representation, href = document.permalin
602
612
  const page = representation === 'html'
603
613
  ? c.var.renderer.renderPage(document, {
604
614
  frontPage: href === '/',
605
- extra: { ...commentNotice(c, document), ...(listed ? {} : { noindex: true }) },
615
+ extra: { ...commentNotice(c, document, viewer), ...(listed ? {} : { noindex: true }) },
606
616
  viewer,
607
617
  })
608
618
  : undefined;
@@ -689,9 +699,9 @@ function canonicalPath(c, pathname, bases, authors) {
689
699
  function canonicalTarget(c, pathname, bases, authors) {
690
700
  const { store, renderer } = c.var;
691
701
  // A feed first: `/feed`, `/feed/atom`, `/{base}/x/feed`, `/comments/feed`
692
- // and a post's `{permalink}feed` all lead somewhere real, and `/feed/rss`
702
+ // and a document's `{permalink}feed` all lead somewhere real, and `/feed/rss`
693
703
  // leads to `/feed/` in the same one hop rather than to a second redirect.
694
- const feedRequest = parseFeedPath(store, pathname, bases, authors);
704
+ const feedRequest = parseFeedPath(c, pathname, bases, authors);
695
705
  if (feedRequest !== undefined) {
696
706
  const { target } = feedRequest;
697
707
  if (target.kind === 'listing' &&
@@ -1155,12 +1165,11 @@ function feed(c, format, subject) {
1155
1165
  return feedResponse({ format, source, conditional: conditionalHeaders(c) });
1156
1166
  }
1157
1167
  /**
1158
- * A post's comments, or the whole site's, as RSS 2.0.
1168
+ * A post's or page's comments, or the whole site's, as RSS 2.0.
1159
1169
  *
1160
- * A post with no replies answers an empty feed rather than a 404: it exists,
1161
- * and a reader that subscribed before anybody answered should keep polling.
1162
- * Only a permalink that is no published post 404s, which is the ordinary
1163
- * document lookup rather than anything this feed decides.
1170
+ * A document with no replies answers an empty feed rather than a 404: it
1171
+ * exists, and a reader that subscribed before anybody answered should keep
1172
+ * polling. Which documents have a feed at all is {@link parseFeedPath}'s to say.
1164
1173
  */
1165
1174
  function comments(c, document) {
1166
1175
  const { conversation, renderer, config } = c.var;
@@ -1171,7 +1180,12 @@ function comments(c, document) {
1171
1180
  // looking at one conversation. A post's own feed hands the builder entries
1172
1181
  // with no post attached, and so its items name no post: there, every item
1173
1182
  // answers the same one.
1174
- const found = feedComments(document === undefined ? conversation.latest(limit) : spokenIn(conversation.thread(document)), { baseUrl: config.baseUrl, limit, cited: (url) => c.var.replyContexts.read(url) });
1183
+ const found = feedComments(document === undefined ? conversation.latest(limit) : spokenIn(conversation.thread(document)), {
1184
+ baseUrl: config.baseUrl,
1185
+ limit,
1186
+ cited: (url) => c.var.replyContexts.read(url),
1187
+ post: document,
1188
+ });
1175
1189
  const source = {
1176
1190
  site,
1177
1191
  comments: found,
@@ -1184,6 +1198,55 @@ function comments(c, document) {
1184
1198
  };
1185
1199
  return commentsFeedResponse(source, conditionalHeaders(c));
1186
1200
  }
1201
+ /**
1202
+ * The feed of one item's direct replies (TASK-324): a post's or page's, or a
1203
+ * reply's, so a reader can walk a thread one level at a time through
1204
+ * `source:comments`. An item nobody answered has an empty feed; a segment
1205
+ * naming nothing a reader can see 404s, as does one on a document not showing
1206
+ * its conversation, by the rule `{permalink}feed/` follows.
1207
+ */
1208
+ function repliesFeed(c, segment) {
1209
+ const { conversation, renderer, config } = c.var;
1210
+ const found = conversation.repliesTo(segment);
1211
+ if (found === undefined || !showsConversation(c, found.post))
1212
+ return notFound(c);
1213
+ const site = renderer.site();
1214
+ const cited = (url) => c.var.replyContexts.read(url);
1215
+ const label = postLabel(found.post, cited);
1216
+ const source = {
1217
+ site,
1218
+ comments: feedComments(found.replies, {
1219
+ baseUrl: config.baseUrl,
1220
+ limit: feedSize(site),
1221
+ cited,
1222
+ post: found.post,
1223
+ }),
1224
+ title: found.reply === null
1225
+ ? `Replies to: ${label}`
1226
+ : `Replies to ${found.reply.author.name} on ${label}`,
1227
+ href: found.reply?.url ?? found.post.permalink,
1228
+ feedHref: repliesFeedPath(segment),
1229
+ baseUrl: config.baseUrl,
1230
+ };
1231
+ return commentsFeedResponse(source, conditionalHeaders(c));
1232
+ }
1233
+ /**
1234
+ * One native comment on a page of its own (TASK-318), answering as its post
1235
+ * would: 410 once the post is deleted, and 404 while it is not served or not
1236
+ * showing its conversation. It is never listed anywhere, so it is noindex.
1237
+ */
1238
+ function commentPage(c, id) {
1239
+ const { conversation, renderer, store } = c.var;
1240
+ const found = conversation.comment(id);
1241
+ if (found === undefined)
1242
+ return notFound(c);
1243
+ const now = store.now();
1244
+ if (isGone(found.post, now))
1245
+ return gone(c);
1246
+ if (!isServed(found.post, now) || !showsConversation(c, found.post))
1247
+ return notFound(c);
1248
+ return c.html(renderer.renderComment(found), 200, { 'x-robots-tag': 'noindex' });
1249
+ }
1187
1250
  /**
1188
1251
  * The sitemap, or one of its children once the site is too big for one file.
1189
1252
  *
@@ -1447,10 +1510,10 @@ export function feedHref(term, format, bases) {
1447
1510
  return feedPathUnder(listingHref({ term }, 0, bases), format);
1448
1511
  }
1449
1512
  /**
1450
- * Where the site's comments feed lives, and where one post's does.
1513
+ * Where the site's comments feed lives, and where one document's does.
1451
1514
  *
1452
1515
  * WordPress's URLs, so a site migrated from it keeps both: the whole site's
1453
- * comments at `/comments/feed/`, and a post's under its own permalink. There
1516
+ * comments at `/comments/feed/`, and a document's under its own permalink. There
1454
1517
  * is one format, RSS 2.0, because that is what a comments feed is read in.
1455
1518
  */
1456
1519
  export function commentsFeedHref(document) {