From ff11fdf1af8c56f39cfcc7c445d8f0f417f16d8f Mon Sep 17 00:00:00 2001 From: Alessio Date: Fri, 18 Aug 2023 16:41:04 -0300 Subject: [PATCH] Make quoted tweets not suck anymore --- internal/webserver/server_test.go | 10 +++++---- internal/webserver/static/icons/link3.svg | 2 +- internal/webserver/static/styles.css | 10 +++++---- internal/webserver/tpl/tweet_detail.tpl | 6 +++--- .../tpl/tweet_page_includes/single_tweet.tpl | 21 ++++--------------- pkg/persistence/compound_queries.go | 1 + 6 files changed, 21 insertions(+), 29 deletions(-) diff --git a/internal/webserver/server_test.go b/internal/webserver/server_test.go index cb245bb..c862c78 100644 --- a/internal/webserver/server_test.go +++ b/internal/webserver/server_test.go @@ -81,8 +81,10 @@ func TestUserFeed(t *testing.T) { title_node := cascadia.Query(root, selector("title")) assert.Equal(title_node.FirstChild.Data, "Offline Twitter | @Cernovich") - tweet_nodes := cascadia.QueryAll(root, selector(".tweet")) + tweet_nodes := cascadia.QueryAll(root, selector(".timeline > .tweet")) assert.Len(tweet_nodes, 7) + including_quote_tweets := cascadia.QueryAll(root, selector(".tweet")) + assert.Len(including_quote_tweets, 9) } func TestUserFeedMissing(t *testing.T) { @@ -105,7 +107,7 @@ func TestUserFeedWithCursor(t *testing.T) { title_node := cascadia.Query(root, selector("title")) assert.Equal(title_node.FirstChild.Data, "Offline Twitter | @Cernovich") - tweet_nodes := cascadia.QueryAll(root, selector(".tweet")) + tweet_nodes := cascadia.QueryAll(root, selector(".timeline > .tweet")) assert.Len(tweet_nodes, 2) } @@ -132,7 +134,7 @@ func TestTimeline(t *testing.T) { title_node := cascadia.Query(root, selector("title")) assert.Equal(title_node.FirstChild.Data, "Offline Twitter | Timeline") - tweet_nodes := cascadia.QueryAll(root, selector(".tweet")) + tweet_nodes := cascadia.QueryAll(root, selector(".timeline > .tweet")) assert.Len(tweet_nodes, 18) } @@ -148,7 +150,7 @@ func TestTimelineWithCursor(t *testing.T) { title_node := cascadia.Query(root, selector("title")) assert.Equal(title_node.FirstChild.Data, "Offline Twitter | Timeline") - tweet_nodes := cascadia.QueryAll(root, selector(".tweet")) + tweet_nodes := cascadia.QueryAll(root, selector(".timeline > .tweet")) assert.Len(tweet_nodes, 10) } diff --git a/internal/webserver/static/icons/link3.svg b/internal/webserver/static/icons/link3.svg index 0e32cda..42f0297 100644 --- a/internal/webserver/static/icons/link3.svg +++ b/internal/webserver/static/icons/link3.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/internal/webserver/static/styles.css b/internal/webserver/static/styles.css index 671b890..d3532f9 100644 --- a/internal/webserver/static/styles.css +++ b/internal/webserver/static/styles.css @@ -56,8 +56,7 @@ input, select { } .quoted-tweet { - padding: 1.3em; - margin-top: 1em; + margin: 1em 0; } .rounded-gray-outline { @@ -312,11 +311,14 @@ ul.quick-links { margin-bottom: 0.1em; border-bottom: 1px solid var(--color-outline-gray); } -.timeline .tweet { - border-bottom: 1px solid var(--color-twitter-off-white-dark); +.timeline .tweet, .quoted-tweet .tweet { padding-top: 0.8em; padding-bottom: 0.8em; } +.timeline > .tweet { + /* not for nested (i.e., quoted) tweets */ + border-bottom: 1px solid var(--color-twitter-off-white-dark); +} .top-bar { display: flex; diff --git a/internal/webserver/tpl/tweet_detail.tpl b/internal/webserver/tpl/tweet_detail.tpl index 0a0e21f..57dfe1d 100644 --- a/internal/webserver/tpl/tweet_detail.tpl +++ b/internal/webserver/tpl/tweet_detail.tpl @@ -4,18 +4,18 @@ {{define "main"}} {{range .ParentIDs}}
- {{template "tweet" (dict "TweetID" . "RetweetID" 0)}} + {{template "tweet" (dict "TweetID" . "RetweetID" 0 "QuoteNestingLevel" 0)}}
{{end}}
- {{template "tweet" (dict "TweetID" .MainTweetID "RetweetID" 0)}} + {{template "tweet" (dict "TweetID" .MainTweetID "RetweetID" 0 "QuoteNestingLevel" 0)}}
{{range .ReplyChains}}
{{range .}}
- {{template "tweet" (dict "TweetID" . "RetweetID" 0)}} + {{template "tweet" (dict "TweetID" . "RetweetID" 0 "QuoteNestingLevel" 0)}}
{{end}}
diff --git a/internal/webserver/tpl/tweet_page_includes/single_tweet.tpl b/internal/webserver/tpl/tweet_page_includes/single_tweet.tpl index 84f260e..fb1618e 100644 --- a/internal/webserver/tpl/tweet_page_includes/single_tweet.tpl +++ b/internal/webserver/tpl/tweet_page_includes/single_tweet.tpl @@ -79,23 +79,10 @@ {{template "poll" .}} {{end}} - {{if $main_tweet.QuotedTweetID}} - {{$quoted_tweet := (tweet $main_tweet.QuotedTweetID)}} - {{$quoted_author := (user $quoted_tweet.UserID)}} - -
- {{template "author-info" $quoted_author}} -
- - {{$quoted_tweet.Text}} - - {{range $quoted_tweet.Images}} - - {{end}} -

{{$quoted_tweet.PostedAt.Time.Format "Jan 2, 2006"}}

-
-
- + {{if (and $main_tweet.QuotedTweetID (lt .QuoteNestingLevel 1))}} +
+ {{template "tweet" (dict "TweetID" $main_tweet.QuotedTweetID "RetweetID" 0 "QuoteNestingLevel" (add .QuoteNestingLevel 1))}} +
{{end}} diff --git a/pkg/persistence/compound_queries.go b/pkg/persistence/compound_queries.go index a0d6ee2..da19c88 100644 --- a/pkg/persistence/compound_queries.go +++ b/pkg/persistence/compound_queries.go @@ -283,6 +283,7 @@ func (p Profile) GetTweetDetail(id TweetID) (TweetDetailView, error) { type FeedItem struct { TweetID RetweetID TweetID + QuoteNestingLevel int } type Feed struct { Items []FeedItem