@geekity/cms 0.28.0 → 0.30.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.
- package/README.md +355 -53
- package/admin/pages/comments/all.njk +3 -1
- package/admin/pages/federation/followers.njk +8 -2
- package/dist/admin/comments.d.ts +2 -0
- package/dist/admin/comments.d.ts.map +1 -1
- package/dist/admin/comments.js +19 -49
- package/dist/admin/comments.js.map +1 -1
- package/dist/admin/documents.d.ts +5 -0
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +45 -17
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/federation.d.ts +21 -1
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +17 -7
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/store.d.ts +95 -14
- package/dist/admin/store.d.ts.map +1 -1
- package/dist/admin/store.js +206 -17
- package/dist/admin/store.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +8 -1
- package/dist/cli.js.map +1 -1
- package/dist/comments/form.d.ts +3 -1
- package/dist/comments/form.d.ts.map +1 -1
- package/dist/comments/form.js +2 -1
- package/dist/comments/form.js.map +1 -1
- package/dist/comments/index.d.ts +3 -3
- package/dist/comments/index.d.ts.map +1 -1
- package/dist/comments/index.js +1 -1
- package/dist/comments/index.js.map +1 -1
- package/dist/comments/records.d.ts +56 -24
- package/dist/comments/records.d.ts.map +1 -1
- package/dist/comments/records.js +255 -31
- package/dist/comments/records.js.map +1 -1
- package/dist/comments/reply-notices.d.ts +42 -0
- package/dist/comments/reply-notices.d.ts.map +1 -0
- package/dist/comments/reply-notices.js +76 -0
- package/dist/comments/reply-notices.js.map +1 -0
- package/dist/comments/reply-post.d.ts +49 -0
- package/dist/comments/reply-post.d.ts.map +1 -0
- package/dist/comments/reply-post.js +66 -0
- package/dist/comments/reply-post.js.map +1 -0
- package/dist/comments/routes.d.ts +6 -1
- package/dist/comments/routes.d.ts.map +1 -1
- package/dist/comments/routes.js +49 -21
- package/dist/comments/routes.js.map +1 -1
- package/dist/comments/submission.d.ts +8 -25
- package/dist/comments/submission.d.ts.map +1 -1
- package/dist/comments/submission.js +19 -38
- package/dist/comments/submission.js.map +1 -1
- package/dist/comments/viewer.d.ts.map +1 -1
- package/dist/comments/viewer.js +1 -0
- package/dist/comments/viewer.js.map +1 -1
- package/dist/content/citation.d.ts +1 -0
- package/dist/content/citation.d.ts.map +1 -1
- package/dist/content/citation.js +2 -0
- package/dist/content/citation.js.map +1 -1
- package/dist/content/original.d.ts +6 -1
- package/dist/content/original.d.ts.map +1 -1
- package/dist/content/original.js +7 -4
- package/dist/content/original.js.map +1 -1
- package/dist/content/store.d.ts +43 -11
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +170 -10
- package/dist/content/store.js.map +1 -1
- package/dist/content/sync.d.ts +8 -0
- package/dist/content/sync.d.ts.map +1 -1
- package/dist/content/sync.js +164 -71
- package/dist/content/sync.js.map +1 -1
- package/dist/federation/article.d.ts.map +1 -1
- package/dist/federation/article.js +2 -1
- package/dist/federation/article.js.map +1 -1
- package/dist/federation/backfill.d.ts +114 -0
- package/dist/federation/backfill.d.ts.map +1 -0
- package/dist/federation/backfill.js +314 -0
- package/dist/federation/backfill.js.map +1 -0
- package/dist/federation/inbox.js +1 -1
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/records.d.ts +13 -0
- package/dist/federation/records.d.ts.map +1 -1
- package/dist/federation/records.js +49 -10
- package/dist/federation/records.js.map +1 -1
- package/dist/federation/replies.d.ts +6 -0
- package/dist/federation/replies.d.ts.map +1 -1
- package/dist/federation/replies.js +18 -1
- package/dist/federation/replies.js.map +1 -1
- package/dist/index.d.ts +12 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +81 -11
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +1 -7
- package/dist/init.js.map +1 -1
- package/dist/plugin.d.ts +28 -2
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +10 -2
- package/dist/plugin.js.map +1 -1
- package/dist/plugins/site.d.ts.map +1 -1
- package/dist/plugins/site.js +7 -1
- package/dist/plugins/site.js.map +1 -1
- package/dist/web/context.d.ts +18 -3
- package/dist/web/context.d.ts.map +1 -1
- package/dist/web/context.js +17 -4
- package/dist/web/context.js.map +1 -1
- package/dist/web/conversation.d.ts +191 -28
- package/dist/web/conversation.d.ts.map +1 -1
- package/dist/web/conversation.js +670 -172
- package/dist/web/conversation.js.map +1 -1
- package/dist/web/documents.d.ts +0 -22
- package/dist/web/documents.d.ts.map +1 -1
- package/dist/web/documents.js +1 -34
- package/dist/web/documents.js.map +1 -1
- package/dist/web/feed-item.d.ts +12 -8
- package/dist/web/feed-item.d.ts.map +1 -1
- package/dist/web/feed-item.js +10 -10
- package/dist/web/feed-item.js.map +1 -1
- package/dist/web/feed-rss.d.ts.map +1 -1
- package/dist/web/feed-rss.js +34 -10
- package/dist/web/feed-rss.js.map +1 -1
- package/dist/web/feed-source.d.ts +33 -1
- package/dist/web/feed-source.d.ts.map +1 -1
- package/dist/web/feed-source.js +33 -0
- package/dist/web/feed-source.js.map +1 -1
- package/dist/web/feeds.d.ts +1 -1
- package/dist/web/feeds.d.ts.map +1 -1
- package/dist/web/feeds.js +7 -2
- package/dist/web/feeds.js.map +1 -1
- package/dist/web/guids.d.ts +47 -0
- package/dist/web/guids.d.ts.map +1 -0
- package/dist/web/guids.js +67 -0
- package/dist/web/guids.js.map +1 -0
- package/dist/web/index.d.ts +5 -6
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +3 -3
- package/dist/web/index.js.map +1 -1
- package/dist/web/redirects.d.ts +12 -0
- package/dist/web/redirects.d.ts.map +1 -1
- package/dist/web/redirects.js +16 -4
- package/dist/web/redirects.js.map +1 -1
- package/dist/web/render.d.ts +19 -9
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +44 -42
- package/dist/web/render.js.map +1 -1
- package/dist/web/routes.d.ts +2 -2
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +157 -84
- package/dist/web/routes.js.map +1 -1
- package/dist/webmention/index.d.ts +1 -1
- package/dist/webmention/index.d.ts.map +1 -1
- package/dist/webmention/index.js +1 -1
- package/dist/webmention/index.js.map +1 -1
- package/dist/webmention/links.d.ts +55 -0
- package/dist/webmention/links.d.ts.map +1 -1
- package/dist/webmention/links.js +162 -0
- package/dist/webmention/links.js.map +1 -1
- package/dist/webmention/microformats.d.ts +15 -0
- package/dist/webmention/microformats.d.ts.map +1 -1
- package/dist/webmention/microformats.js +63 -1
- package/dist/webmention/microformats.js.map +1 -1
- package/dist/webmention/pingback.js +2 -1
- package/dist/webmention/pingback.js.map +1 -1
- package/dist/webmention/receive.d.ts +5 -0
- package/dist/webmention/receive.d.ts.map +1 -1
- package/dist/webmention/receive.js +99 -3
- package/dist/webmention/receive.js.map +1 -1
- package/dist/webmention/reply-context.d.ts +15 -0
- package/dist/webmention/reply-context.d.ts.map +1 -1
- package/dist/webmention/reply-context.js +29 -0
- package/dist/webmention/reply-context.js.map +1 -1
- package/dist/webmention/reply-contexts.d.ts +6 -0
- package/dist/webmention/reply-contexts.d.ts.map +1 -1
- package/dist/webmention/reply-contexts.js +16 -10
- package/dist/webmention/reply-contexts.js.map +1 -1
- package/dist/webmention/routes.d.ts.map +1 -1
- package/dist/webmention/routes.js +2 -1
- package/dist/webmention/routes.js.map +1 -1
- package/dist/webmention/service.d.ts +30 -1
- package/dist/webmention/service.d.ts.map +1 -1
- package/dist/webmention/service.js +172 -32
- package/dist/webmention/service.js.map +1 -1
- package/package.json +1 -2
- package/themes/default/README.md +269 -95
- package/themes/default/layouts/base.njk +8 -0
- package/themes/default/layouts/comment.njk +90 -0
- package/themes/default/layouts/front-page.njk +9 -47
- package/themes/default/layouts/page.njk +2 -0
- package/themes/default/layouts/post.njk +14 -2
- package/themes/default/partials/backlinks.njk +19 -0
- package/themes/default/partials/cited-page.njk +3 -1
- package/themes/default/partials/comment-form.njk +10 -0
- package/themes/default/partials/comment.njk +79 -0
- package/themes/default/partials/conversation.njk +14 -59
- package/themes/default/src/style.css +42 -0
- package/themes/default/static/style.css +67 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { User } from '../admin/accounts.ts';
|
|
2
|
+
import type { AdminStore, PostComment } from '../admin/store.ts';
|
|
2
3
|
import type { Document } from '../content/document.ts';
|
|
3
4
|
import type { CitedPageReader } from '../content/citation.ts';
|
|
4
5
|
import type { RsvpValue } from '../content/rsvp.ts';
|
|
@@ -30,11 +31,12 @@ import type { FeedComment } from './feeds.ts';
|
|
|
30
31
|
*
|
|
31
32
|
* `activitypub` is a reply, a like or a boost the site's inbox was sent.
|
|
32
33
|
* `comment` is the form under the post (TASK-50). `webmention` is another
|
|
33
|
-
* site's post pointing at this one (TASK-51).
|
|
34
|
-
*
|
|
35
|
-
*
|
|
34
|
+
* site's post pointing at this one (TASK-51). `post` is a reply post a user of
|
|
35
|
+
* this site wrote, whose `in-reply-to` names the post or something said under
|
|
36
|
+
* it (TASK-300). All four are the same shape and thread together, which is the
|
|
37
|
+
* whole point of naming the source rather than keeping four lists.
|
|
36
38
|
*/
|
|
37
|
-
export type InteractionSource = 'activitypub' | 'comment' | 'webmention';
|
|
39
|
+
export type InteractionSource = 'activitypub' | 'comment' | 'webmention' | 'post';
|
|
38
40
|
/**
|
|
39
41
|
* What an interaction is.
|
|
40
42
|
*
|
|
@@ -71,11 +73,41 @@ export interface InteractionAuthor {
|
|
|
71
73
|
readonly avatar: string | null;
|
|
72
74
|
/** Their id, which is what identifies them however they are named. */
|
|
73
75
|
readonly actorId: string | null;
|
|
76
|
+
/**
|
|
77
|
+
* Where to follow what they publish, when the site knows (TASK-324): a
|
|
78
|
+
* webmention author's h-card or site, or a site user's author feed. A
|
|
79
|
+
* visitor's own website is only what they typed, and a fediverse actor
|
|
80
|
+
* publishes no feed the site knows of, so both are `null`.
|
|
81
|
+
*/
|
|
82
|
+
readonly feed: string | null;
|
|
83
|
+
/**
|
|
84
|
+
* The site user they are, by username, else `null`: whoever a reply post
|
|
85
|
+
* is by, or whoever a stored comment names (TASK-337). A theme vouches for
|
|
86
|
+
* the link of a site user and of nobody else.
|
|
87
|
+
*/
|
|
88
|
+
readonly username: string | null;
|
|
74
89
|
}
|
|
75
90
|
/** One thing somebody did to a post: a reply, a like or a boost. */
|
|
76
91
|
export interface Interaction {
|
|
77
92
|
/** What it is called: the note's id, and what a reply to it names. */
|
|
78
93
|
readonly id: string;
|
|
94
|
+
/**
|
|
95
|
+
* Its key (decision-51): a stored comment's id, else the key of its guid.
|
|
96
|
+
* The one thing in its anchor, `#comment-{key}`, and its replies feed,
|
|
97
|
+
* `/replies/{key}/`.
|
|
98
|
+
*/
|
|
99
|
+
readonly key: string;
|
|
100
|
+
/**
|
|
101
|
+
* What the comments feeds call it, and what a reply to it names in
|
|
102
|
+
* `source:inReplyTo`: a stored form comment's page, a stored comment's
|
|
103
|
+
* origin or else its url, and anything else's id.
|
|
104
|
+
*/
|
|
105
|
+
readonly guid: string;
|
|
106
|
+
/**
|
|
107
|
+
* Whether it was imported from another system (TASK-336): shown in the
|
|
108
|
+
* thread like any other, and carried by no feed and no reply count.
|
|
109
|
+
*/
|
|
110
|
+
readonly migrated: boolean;
|
|
79
111
|
/** Where it came from. */
|
|
80
112
|
readonly source: InteractionSource;
|
|
81
113
|
/** Which of the three it is. */
|
|
@@ -93,7 +125,7 @@ export interface Interaction {
|
|
|
93
125
|
/** Whether a reader may see it. */
|
|
94
126
|
readonly status: InteractionStatus;
|
|
95
127
|
/** The replies to this one, oldest first. */
|
|
96
|
-
readonly replies:
|
|
128
|
+
readonly replies: ThreadReply[];
|
|
97
129
|
/**
|
|
98
130
|
* What a reply that is an RSVP says (TASK-198): its `rsvp` value and the
|
|
99
131
|
* words for it. A webmention carries one, and so does a fediverse answer
|
|
@@ -104,6 +136,23 @@ export interface Interaction {
|
|
|
104
136
|
readonly label: string;
|
|
105
137
|
};
|
|
106
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* A comment a reader may not see, standing in the thread for the replies to it
|
|
141
|
+
* that a reader may (TASK-325): it is waiting for a moderator, filed as spam or
|
|
142
|
+
* deleted. It names nobody and says nothing, and there is one only while a
|
|
143
|
+
* visible reply sits under it.
|
|
144
|
+
*/
|
|
145
|
+
export interface WithheldReply {
|
|
146
|
+
/** The hidden comment's id. */
|
|
147
|
+
readonly id: string;
|
|
148
|
+
/** Its key, so its anchor on the post is still there. */
|
|
149
|
+
readonly key: string;
|
|
150
|
+
readonly withheld: true;
|
|
151
|
+
/** The replies under it, oldest first, at least one of them visible. */
|
|
152
|
+
readonly replies: ThreadReply[];
|
|
153
|
+
}
|
|
154
|
+
/** One entry of a thread: a reply, or the placeholder for a hidden one. */
|
|
155
|
+
export type ThreadReply = Interaction | WithheldReply;
|
|
107
156
|
/** How many of each a conversation holds. */
|
|
108
157
|
export interface InteractionCounts {
|
|
109
158
|
/** Replies, counted through the whole thread rather than the top of it. */
|
|
@@ -122,7 +171,7 @@ export interface InteractionCounts {
|
|
|
122
171
|
/** Everything under one post. */
|
|
123
172
|
export interface Conversation {
|
|
124
173
|
/** The replies to the post itself, oldest first, each carrying its own. */
|
|
125
|
-
readonly replies:
|
|
174
|
+
readonly replies: ThreadReply[];
|
|
126
175
|
/** The likes, oldest first. */
|
|
127
176
|
readonly likes: Interaction[];
|
|
128
177
|
/** The boosts and the reposts, oldest first and in one list. */
|
|
@@ -145,10 +194,27 @@ export interface RsvpGroup {
|
|
|
145
194
|
/** Each person's latest answer, oldest first, each an RSVP interaction. */
|
|
146
195
|
readonly people: Interaction[];
|
|
147
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Something said in a conversation, with the reply it sits under (TASK-324):
|
|
199
|
+
* what the comments feeds name as what it answers.
|
|
200
|
+
*/
|
|
201
|
+
export interface Placed extends Interaction {
|
|
202
|
+
/**
|
|
203
|
+
* The visible reply it answers, or `null` for the post. A hidden comment in
|
|
204
|
+
* between is passed over, the way the thread already passes over a
|
|
205
|
+
* withdrawn note, so a reader walking the feeds reaches every visible reply.
|
|
206
|
+
*/
|
|
207
|
+
readonly parent: Interaction | null;
|
|
208
|
+
}
|
|
148
209
|
/** One interaction with the post it is about, which a site-wide list needs. */
|
|
149
|
-
export interface SiteInteraction extends
|
|
210
|
+
export interface SiteInteraction extends Placed {
|
|
150
211
|
/** The post it answers. */
|
|
151
212
|
readonly post: Document;
|
|
213
|
+
/**
|
|
214
|
+
* Who wrote the reply it answers, when it answers one a reader can see
|
|
215
|
+
* (TASK-318), and `null` for an answer to the post itself.
|
|
216
|
+
*/
|
|
217
|
+
readonly replyingTo: string | null;
|
|
152
218
|
}
|
|
153
219
|
/** What reading a conversation needs: both indexes and the site's origin. */
|
|
154
220
|
export interface ConversationContext {
|
|
@@ -166,6 +232,8 @@ export interface ConversationContext {
|
|
|
166
232
|
readonly contentDir: string;
|
|
167
233
|
/** The site's public origin, for the post's object id. */
|
|
168
234
|
readonly baseUrl: string;
|
|
235
|
+
/** Who may sign in, for naming the author of a reply post (TASK-300). */
|
|
236
|
+
readonly users: () => readonly User[];
|
|
169
237
|
}
|
|
170
238
|
/**
|
|
171
239
|
* The three questions anything showing a conversation asks.
|
|
@@ -180,13 +248,10 @@ export interface ConversationReader {
|
|
|
180
248
|
/** Everything said about one post, threaded. */
|
|
181
249
|
readonly thread: (document: Document) => Conversation;
|
|
182
250
|
/**
|
|
183
|
-
* How many
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
* Counted off the indexes rather than by reading each thread, because the
|
|
188
|
-
* number goes into a feed's own validator: a feed whose comment counts moved
|
|
189
|
-
* is a changed feed, and that has to be cheap for every item of a page.
|
|
251
|
+
* How many visible replies answer each of these documents directly, by
|
|
252
|
+
* permalink: what a reader following `source:comments` finds in its
|
|
253
|
+
* `/replies/` feed (TASK-324). Read off each thread, since that is the only
|
|
254
|
+
* reading that knows which replies a reader sees and where they sit.
|
|
190
255
|
*/
|
|
191
256
|
readonly counts: (documents: readonly Document[]) => Map<string, number>;
|
|
192
257
|
/**
|
|
@@ -198,6 +263,92 @@ export interface ConversationReader {
|
|
|
198
263
|
* indexes have paged, so the pages are read until enough survive.
|
|
199
264
|
*/
|
|
200
265
|
readonly latest: (limit: number) => SiteInteraction[];
|
|
266
|
+
/**
|
|
267
|
+
* One native comment as its own page reads it (TASK-318), or `undefined`
|
|
268
|
+
* for an id that names no approved comment written on this site. The post
|
|
269
|
+
* comes back in whatever state it is in, so the page can answer as the post
|
|
270
|
+
* itself would.
|
|
271
|
+
*/
|
|
272
|
+
readonly comment: (id: string) => CommentThread | undefined;
|
|
273
|
+
/**
|
|
274
|
+
* The reply on a post that a URL names, or `undefined` (TASK-319):
|
|
275
|
+
* a comment by its own page or by the post's `#comment-` anchor, a
|
|
276
|
+
* webmention by the page it was sent from, a fediverse reply by its url or
|
|
277
|
+
* its id. Every stored comment counts whatever its status, because what a
|
|
278
|
+
* reply answers is a fact about it, and whether a reader may see the one it
|
|
279
|
+
* answers is decided when the thread is read.
|
|
280
|
+
*/
|
|
281
|
+
readonly replyNamed: (document: Document, url: string) => Interaction | undefined;
|
|
282
|
+
/**
|
|
283
|
+
* What a URL names on this site, while a reader may see it: a reply (a
|
|
284
|
+
* comment by its page or its anchor, a webmention by the page it was sent
|
|
285
|
+
* from, a fediverse reply by its id or url, a reply post by its permalink)
|
|
286
|
+
* with the post it is on, or a served post or page itself (TASK-300,
|
|
287
|
+
* TASK-326). What a reply post answering it cites, instead of fetching a page.
|
|
288
|
+
*/
|
|
289
|
+
readonly heldAt: (url: string) => HeldAt | undefined;
|
|
290
|
+
/**
|
|
291
|
+
* What a key names and its direct replies (TASK-324, decision-51), or
|
|
292
|
+
* `undefined`: a served post or page, or a reply a reader can see.
|
|
293
|
+
*/
|
|
294
|
+
readonly repliesTo: (key: string) => RepliesOf | undefined;
|
|
295
|
+
/**
|
|
296
|
+
* The document whose conversation a URL is in (TASK-320): the post a
|
|
297
|
+
* comment's page or anchor is on, the post a webmention was sent to, the
|
|
298
|
+
* post a fediverse reply answers however deep, or the document at the URL.
|
|
299
|
+
*/
|
|
300
|
+
readonly documentOf: (url: string) => Document | undefined;
|
|
301
|
+
/**
|
|
302
|
+
* Every page in the conversation a document is in that answers something
|
|
303
|
+
* off this site, with what a reader sees under it (TASK-320): what a
|
|
304
|
+
* salmention is sent from. A reply post answers its `in-reply-to`; a
|
|
305
|
+
* comment's own page answers the webmention reply it is under. One
|
|
306
|
+
* answering something here has nobody to tell: this site already knows.
|
|
307
|
+
*/
|
|
308
|
+
readonly upstreams: (document: Document) => Upstream[];
|
|
309
|
+
}
|
|
310
|
+
/** One page of this site's answering a page elsewhere (TASK-320). */
|
|
311
|
+
export interface Upstream {
|
|
312
|
+
/** The document the page is, or that the comment is on. */
|
|
313
|
+
readonly post: Document;
|
|
314
|
+
/** The page, absolute: a reply post's permalink or a comment's own page. */
|
|
315
|
+
readonly source: string;
|
|
316
|
+
/** What it answers, off this site. */
|
|
317
|
+
readonly target: string;
|
|
318
|
+
/** The replies a reader sees under it, as its page prints them. */
|
|
319
|
+
readonly replies: readonly ThreadReply[];
|
|
320
|
+
}
|
|
321
|
+
/** What one `/replies/` feed is about, and what is in it (TASK-324). */
|
|
322
|
+
export interface RepliesOf {
|
|
323
|
+
/** The document whose conversation it is. */
|
|
324
|
+
readonly post: Document;
|
|
325
|
+
/** The reply whose replies these are, or `null` for the document's own. */
|
|
326
|
+
readonly reply: Interaction | null;
|
|
327
|
+
/** The visible replies directly under it, each carrying its own. */
|
|
328
|
+
readonly replies: Placed[];
|
|
329
|
+
}
|
|
330
|
+
/** What {@link ConversationReader.heldAt} found: a reply and the post it is on, or a post. */
|
|
331
|
+
export type HeldAt = {
|
|
332
|
+
readonly kind: 'reply';
|
|
333
|
+
readonly post: Document;
|
|
334
|
+
readonly reply: Interaction;
|
|
335
|
+
} | {
|
|
336
|
+
readonly kind: 'document';
|
|
337
|
+
readonly post: Document;
|
|
338
|
+
readonly author: InteractionAuthor;
|
|
339
|
+
};
|
|
340
|
+
/** A native comment, what it answers and what answers it (TASK-318). */
|
|
341
|
+
export interface CommentThread {
|
|
342
|
+
/** The post it is on. */
|
|
343
|
+
readonly post: Document;
|
|
344
|
+
/** The comment, carrying its replies at every depth as the thread does. */
|
|
345
|
+
readonly comment: Interaction;
|
|
346
|
+
/**
|
|
347
|
+
* What it answers, from the top-level comment down to its parent. `null`
|
|
348
|
+
* is an ancestor a reader may not see: one waiting for a moderator, filed
|
|
349
|
+
* as spam, deleted or withdrawn.
|
|
350
|
+
*/
|
|
351
|
+
readonly ancestors: readonly (Interaction | null)[];
|
|
201
352
|
}
|
|
202
353
|
/**
|
|
203
354
|
* The reader over one site's two indexes.
|
|
@@ -209,22 +360,29 @@ export interface ConversationReader {
|
|
|
209
360
|
*/
|
|
210
361
|
export declare function createConversation(context: ConversationContext): ConversationReader;
|
|
211
362
|
/**
|
|
212
|
-
* The
|
|
213
|
-
*
|
|
214
|
-
|
|
215
|
-
|
|
363
|
+
* The URLs a reply post can answer a native comment by: its own page, and its
|
|
364
|
+
* anchor on the post at this absolute permalink.
|
|
365
|
+
*/
|
|
366
|
+
export declare function commentNames(id: string, permalink: string, baseUrl: string): string[];
|
|
367
|
+
/**
|
|
368
|
+
* The stored comment holding a fediverse note or activity id as its origin:
|
|
369
|
+
* one imported from the site this one replaced, keyed by that id as it would
|
|
370
|
+
* have been had it arrived here (TASK-336). A delivery or a fetch of the same
|
|
371
|
+
* id is that comment again, and the stored one wins, since it is the one the
|
|
372
|
+
* moderator decided on and the thread anchors.
|
|
216
373
|
*/
|
|
217
|
-
export declare function
|
|
374
|
+
export declare function heldComment(admin: AdminStore, id: string): PostComment | undefined;
|
|
218
375
|
/**
|
|
219
|
-
*
|
|
220
|
-
* replies and the mentions.
|
|
376
|
+
* The `id` a thread entry is anchored at on the page, by its key.
|
|
221
377
|
*
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
* polling a comments feed would get an entry with an empty body and no way to
|
|
225
|
-
* tell what it was for.
|
|
378
|
+
* Prefixed rather than bare so a comment can never collide with a heading
|
|
379
|
+
* anchor the post's own Markdown produced.
|
|
226
380
|
*/
|
|
227
|
-
export declare function
|
|
381
|
+
export declare function commentAnchor(key: string): string;
|
|
382
|
+
/** The key of the comment whose page a path is, or `undefined` (TASK-319). */
|
|
383
|
+
export declare function commentKeyAt(pathname: string): string | undefined;
|
|
384
|
+
/** What a post's comments feed carries, at every depth and in no order. */
|
|
385
|
+
export declare function spokenIn(conversation: Conversation): Placed[];
|
|
228
386
|
/**
|
|
229
387
|
* Interactions as a comments feed carries them: newest first, at most `limit`,
|
|
230
388
|
* and every link absolute.
|
|
@@ -234,11 +392,16 @@ export declare function spokenIn(conversation: Conversation): Interaction[];
|
|
|
234
392
|
* is handed over as it stands and sanitised by the feed itself, at the last
|
|
235
393
|
* moment before it becomes bytes this site publishes.
|
|
236
394
|
*/
|
|
237
|
-
export declare function feedComments(said: readonly (
|
|
395
|
+
export declare function feedComments(said: readonly (Placed & {
|
|
238
396
|
post?: Document | undefined;
|
|
397
|
+
replyingTo?: string | null | undefined;
|
|
239
398
|
})[], options: {
|
|
240
399
|
baseUrl: string;
|
|
241
400
|
limit: number;
|
|
242
401
|
cited: CitedPageReader;
|
|
402
|
+
post?: Document | undefined;
|
|
243
403
|
}): FeedComment[];
|
|
404
|
+
/** The entry of a thread with this key that a reader can see, at any depth. */
|
|
405
|
+
export declare function visibleReply(replies: readonly ThreadReply[], key: string): Interaction | undefined;
|
|
406
|
+
export declare function isWithheld(reply: ThreadReply): reply is WithheldReply;
|
|
244
407
|
//# sourceMappingURL=conversation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/web/conversation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/web/conversation.ts"],"names":[],"mappings":"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"}
|