Add retweet indicator on tweets

This commit is contained in:
Alessio 2023-08-13 15:57:58 -03:00
parent 2c8ef0b476
commit 107d21b7e6
6 changed files with 42 additions and 7 deletions

View File

@ -56,6 +56,7 @@ func (app *Application) buffered_render(w http.ResponseWriter, tpl *template.Tem
type TweetCollection interface {
Tweet(id scraper.TweetID) scraper.Tweet
User(id scraper.UserID) scraper.User
Retweet(id scraper.TweetID) scraper.Retweet
FocusedTweetID() scraper.TweetID
}
@ -72,6 +73,7 @@ func (app *Application) buffered_render_tweet_page(w http.ResponseWriter, tpl_fi
func_map(template.FuncMap{
"tweet": data.Tweet,
"user": data.User,
"retweet": data.Retweet,
"active_user": app.get_active_user,
"focused_tweet_id": data.FocusedTweetID,
}),

View File

@ -138,6 +138,9 @@ func (t TweetDetailData) Tweet(id scraper.TweetID) scraper.Tweet {
func (t TweetDetailData) User(id scraper.UserID) scraper.User {
return t.Users[id]
}
func (t TweetDetailData) Retweet(id scraper.TweetID) scraper.Retweet {
return t.Retweets[id]
}
func (t TweetDetailData) FocusedTweetID() scraper.TweetID {
return t.MainTweetID
}
@ -217,6 +220,10 @@ func (t UserProfileData) Tweet(id scraper.TweetID) scraper.Tweet {
func (t UserProfileData) User(id scraper.UserID) scraper.User {
return t.Users[id]
}
func (t UserProfileData) Retweet(id scraper.TweetID) scraper.Retweet {
return t.Retweets[id]
}
func (t UserProfileData) FocusedTweetID() scraper.TweetID {
return scraper.TweetID(0)
}

View File

@ -385,3 +385,17 @@ input[type="submit"] {
.quick-link .author-info {
pointer-events: none;
}
.retweet-info-container {
margin-left: 3.5em;
display: flex;
align-items: center;
opacity: 0.8;
}
.retweet-info-container .svg-icon {
width: 1.2em; /* override default from .svg-icon of 1.5em */
opacity: 0.6;
margin-right: 0.3em;
}
.retweeted-by-label {
margin: 0 0.2em;
}

View File

@ -4,18 +4,18 @@
{{define "main"}}
{{range .ParentIDs}}
<div class="thread-parent-tweet">
{{template "tweet" .}}
{{template "tweet" (dict "TweetID" . "RetweetID" 0)}}
</div>
{{end}}
<div class="focused-tweet">
{{template "tweet" .MainTweetID}}
{{template "tweet" (dict "TweetID" .MainTweetID "RetweetID" 0)}}
</div>
{{range .ReplyChains}}
<div class="reply-chain">
{{range .}}
<div class="reply-tweet">
{{template "tweet" .}}
{{template "tweet" (dict "TweetID" . "RetweetID" 0)}}
</div>
{{end}}
</div>

View File

@ -1,5 +1,5 @@
{{define "tweet"}}
{{$main_tweet := (tweet .)}}
{{$main_tweet := (tweet .TweetID)}}
{{$author := (user $main_tweet.UserID)}}
<div class="tweet"
{{if (not (eq $main_tweet.ID (focused_tweet_id)))}}
@ -10,6 +10,17 @@
hx-push-url="true"
{{end}}
>
{{if (not (eq .RetweetID 0))}}
{{$retweet := (retweet .RetweetID)}}
{{$retweet_user := (user $retweet.RetweetedByID)}}
<div class="retweet-info-container">
<img class="svg-icon" src="/static/icons/retweet.svg" />
<span class="retweeted-by-label">Retweeted by</span>
<a class="retweeted-by-user" hx-get="/{{$retweet_user.Handle}}" hx-target="body" hx-swap="outerHTML" hx-push-url="true">
{{$retweet_user.DisplayName}}
</a>
</div>
{{end}}
<div class="tweet-header-container">
<div class="author-info-container" hx-trigger="click consume">
{{template "author-info" $author}}

View File

@ -36,9 +36,7 @@ func (l CommaSeparatedList) Value() (driver.Value, error) {
}
type Tweet struct {
ID TweetID `db:"id"`
UserID UserID `db:"user_id"`
User *User
ID TweetID `db:"id"`
Text string `db:"text"`
IsExpandable bool `db:"is_expandable"`
PostedAt Timestamp `db:"posted_at"`
@ -49,6 +47,9 @@ type Tweet struct {
InReplyToID TweetID `db:"in_reply_to_id"`
QuotedTweetID TweetID `db:"quoted_tweet_id"`
UserID UserID `db:"user_id"`
User *User `db:"user"`
// For processing tombstones
UserHandle UserHandle
in_reply_to_user_handle UserHandle