From eec1873e28347530feefa256ec5c3d8614f39fae Mon Sep 17 00:00:00 2001 From: tdgmcode Date: Sat, 18 Mar 2023 23:02:25 -0400 Subject: [PATCH] Added editing posts --- src/lib/components/Post.svelte | 7 ++- src/lib/components/PostBody.svelte | 6 +-- src/lib/components/PostList.svelte | 2 +- src/lib/db/db.js | 5 ++ src/lib/db/handlers.js | 73 +++++++++++++++++++++--------- src/routes/new_post/+page.svelte | 5 +- static/edit.svg | 49 ++++++++++++++++++++ 7 files changed, 119 insertions(+), 28 deletions(-) create mode 100644 static/edit.svg diff --git a/src/lib/components/Post.svelte b/src/lib/components/Post.svelte index e551081..f7ac174 100644 --- a/src/lib/components/Post.svelte +++ b/src/lib/components/Post.svelte @@ -97,7 +97,7 @@ Failed to get post.

-{:else} +{:else if content} @@ -130,6 +130,11 @@ data={''} icon='/delete.svg' /> + {/if} {#if id} img, video { - max-width: 100px; + max-width: 200px; max-height: 200px; margin: 5px; } .only-img { - max-width: 200px; - max-height: 450px; + max-width: 300px; + max-height: 300px; display: block; } diff --git a/src/lib/components/PostList.svelte b/src/lib/components/PostList.svelte index 8014d44..a81f95e 100644 --- a/src/lib/components/PostList.svelte +++ b/src/lib/components/PostList.svelte @@ -3,7 +3,7 @@ import Button from '$lib/components/Button.svelte'; import {setLocation} from '$lib/util.js'; - export let data, noRatings; + export let data, noRatings = false;

diff --git a/src/lib/db/db.js b/src/lib/db/db.js index b9a0564..5080a93 100644 --- a/src/lib/db/db.js +++ b/src/lib/db/db.js @@ -63,6 +63,11 @@ async function initDb() { time INTEGER \ )'); + await db.run('CREATE TABLE IF NOT EXISTS tag ( \ + id CHAR(64), \ + reply CHAR(64) \ + )'); + await db.run('CREATE TABLE IF NOT EXISTS chat ( \ username CHAR(64), \ content CHAR(10240), \ diff --git a/src/lib/db/handlers.js b/src/lib/db/handlers.js index b9365e8..9c9613b 100644 --- a/src/lib/db/handlers.js +++ b/src/lib/db/handlers.js @@ -170,7 +170,7 @@ backend.login = async ({user, pass, cookies},{db}) => { return { success: 'Successfully logged into account.', data: token, location: '/'}; } -backend.postCreate = async ({content}, {user,db}) => { +backend.postCreate = async ({content, edit}, {user,db}) => { if (!content) return {'success': 'No post provided.'} var lengthCheck = checkLength(content,'Post content',1,10240); @@ -178,40 +178,69 @@ backend.postCreate = async ({content}, {user,db}) => { if (lengthCheck) return lengthCheck; + let userData = (await db.all('SELECT * FROM post WHERE id = ?', [ + edit || '' + ])); + var id = randomBytes(10).toString('hex'); + if (edit && userData[0] && userData[0].user === user) + id = edit; + var postFlatten = formatPost(content).flat(); - var reply = postFlatten[postFlatten.findIndex(x => x.subtype == 'post')]; + var reply = postFlatten.filter(x => x.subtype == 'post').map(x => x.url.split('/').pop()); + var firstReply = reply[0]; - if (reply) - reply = reply.url.split('/').pop(); + await db.run('DELETE from tag WHERE id = ?', [ + id + ]) - if (reply) { + if (firstReply) { let replyData = (await db.all('SELECT * FROM post WHERE id = ?', [ - reply + firstReply ])); let replyUser = ''; if (replyData && replyData[0]) replyUser = replyData[0].username; - await db.run('INSERT INTO messages (username, content, time,read) VALUES (?, ?, ?, ?)', [ - replyUser, - `@${user} replied to #${reply} on #${id}`, - Math.floor(new Date() * 1000), - 0 - ]); + if (replyUser && !edit) { + await db.run('INSERT INTO messages (username, content, time,read) VALUES (?, ?, ?, ?)', [ + replyUser, + `@${user} replied to #${irstReply} on #${id}`, + Math.floor(new Date() * 1000), + 0 + ]); + } } - await db.run('INSERT INTO post (username, id, content, rating, reply, time) VALUES (?, ?, ?, ?, ?, ?)', [ - user, - id, - content, - calcVote(0,0), - reply || '', - Math.floor(new Date() * 1000) - ]) + if (id === edit) { + await db.run('UPDATE post SET content = ? WHERE id = ?', [ + content, + id + ]) + + } else { + await db.run('INSERT INTO post (username, id, content, rating, reply, time) VALUES (?, ?, ?, ?, ?, ?)', [ + user, + id, + content, + calcVote(0,0), + firstReply || '', + Math.floor(new Date() * 1000) + ]) + + } + + + for (var i = 0; i < reply.length; i++) { + await db.run('INSERT INTO tag (id, reply) VALUES (?, ?)', [ + id, + reply[i] + ]) + } + return {'success': 'Your post has been broadcasted!', 'href': `/post/${id}` }; } @@ -298,7 +327,7 @@ backend.postBulk = async ({page, id, user, cookies, sort, type}, {admin, db}) => if (posts.length == 0) posts.push({}); - posts.push(...(await db.all('SELECT * from post WHERE reply = ? ORDER BY '+sort+' DESC LIMIT ?, ?', [ + posts.push(...(await db.all('SELECT * from post WHERE id IN (SELECT id FROM tag WHERE reply = ?) ORDER BY '+sort+' DESC LIMIT ?, ?', [ id, ...pageParams ]))) @@ -309,7 +338,7 @@ backend.postBulk = async ({page, id, user, cookies, sort, type}, {admin, db}) => ...pageParams ]) } else if (type == 'follow') { - posts = await db.all('SELECT * from post WHERE username IN (SELECT following from follow WHERE username = ?) ORDER BY '+sort+' DESC LIMIT ?, ?', [ + posts = await db.all('SELECT * from post WHERE username IN (SELECT following FROM follow WHERE username = ?) ORDER BY '+sort+' DESC LIMIT ?, ?', [ userAuth, ...pageParams ]) diff --git a/src/routes/new_post/+page.svelte b/src/routes/new_post/+page.svelte index 9d68b0d..bc67833 100644 --- a/src/routes/new_post/+page.svelte +++ b/src/routes/new_post/+page.svelte @@ -18,6 +18,8 @@ let currentState = 'editor'; + let edit = $page.url.searchParams.get('edit') || ''; + function setState(editor) { currentState = editor; } @@ -50,6 +52,7 @@ method='POST' on:submit|preventDefault={async e => form = JSON.parse(await handleSubmit(e)) } > + {#if currentState == 'editor'} @@ -88,7 +91,7 @@ @user mentions a user

- #post replies to a post by ID + #post tags a post as a reply or subtopic

%post links to a chatroom diff --git a/static/edit.svg b/static/edit.svg new file mode 100644 index 0000000..3540cd8 --- /dev/null +++ b/static/edit.svg @@ -0,0 +1,49 @@ + + + + + + + + + +