diff --git a/internal/webserver/handler_search.go b/internal/webserver/handler_search.go index 6a12ecb..09ce9d0 100644 --- a/internal/webserver/handler_search.go +++ b/internal/webserver/handler_search.go @@ -17,6 +17,8 @@ type SearchPageData struct { SearchText string SortOrder persistence.SortOrder SortOrderOptions []string + IsUsersSearch bool + UsersList []scraper.User // TODO: fill out the search text in the search bar as well (needs modifying the base template) } @@ -44,6 +46,14 @@ func (t SearchPageData) FocusedTweetID() scraper.TweetID { return scraper.TweetID(0) } +func (app *Application) SearchUsers(w http.ResponseWriter, r *http.Request) { + ret := NewSearchPageData() + ret.IsUsersSearch = true + ret.SearchText = strings.Trim(r.URL.Path, "/") + ret.UsersList = app.Profile.SearchUsers(ret.SearchText) + app.buffered_render_tweet_page(w, "tpl/search.tpl", ret) +} + func (app *Application) Search(w http.ResponseWriter, r *http.Request) { app.traceLog.Printf("'Search' handler (path: %q)", r.URL.Path) @@ -60,6 +70,12 @@ func (app *Application) Search(w http.ResponseWriter, r *http.Request) { return } + // Handle users search + if r.URL.Query().Get("type") == "users" { + app.SearchUsers(w, r) + return + } + // Handle "@username" if search_text[0] == '@' { http.Redirect(w, r, fmt.Sprintf("/%s", search_text[1:]), 302) diff --git a/internal/webserver/static/styles.css b/internal/webserver/static/styles.css index 0225715..81fe869 100644 --- a/internal/webserver/static/styles.css +++ b/internal/webserver/static/styles.css @@ -222,7 +222,10 @@ h3 { .user-feed-header .profile-image { width: 8em; } -.user-feed-header a.user-feed-tab { +.tabs-container { + outline: 1px solid var(--color-outline-gray); +} +.tabs-container a.tab { flex-grow: 1; text-align: center; font-size: 1.1em; @@ -230,11 +233,11 @@ h3 { color: var(--color-twitter-text-gray); padding: 0.8em; } -.user-feed-header a.user-feed-tab.active-tab { +.tabs-container a.tab.active-tab { color: var(--color-twitter-blue); border-bottom: 0.2em solid var(--color-twitter-blue); } -.user-feed-header a.user-feed-tab:hover { +.tabs-container a.tab:hover { color: var(--color-twitter-blue); } @@ -348,7 +351,6 @@ ul.quick-links { } .user-feed-header-info-container { padding: 2em; - margin-bottom: 0.1em; border-bottom: 1px solid var(--color-outline-gray); } .timeline .tweet, .quoted-tweet .tweet { @@ -600,9 +602,30 @@ ul.dropdown-items { .users-list-container { display: flex; flex-direction: column; - gap: 1em; - padding: 1em; } .users-list-container .author-info .profile-image { width: 4em; } +.users-list-container .user { + border-color: var(--color-twitter-off-white-dark); + border-bottom-style: solid; + border-width: 1px; + padding: 1em; +} +.users-list-container .user p.bio { + margin: 0 5.3em; + font-size: 0.9em; + color: var(--color-twitter-text-gray); +} +.sort-order-container { + padding: 1em 1em 1em 3em; + margin-bottom: -0.5em; + border-bottom: 1px solid var(--color-outline-gray); +} +.sort-order-container select { + text-transform: capitalize; + margin: 0 1em; +} +.sort-order-container .sort-order-label { + font-weight: bold; +} diff --git a/internal/webserver/tpl/includes/list.tpl b/internal/webserver/tpl/includes/list.tpl new file mode 100644 index 0000000..0b60b2e --- /dev/null +++ b/internal/webserver/tpl/includes/list.tpl @@ -0,0 +1,10 @@ +{{define "list"}} +
{{.Bio}}
+