Skip to content

Commit 1d13064

Browse files
authored
Add title for pages and use chevron when sensible in headings (#943)
1 parent c1674d9 commit 1d13064

10 files changed

Lines changed: 69 additions & 19 deletions

File tree

changelog.d/943

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
synopsis: Add title for pages and use chevron when sensible in headings
2+
prs: #943
3+
issues: #602
4+
5+
description: {
6+
7+
- Add title for about, categories, specific categories, sign in, 404, searching
8+
- Change title for packages (add "— Flora.pm")
9+
- For specific categories have heading "Categories > Audio" instead of "Audio"
10+
11+
}

src/web/FloraWeb/Components/PackageListHeader.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import FloraWeb.Components.Icons qualified as Icons
88
import FloraWeb.Pages.Templates.Types
99

1010
presentationHeader
11-
:: Text
11+
:: FloraHTML
1212
-- ^ Title of the listing. It can be a Category name, a search term
1313
-> Text
1414
-- ^ Subtitle; It can be a category description, or being empty
@@ -19,7 +19,7 @@ presentationHeader title subtitle numberOfPackages = do
1919
div_ [class_ "divider"] $ do
2020
div_ [class_ "page-title"] $ do
2121
h1_ [class_ ""] $ do
22-
span_ [class_ "headline"] $ toHtml title
22+
span_ [class_ "headline"] title
2323
div_ [class_ "synopsis lg:text-xl text-center"] $
2424
p_ [class_ ""] (toHtml subtitle)
2525
p_ [class_ "package-count"] $ toHtml $ display numberOfPackages <> " results"

src/web/FloraWeb/Pages/Server.hs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,12 @@ aboutHandler (Headers session _) = do
5151
& #activeElements
5252
% #aboutNav
5353
.~ True
54-
render templateEnv Home.about
54+
render
55+
templateEnv
56+
{ title = "About — Flora.pm"
57+
, description = "About the Flora.pm project"
58+
}
59+
Home.about
5560

5661
serveNotFound :: RequireCallStack => SessionWithCookies (Maybe User) -> FloraEff (Html ())
5762
serveNotFound (Headers session _) = web404 session

src/web/FloraWeb/Pages/Server/Categories.hs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import Flora.Model.Package.Query qualified as Query
1717
import Flora.Model.User (User)
1818
import FloraWeb.Common.Auth.Types (SessionWithCookies)
1919
import FloraWeb.Pages.Routes.Categories (Routes, Routes' (..))
20-
import FloraWeb.Pages.Templates (defaultTemplateEnv, render, templateFromSession)
20+
import FloraWeb.Pages.Templates (TemplateEnv (..), defaultTemplateEnv, render, templateFromSession)
2121
import FloraWeb.Pages.Templates.Error
2222
import FloraWeb.Pages.Templates.Screens.Categories qualified as Template
2323
import FloraWeb.Types (FloraEff)
@@ -34,8 +34,13 @@ indexHandler
3434
=> SessionWithCookies (Maybe User)
3535
-> Eff es (Html ())
3636
indexHandler (Headers session _) = do
37-
templateEnv <- templateFromSession session defaultTemplateEnv
37+
templateEnv' <- templateFromSession session defaultTemplateEnv
3838
categories <- Query.getAllCategories
39+
let templateEnv =
40+
templateEnv'
41+
{ title = "Categories — Flora.pm"
42+
, description = "Categories of packages in the Haskell ecosystem"
43+
}
3944
render templateEnv $ Template.index categories
4045

4146
showHandler
@@ -49,10 +54,16 @@ showHandler
4954
-> Text
5055
-> Eff es (Html ())
5156
showHandler (Headers session _) categorySlug = do
52-
templateEnv <- templateFromSession session defaultTemplateEnv
57+
templateEnv' <- templateFromSession session defaultTemplateEnv
58+
5359
result <- Query.getCategoryBySlug categorySlug
5460
case result of
55-
Nothing -> renderError templateEnv notFound404
61+
Nothing -> renderError templateEnv' notFound404
5662
Just cat -> do
5763
packagesInfo <- Query.getPackagesFromCategoryWithLatestVersion cat.categoryId
64+
let templateEnv =
65+
templateEnv'
66+
{ title = "Categories › " <> cat.name <> " — Flora.pm"
67+
, description = "Categories of packages in the Haskell ecosystem"
68+
}
5869
render templateEnv $ Template.showCategory cat packagesInfo

src/web/FloraWeb/Pages/Server/Packages.hs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,14 @@ listPackagesHandler
9191
listPackagesHandler (Headers session _) pageParam = do
9292
Tracing.rootSpan alwaysSampled "list-all-packages" $ do
9393
let pageNumber = pageParam ?: PositiveUnsafe 1
94-
templateDefaults <- templateFromSession session defaultTemplateEnv
94+
templateEnv' <- templateFromSession session defaultTemplateEnv
9595
(count', results) <- Search.listAllPackages (fromPage pageNumber)
96-
render templateDefaults $ Search.showAllPackages count' pageNumber results
96+
let templateEnv =
97+
templateEnv'
98+
{ title = "Packages — Flora.pm"
99+
, description = "List of packages"
100+
}
101+
render templateEnv $ Search.showAllPackages count' pageNumber results
97102

98103
showNamespaceHandler
99104
:: ( DB :> es
@@ -119,6 +124,7 @@ showNamespaceHandler (Headers session _) packageNamespace pageParam =
119124
let templateEnv =
120125
templateDefaults
121126
{ navbarSearchContent = Just $ "in:" <> display packageNamespace <> " "
127+
, title = "Core packages — Flora.pm"
122128
, description = description
123129
}
124130
render templateEnv $
@@ -136,6 +142,7 @@ showNamespaceHandler (Headers session _) packageNamespace pageParam =
136142
let templateEnv =
137143
templateDefaults
138144
{ navbarSearchContent = Just $ "in:" <> display packageNamespace <> " "
145+
, title = "Packages in " <> display packageNamespace <> " — Flora.pm"
139146
, description = packageIndex.description
140147
}
141148
render templateEnv $
@@ -215,7 +222,7 @@ showPackageVersion (Headers session _) packageNamespace packageName mversion =
215222

216223
let templateEnv =
217224
templateEnv'
218-
{ title = display packageNamespace <> "/" <> display packageName
225+
{ title = display packageNamespace <> "" <> display packageName <> " — Flora.pm"
219226
, description = release.synopsis
220227
, indexPage = isNothing mversion
221228
}
@@ -367,7 +374,7 @@ showVersionDependenciesHandler (Headers session _) packageNamespace packageName
367374
release <- guardThatReleaseExists package.packageId version $ const (web404 session)
368375
let templateEnv =
369376
templateEnv'
370-
{ title = display packageNamespace <> "/" <> display packageName
377+
{ title = display packageNamespace <> "" <> display packageName <> " › dependencies — Flora.pm"
371378
, description = "Dependencies of " <> display packageNamespace <> display packageName
372379
}
373380
releaseDependencies <-

src/web/FloraWeb/Pages/Server/Search.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ searchHandler (Headers session _) (Just searchString) pageParam = do
3131
let templateEnv =
3232
templateDefaults
3333
{ navbarSearchContent = Just searchString
34+
, title = "'" <> searchString <> "' search — Flora.pm"
3435
}
3536
let pagination = fromPage pageNumber
3637
case Search.parseSearchQuery searchString of

src/web/FloraWeb/Pages/Server/Sessions.hs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,13 @@ newSessionHandler (Headers session _) = do
3838
case mUser of
3939
Nothing -> do
4040
Log.logInfo_ "[+] No user logged-in"
41-
templateDefaults <- templateFromSession session defaultTemplateEnv
42-
html <- render templateDefaults Sessions.newSession
41+
templateEnv' <- templateFromSession session defaultTemplateEnv
42+
let templateEnv =
43+
templateEnv'
44+
{ title = "Sign in — Flora.pm"
45+
, description = "Sign in page"
46+
}
47+
html <- render templateEnv Sessions.newSession
4348
pure $ AuthenticationRequired html
4449
Just u -> do
4550
Log.logInfo_ $ "[+] User is already logged: " <> display u

src/web/FloraWeb/Pages/Templates/Error.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ renderError
2525
-> Status
2626
-> Eff es a
2727
renderError env status = do
28-
let templateEnv = env & (#title .~ "Flora :: *** Exception")
28+
let templateEnv' = env & (#title .~ "Flora :: *** Exception")
29+
let templateEnv =
30+
templateEnv'
31+
{ title = "404 — Flora.pm"
32+
}
2933
let body = mkErrorPage templateEnv $ showError status
3034
throwError $
3135
ServerError

src/web/FloraWeb/Pages/Templates/Screens/Categories/Show.hs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,18 @@ import Lucid
66

77
import Flora.Model.Category.Types (Category (..))
88
import Flora.Model.Package (PackageInfo)
9+
import FloraWeb.Components.Icons qualified as Icon
910
import FloraWeb.Components.PackageListHeader (presentationHeader)
1011
import FloraWeb.Pages.Templates (FloraHTML)
1112
import FloraWeb.Pages.Templates.Packages (packageListing)
1213

1314
showCategory :: Category -> Vector PackageInfo -> FloraHTML
1415
showCategory Category{name, synopsis} packagesInfo = do
1516
div_ [class_ "container"] $ do
16-
presentationHeader name synopsis (fromIntegral $ V.length packagesInfo)
17+
let title =
18+
span_ [class_ "headline"] $ do
19+
"Categories"
20+
Icon.chevronRightOutline
21+
toHtml name
22+
presentationHeader title synopsis (fromIntegral $ V.length packagesInfo)
1723
packageListing Nothing packagesInfo

src/web/FloraWeb/Pages/Templates/Screens/Search.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ showAllPackagesInNamespace
3131
-> FloraHTML
3232
showAllPackagesInNamespace namespace description count currentPage packagesInfo = do
3333
div_ [class_ "container"] $ do
34-
presentationHeader (display namespace) description count
34+
presentationHeader (toHtml $ display namespace) description count
3535
div_ [class_ ""] $ packageListing Nothing packagesInfo
3636
paginationNav count currentPage (ListAllPackagesInNamespace namespace)
3737

@@ -46,7 +46,7 @@ showResults
4646
-> FloraHTML
4747
showResults searchString count currentPage exactMatches results = do
4848
div_ [class_ "container"] $ do
49-
presentationHeader searchString "" count
49+
presentationHeader (toHtml searchString) "" count
5050
packageListing (Just exactMatches) results
5151
when (count > 30) $
5252
paginationNav count currentPage (SearchPackages searchString)
@@ -60,7 +60,7 @@ showExecutableResults
6060
-> FloraHTML
6161
showExecutableResults executableName count currentPage results = do
6262
div_ [class_ "container"] $ do
63-
presentationHeader executableName "" count
63+
presentationHeader (toHtml executableName) "" count
6464
packageWithExecutableListing results
6565
when (count > 30) $
6666
paginationNav count currentPage (SearchExecutable executableName)
@@ -74,7 +74,7 @@ showAdvisorySearchResults
7474
-> FloraHTML
7575
showAdvisorySearchResults searchTerm count currentPage results = do
7676
div_ [class_ "container"] $ do
77-
presentationHeader searchTerm "" count
77+
presentationHeader (toHtml searchTerm) "" count
7878
packageAdvisoriesListing True results
7979
when (count > 30) $
8080
paginationNav count currentPage (SearchInAdvisories searchTerm)

0 commit comments

Comments
 (0)