aboutsummaryrefslogtreecommitdiff
path: root/src/lib/thread.ts
blob: d7460c7b7081e47f20bdc77772adeafb6b67278f (plain)
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> '
    });
}