1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
import { existsSync } from 'fs';
import { v4 as uuidV4, v5 as uuidV5, NIL as uuidNIL } from 'uuid';
import { saveImg, getImgType } from './image';
import type { Thread, Comment } from '../models/Thread'
export async function processThreadIn(board: string, thread: Thread) {
for(let comment of thread.comments) {
comment.id += thread.id;
comment.content = replaceURLs(comment.content, board, thread.id);
}
}
export function processThreadOut(form: any): Thread {
let img = form.get('image');
let t: Thread = {
title: form.get('title'),
content: form.get('content'),
image: saveImg(img),
imagetype: getImgType(img),
}
return t;
}
export function processCommentOut(form: any): Comment {
let img = form.get('image');
let c: Comment = {
content: form.get('content'),
image: saveImg(img),
imagetype: getImgType(img),
}
return c;
}
function replaceURLs(text: string, board: string, OPtid?: string): string {
if(!text) return;
let quoteRegex = />\s.*/g;
text = text.replace(quoteRegex, (q) => {
return ` <span class="quote"> ${q} </span> `;
});
let replyRegex = />>\d+/g;
text = text.replace(replyRegex, (id) => {
let showid = id;
id = id.replace(/>/g, '');
if(id == OPtid) showid += "(OP)";
// to highlight referenced id
return ` <a class="${id}" href="#${id}" onmouseover="document.getElementById('${id}').classList.add('targeted')" onmouseleave="document.getElementById('${id}').classList.remove('targeted')"> ${showid} </a> `;
});
// link to thread on other board
// let otherthreadlinkRegex = />>>\/.*\/[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}/g;
// text = text.replace(otherthreadlinkRegex, (id) => {
// let link = id.slice(4);
// let parts = link.split('/');
// let linkid = parts[1]; let board = parts[0];
// return ` <a href="${board}/${linkid}#{linkid}"> >>>/${board}/${linkid} </a> `
// });
// link to thread on this board
// let threadlinkRegex = />>>[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}/g;
// text = text.replace(threadlinkRegex, (id) => {
// let linkid = id.slice(3); // remove the first >>>
// return ` <a href="../${board}/${linkid}#${linkid}"> ${id} </a> `
// });
// link to another board
// let otherboardRegex = />>>\/.*\/($|[^0-9a-fA-F])/g;
// text = text.replace(otherboardRegex, (id) => {
// let boardid = id.split('/')[1];
// return ` <a href="../${boardid}"> >>>/${boardid}/ </a> `
// });
let newlineRegex = /(\r\n|\r|\n)/g;
text = text.replace(newlineRegex, () => {
return ' <br> '
});
let urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/g;
return text.replace(urlRegex, (url) => {
var hyperlink = url;
if (!hyperlink.match('^https?:\/\/')) {
hyperlink = 'http://' + hyperlink;
}
return ' <a href="' + hyperlink + '" target="_blank" rel="noopener noreferrer">' + url + '</a> '
});
}
|