Allow user to tag other users in creating a post.
This commit is contained in:
parent
1fbca4e112
commit
b314b29b5b
1 changed files with 63 additions and 2 deletions
|
@ -44,8 +44,68 @@ const fs = require('node:fs/promises');
|
|||
}
|
||||
}
|
||||
|
||||
let parsedPostContent = "";
|
||||
let tags = [];
|
||||
|
||||
let chars = Array.from(postContent);
|
||||
for ( let i = 0; i < chars.length; i++ ) {
|
||||
if ( chars[i] !== "@" )
|
||||
parsedPostContent = `${parsedPostContent}${chars[i]}`;
|
||||
if ( chars[i] === "@" ) {
|
||||
let potentialMentionUsername = "";
|
||||
let fulfilledPotentialMention = false;
|
||||
let fulfilledReallyLikelyPotentialMention = false;
|
||||
let potentialMentionDomain = "";
|
||||
let lameDuckSpacing = "";
|
||||
i++;
|
||||
while ( i < chars.length && fulfilledPotentialMention === false ) {
|
||||
if ( chars[i] !== "@" ) {
|
||||
potentialMentionUsername = `${potentialMentionUsername}${chars[i]}`;
|
||||
}
|
||||
if ( chars[i] === "@" ) {
|
||||
fulfilledPotentialMention = true;
|
||||
i++
|
||||
while ( i < chars.length && fulfilledReallyLikelyPotentialMention === false ) {
|
||||
potentialMentionDomain = `${potentialMentionDomain}${chars[i]}`;
|
||||
if ( chars[i].match(/\s/) ) {
|
||||
fulfilledReallyLikelyPotentialMention = true;
|
||||
lameDuckSpacing = chars[i];
|
||||
} else {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( chars[i].match(/\s/) ) {
|
||||
fulfilledPotentialMention = true;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if ( fulfilledPotentialMention ) {
|
||||
if ( fulfilledReallyLikelyPotentialMention || i === chars.length ) {
|
||||
const allowTag = await confirm({message: `Tag @${potentialMentionUsername}@${potentialMentionDomain}`, default: true});
|
||||
if ( allowTag ) {
|
||||
// TODO: Parse this at post creation time, rather than rely on dynamic content.
|
||||
// In order to accomplish this, we'll need to be able to create a stub user and signed HTTP requests.
|
||||
parsedPostContent = `${parsedPostContent}[@${potentialMentionUsername}](https://${domain}/resolveUser?user=${potentialMentionUsername}&domain=${potentialMentionDomain})`;
|
||||
// TODO: Finger the user at post creation time, rather than rely on dynamic content.
|
||||
tags.push(`https://${domain}/resolveWebfinger?user=${potentialMentionUsername}&domain=${potentialMentionDomain}`);
|
||||
} else {
|
||||
parsedPostContent = `${parsedPostContent}@${potentialMentionUsername}@${potentialMentionDomain}`;
|
||||
}
|
||||
if ( fulfilledReallyLikelyPotentialMention ) {
|
||||
parsedPostContent = `${parsedPostContent}${lameDuckSpacing}`;
|
||||
}
|
||||
} else {
|
||||
parsedPostContent = `${parsedPostContent}@${potentialMentionUsername}`;
|
||||
}
|
||||
} else {
|
||||
parsedPostContent = `${parsedPostContent}@${potentialMentionUsername}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Support attachments.
|
||||
let postContentHtml = (new commonmark.HtmlRenderer()).render(new commonmark.Parser().parse(postContent)).replace(/\n$/, "");
|
||||
let postContentHtml = (new commonmark.HtmlRenderer()).render(new commonmark.Parser().parse(parsedPostContent)).replace(/\n$/, "");
|
||||
let timestamp = Date.now();
|
||||
let postId = `${timestamp}`;
|
||||
|
||||
|
@ -71,7 +131,8 @@ const fs = require('node:fs/promises');
|
|||
"https://www.w3.org/ns/activitystreams#Public"
|
||||
],
|
||||
"cc": [
|
||||
`https://${domain}/users/${user}/followers`
|
||||
`https://${domain}/users/${user}/followers`,
|
||||
...tags
|
||||
],
|
||||
"sensitive": false,
|
||||
"content": postContentHtml,
|
||||
|
|
Loading…
Add table
Reference in a new issue