From 8cb5cbc342805892a6318e537e4bdcede08cad27 Mon Sep 17 00:00:00 2001 From: "Alexander \"Arav\" Andreev" Date: Mon, 6 Feb 2023 02:00:20 +0400 Subject: [PATCH] guestbook_admin template and assets. --- web/assets/css/guestbook_admin.css | 56 ++++++++++++++++++++++++++++++ web/assets/js/guestbook_admin.js | 49 ++++++++++++++++++++++++++ web/templates/guestbook_admin.pug | 47 +++++++++++++++++++++++++ web/web.go | 1 + 4 files changed, 153 insertions(+) create mode 100755 web/assets/css/guestbook_admin.css create mode 100644 web/assets/js/guestbook_admin.js create mode 100755 web/templates/guestbook_admin.pug diff --git a/web/assets/css/guestbook_admin.css b/web/assets/css/guestbook_admin.css new file mode 100755 index 0000000..0d17e4f --- /dev/null +++ b/web/assets/css/guestbook_admin.css @@ -0,0 +1,56 @@ +::placeholder { color: var(--primary-color); } + +small { font-size: .8rem; } + +form { + display: grid; + gap: .5rem; + grid-template-areas: + "m m" + "e d"; + grid-template-columns: 1fr 1fr; + width: 100%; } + +textarea { + background-color: var(--background-color); + border: none; + border-bottom: 1px solid var(--primary-color); + color: var(--text-color); + font: inherit; + grid-area: m; + height: 5.5rem; + max-width: 100%; + min-width: 100%; } + +textarea:focus { + outline-color: var(--primary-color); + outline-style: solid; + outline-width: 1px; } + +button { + background-color: var(--primary-color); + border: none; + color: #f5f5f5; + font: inherit; + grid-area: b; + height: 2rem; } + +button:hover { + background-color: var(--secondary-color); + cursor: pointer; } + +button[name="edit-entry"], +button[name="edit-reply"], +button[name="reply"] { grid-area: e; } + +button[name="delete-entry"], +button[name="delete-reply"] { grid-area: d;} + +article:not(:last-child) { margin-bottom: 1rem; } + +article header { + display: inline; + font-size: .85rem; } + +article > *, +article div.reply > * { margin-left: .5rem; } \ No newline at end of file diff --git a/web/assets/js/guestbook_admin.js b/web/assets/js/guestbook_admin.js new file mode 100644 index 0000000..8134189 --- /dev/null +++ b/web/assets/js/guestbook_admin.js @@ -0,0 +1,49 @@ +function get_entry_id(button) { + return button.form.children[0].value +} + +// EDIT ENTRY + +function edit_entry(e) { +} + +for (const edit_entry_button of document.getElementsByName("edit-entry")) + edit_entry_button.addEventListener("click", edit_entry); + +// DELETE ENTRY + +function delete_entry(e) { + fetch("/guestbook/admin/entry/"+get_entry_id(e.target), {method:"DELETE"}) + .catch(e => console.log(e)) + .then(() => window.location = "/guestbook/admin"); +} + +for (const delete_entry_button of document.getElementsByName("delete-entry")) + delete_entry_button.addEventListener("click", delete_entry); + +// EDIT REPLY + +function edit_reply(e) { +} + +for (const edit_reply_button of document.getElementsByName("edit-reply")) + edit_reply_button.addEventListener("click", edit_reply); + +// DELETE REPLY + +function delete_reply(e) { + fetch("/guestbook/admin/reply/"+get_entry_id(e.target), {method:"DELETE"}) + .catch(e => console.log(e)) + .then(() => window.location = "/guestbook/admin"); +} + +for (const delete_reply_button of document.getElementsByName("delete-reply")) + delete_reply_button.addEventListener("click", delete_reply); + +// NEW REPLY + +function send_reply(e) { +} + +for (const reply_button of document.getElementsByName("reply")) + reply_button.addEventListener("click", send_reply); \ No newline at end of file diff --git a/web/templates/guestbook_admin.pug b/web/templates/guestbook_admin.pug new file mode 100755 index 0000000..47735a0 --- /dev/null +++ b/web/templates/guestbook_admin.pug @@ -0,0 +1,47 @@ +extends base.pug + +block meta_description + meta(name='description' content="Guestbook administration.") + +block append head + link(href='/assets/css/guestbook_admin.css' rel='stylesheet') + script(src='/assets/js/guestbook_admin.js' defer='') + +block nav + a(href='/') Home + a(href='/stuff') Stuff + a(href='/mindflow') Mindflow + a(href='/about') About + h1 Guestbook + +block content + :go:func GuestbookAdmin(title, owner string, entries []*guestbook.Entry, r *http.Request) + section#posts + if (len(entries) > 0) + each entry in entries + article + header + - var created_tz = util.ToClientTimezone(entry.Created, r).Format("2006-01-02T15:04:05") + | Entry ##{entry.ID} by #[span.highlighted #{entry.Name}] #[em #{entry.Website}] on #[time(datetime=created_tz) #{created_tz}] + form.entry(onsubmit='return false;') + input(type='hidden' value=entry.ID name='entry_id') + textarea(maxlength='4096' placeholder='Your message' name="message" required='')= entry.Message + button(name="edit-entry") Edit + button(name="delete-entry") Delete + if (entry.Reply != nil) + .reply + header + - var reply_created_tz = util.ToClientTimezone(entry.Reply.Created, r).Format("2006-01-02 15:04:05") + | Reply by #[span.highlighted #{owner}] on #[time(datetime=reply_created_tz) #{reply_created_tz}] + form.reply(onsubmit='return false;') + input(type='hidden' value=entry.ID name='entry_id') + textarea(maxlength='4096' placeholder='Your message' name="message" required='')= entry.Reply.Message + button(name="edit-reply") Edit + button(name="delete-reply") Delete + else + form.reply(onsubmit='return false;') + input(type='hidden' value=entry.ID name='entry_id') + textarea(maxlength='4096' placeholder='Write a reply' name="message" required='') + button(name="reply") Reply + else + p.center No posts. diff --git a/web/web.go b/web/web.go index 8469353..7792e1f 100644 --- a/web/web.go +++ b/web/web.go @@ -13,6 +13,7 @@ import ( // //go:generate $GOPATH/bin/jade -basedir ./templates -pkg=web -stdbuf -stdlib -writer index.pug stuff.pug mindflow.pug //go:generate $GOPATH/bin/jade -basedir ./templates -pkg=web -stdbuf -stdlib -writer about.pug guestbook.pug rss.pug +//go:generate $GOPATH/bin/jade -basedir ./templates -pkg=web -stdbuf -stdlib -writer guestbook_admin.pug //go:generate $GOPATH/bin/jade -basedir ./templates -pkg=web -stdbuf -stdlib -writer article.pug