diff options
author | dan <[email protected]> | 2023-05-15 12:36:07 -0400 |
---|---|---|
committer | dan <[email protected]> | 2023-05-15 12:36:17 -0400 |
commit | 9691f2c2d7cff4136bbd96dd5591160efa140956 (patch) | |
tree | 3149cb66b68ba52874e328a8dd701d479ff1733a | |
parent | ed3752063988c49719359ba80c8819b94829ce8e (diff) | |
download | simple-comments-widget-9691f2c2d7cff4136bbd96dd5591160efa140956.tar.gz simple-comments-widget-9691f2c2d7cff4136bbd96dd5591160efa140956.tar.bz2 simple-comments-widget-9691f2c2d7cff4136bbd96dd5591160efa140956.zip |
feat: add demo html file
-rw-r--r-- | client.js | 39 | ||||
-rw-r--r-- | style.css | 40 |
2 files changed, 68 insertions, 11 deletions
@@ -1,12 +1,22 @@ /* Config */ -const baseUrl = 'https://localhost:7060/comments'; const pageId = 'add-page-id-here'; const commentsUrl = `${baseUrl}?page_url=${pageId}`; - -/* State */ +/* Running State */ let comments = []; +/* LocalStorage Access */ + +function getDeletionKeys() { + return (localStorage.deletion_keys && JSON.parse(localStorage.deletion_keys)) || {}; +} + +function setDeletionKey(commentId, key) { + const keys = getDeletionKeys(); + keys[commentId] = key; + localStorage.deletion_keys = JSON.stringify(keys); +} + /* GUI components */ const deleteButton = x => @@ -15,7 +25,7 @@ const deleteButton = x => const commentFmt = x => `<div class='comment' id='comment${x.id}'>${x.content}<br/>${x.created_at}`+ - `${x.deletion_key ? deleteButton(x) :''}</div>`; + `${getDeletionKeys()[x.id] ? deleteButton(x) :''}</div>`; function commentsRender() { commentsthread.innerHTML = @@ -24,7 +34,6 @@ function commentsRender() { </div>`; } - /* API calls */ // GET comments @@ -39,11 +48,16 @@ function fetchComments() { }) } -// POST new comment -function createComment(comment) { +// only 64 bits so not very strong +function generateRandomKey() { const xs = new BigUint64Array(1); crypto.getRandomValues(xs); - comment.deletion_key = xs[0].toString(); + return xs[0].toString(); +} + +// POST new comment +function createComment(comment) { + comment.deletion_key = generateRandomKey(); fetch(baseUrl, { method: 'POST', body: JSON.stringify(comment), @@ -52,6 +66,7 @@ function createComment(comment) { .then(id => { const newComment = {id, created_at: 'just now', ...comment} comments = [newComment, ...comments]; + setDeletionKey(id, comment.deletion_key); commentsRender(); }) } @@ -60,14 +75,17 @@ function createComment(comment) { function handleCommentFormSubmit() { if (commentcontent.value !== "") { - createComment({page_url: pageId, content: commentcontent.value}); + createComment({ + page_url: pageId, + content: `${commentcontent.value}\n - ${username.value}`, + bot: bot.value + }); commentcontent.value = ''; } } // DELETE comment function handleDelete(commentId, deletionKey) { - console.log('deleting:',{commentId,deletionKey}); fetch( `${baseUrl}?comment=${commentId}&deletion_key=${deletionKey}`, {method: 'DELETE'} @@ -79,6 +97,5 @@ function handleDelete(commentId, deletionKey) { }); } - /* init */ fetchComments(); diff --git a/style.css b/style.css new file mode 100644 index 0000000..b0796c2 --- /dev/null +++ b/style.css @@ -0,0 +1,40 @@ +.comment-form { + margin-top: 1em; +} + +.comment-form #commentcontent { + width: 100%; +} + +.comment-form #submit { + border: 0; + line-height: 2.5; + padding: 0 20px; + font-size: 1rem; + text-align: center; + color: #fff; + text-shadow: 1px 1px 1px #000; + border-radius: 10px; + background-color: rgba(0, 0, 220, 1); + background-image: linear-gradient(to top left, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2) 30%, rgba(0, 0, 0, 0)); + box-shadow: inset 2px 2px 3px rgba(255, 255, 255, 0.6), inset -2px -2px 3px rgba(0, 0, 0, 0.6); + margin-top:2px; + cursor: pointer; +} + +@media only screen and (max-width: 450px) { + #submit { + width: 100%; + } +} + +.comment { + white-space: pre-wrap; + border:solid; + margin-bottom:0.25em; + padding:0.5em; +} + +#commentsthreadinner { + margin-top:0.5em; +} |