From 61c166b79570219a515bb3b8dd344a403708b371 Mon Sep 17 00:00:00 2001
From: r <r@freesoftwareextremist.com>
Date: Mon, 17 Jun 2024 11:41:02 +0000
Subject: Show quoted posts

---
 mastodon/status.go    |  5 ++++-
 renderer/renderer.go  | 12 ++++++++++++
 static/style.css      | 12 ++++++++++++
 templates/status.tmpl |  7 +++++++
 4 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/mastodon/status.go b/mastodon/status.go
index 20f74a5..d009a7f 100644
--- a/mastodon/status.go
+++ b/mastodon/status.go
@@ -13,7 +13,10 @@ import (
 )
 
 type StatusPleroma struct {
-	InReplyToAccountAcct string `json:"in_reply_to_account_acct"`
+	InReplyToAccountAcct string  `json:"in_reply_to_account_acct"`
+	Quote                *Status `json:"quote"`
+	QuoteID              string  `json:"quote_id"`
+	QuoteVisible         bool    `json:"quote_visible"`
 }
 
 type ReplyInfo struct {
diff --git a/renderer/renderer.go b/renderer/renderer.go
index a88bb9e..e97fee4 100644
--- a/renderer/renderer.go
+++ b/renderer/renderer.go
@@ -68,6 +68,17 @@ func statusContentFilter(content string, emojis []mastodon.Emoji, mentions []mas
 	return strings.NewReplacer(replacements...).Replace(content)
 }
 
+func getQuote(s *mastodon.Status) *mastodon.Status {
+	if s.Pleroma.Quote == nil || !s.Pleroma.QuoteVisible {
+		return nil
+	}
+	q := s.Pleroma.Quote
+	q.RetweetedByID = s.ID
+	// Disable nested quotes
+	q.Pleroma.QuoteVisible = false
+	return q
+}
+
 func displayInteractionCount(c int64) string {
 	if c > 0 {
 		return strconv.Itoa(int(c))
@@ -145,6 +156,7 @@ func NewRenderer(templateGlobPattern string) (r *renderer, err error) {
 	t, err = t.Funcs(template.FuncMap{
 		"EmojiFilter":             emojiFilter,
 		"StatusContentFilter":     statusContentFilter,
+		"GetQuote":                getQuote,
 		"DisplayInteractionCount": displayInteractionCount,
 		"TimeSince":               timeSince,
 		"TimeUntil":               timeUntil,
diff --git a/static/style.css b/static/style.css
index ad5a360..71f64d7 100644
--- a/static/style.css
+++ b/static/style.css
@@ -55,6 +55,13 @@ body,
 	position: relative;
 }
 
+.status-quote {
+	margin: 4px 0;
+	padding: 8px;
+	background-color: #e6e6e6;
+	background-color: #dadada99;
+}
+
 .status-content {
 	margin: 4px 0;
 	max-height: 600px;
@@ -585,6 +592,11 @@ input:disabled::file-selector-button {
 	background-color: #2f2f2f99;
 }
 
+.dark .status-quote {
+	background-color: #202020;
+	background-color: #26262699;
+}
+
 .dark #reply-popup,
 .dark #reply-to-popup {
 	background-color: #181818;
diff --git a/templates/status.tmpl b/templates/status.tmpl
index 503b6f1..d841a93 100644
--- a/templates/status.tmpl
+++ b/templates/status.tmpl
@@ -177,6 +177,13 @@
 				</div>
 			</form>
 			{{end}}
+			{{with $quote := GetQuote .}}
+				{{if $quote}}
+				<div class="status-quote">
+					{{template "status" (WithContext $quote $.Ctx)}}
+				</div>
+				{{end}}
+			{{end}}
 			<div class="status-action-container"> 
 				<div class="status-action">
 					<a href="/thread/{{.ID}}?reply=true#status-{{.ID}}">reply</a>
-- 
cgit v1.2.3