From 723b7e4fa1af2bbd91ff65f347f9afcb09f24ebe Mon Sep 17 00:00:00 2001 From: Alessio Date: Mon, 6 Nov 2023 14:47:46 -0400 Subject: [PATCH] Add Lists page --- internal/webserver/handler_lists.go | 23 +++++++++++++++++++ internal/webserver/server.go | 2 ++ internal/webserver/server_test.go | 11 +++++++++ internal/webserver/static/styles.css | 10 ++++++++ .../webserver/tpl/includes/nav_sidebar.tpl | 2 +- internal/webserver/tpl/list.tpl | 9 ++++++++ 6 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 internal/webserver/handler_lists.go create mode 100644 internal/webserver/tpl/list.tpl diff --git a/internal/webserver/handler_lists.go b/internal/webserver/handler_lists.go new file mode 100644 index 0000000..80904e1 --- /dev/null +++ b/internal/webserver/handler_lists.go @@ -0,0 +1,23 @@ +package webserver + +import ( + // "errors" + "net/http" + + "gitlab.com/offline-twitter/twitter_offline_engine/pkg/scraper" +) + +func (app *Application) Lists(w http.ResponseWriter, r *http.Request) { + app.traceLog.Printf("'Lists' handler (path: %q)", r.URL.Path) + + var users []scraper.User + err := app.Profile.DB.Select(&users, ` + select id, display_name, handle, bio, following_count, followers_count, location, website, join_date, is_private, is_verified, + is_banned, is_deleted, profile_image_url, profile_image_local_path, banner_image_url, banner_image_local_path, + pinned_tweet_id, is_content_downloaded, is_followed + from users + where is_followed = 1`) + panic_if(err) + + app.buffered_render_basic_page(w, "tpl/list.tpl", users) +} diff --git a/internal/webserver/server.go b/internal/webserver/server.go index d986789..06f185b 100644 --- a/internal/webserver/server.go +++ b/internal/webserver/server.go @@ -121,6 +121,8 @@ func (app *Application) ServeHTTP(w http.ResponseWriter, r *http.Request) { app.UserUnfollow(w, r) case "search": http.StripPrefix("/search", http.HandlerFunc(app.Search)).ServeHTTP(w, r) + case "lists": + app.Lists(w, r) default: app.UserFeed(w, r) } diff --git a/internal/webserver/server_test.go b/internal/webserver/server_test.go index e7840a9..3b0f239 100644 --- a/internal/webserver/server_test.go +++ b/internal/webserver/server_test.go @@ -543,3 +543,14 @@ func TestStaticFileNonexistent(t *testing.T) { resp := do_request(httptest.NewRequest("GET", "/static/blehblehblehwfe", nil)) require.Equal(resp.StatusCode, 404) } + +// Lists +// ----- + +func TestLists(t *testing.T) { + assert := assert.New(t) + resp := do_request(httptest.NewRequest("GET", "/lists", nil)) + root, err := html.Parse(resp.Body) + assert.NoError(err) + assert.Len(cascadia.QueryAll(root, selector(".users-list-container .author-info")), 4) +} diff --git a/internal/webserver/static/styles.css b/internal/webserver/static/styles.css index 352a1df..0225715 100644 --- a/internal/webserver/static/styles.css +++ b/internal/webserver/static/styles.css @@ -596,3 +596,13 @@ ul.dropdown-items { .like-icon.liked, .like-icon:hover { filter: invert(20%) sepia(97%) saturate(4383%) hue-rotate(321deg) brightness(101%) contrast(95%); } + +.users-list-container { + display: flex; + flex-direction: column; + gap: 1em; + padding: 1em; +} +.users-list-container .author-info .profile-image { + width: 4em; +} diff --git a/internal/webserver/tpl/includes/nav_sidebar.tpl b/internal/webserver/tpl/includes/nav_sidebar.tpl index d3f8d67..4f5cb94 100644 --- a/internal/webserver/tpl/includes/nav_sidebar.tpl +++ b/internal/webserver/tpl/includes/nav_sidebar.tpl @@ -31,7 +31,7 @@ Messages - +