Skip to content

Commit 79f54d8

Browse files
Remove "index.html" from navigation links
This makes the URLs cleaner and makes it easier to migrate to a fancier architecture in the future should we so desire.
1 parent bf975b6 commit 79f54d8

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

message-index/site.hs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Data.Binary (Binary)
1010
import Data.Data (Typeable)
1111
import Data.Foldable (for_)
1212
import Data.Functor ((<&>))
13-
import Data.List (find, lookup, nub, sort)
13+
import Data.List (find, isPrefixOf, lookup, nub, sort)
1414
import Data.List.NonEmpty (NonEmpty (..))
1515
import qualified Data.List.NonEmpty as NE
1616
import qualified Data.Map.Strict as Map
@@ -74,7 +74,7 @@ main = hakyll $ do
7474
[ listField
7575
"files"
7676
( mconcat
77-
[ urlField "url",
77+
[ indexlessUrlField "url",
7878
field "name" (pure . view _1 . itemBody),
7979
-- Set the language that highlight.js should use for syntax highlighting
8080
field "language" $ \(itemBody -> (filename, _, _)) ->
@@ -165,7 +165,13 @@ breadcrumbField idents =
165165

166166
breadcrumbCtx :: [Item String] -> Context String
167167
breadcrumbCtx parents =
168-
listField "parents" (mconcat [urlField "url", messageTitleField, defaultContext]) (pure parents)
168+
listField "parents" (mconcat [indexlessUrlField "url", messageTitleField, defaultContext]) (pure parents)
169+
170+
indexlessUrlField :: String -> Context a
171+
indexlessUrlField key = field key $ \i ->
172+
let id = itemIdentifier i
173+
empty' = fail $ "No route url found for item " ++ show id
174+
in maybe empty' (indexless . toUrl) <$> getRoute id
169175

170176
messageTitleField :: Context String
171177
messageTitleField = field "title" getTitle
@@ -181,7 +187,7 @@ messageTitleField = field "title" getTitle
181187
Nothing -> pure ""
182188

183189
messageCtx :: Context String
184-
messageCtx = field "id" (pure . getId)
190+
messageCtx = field "id" (pure . getId) <> indexlessUrlField "url"
185191

186192
getId :: Item a -> String
187193
getId item = fromMaybe "" $ getIdentId (itemIdentifier item)
@@ -267,3 +273,11 @@ flagSetFields =
267273
Just (_, g) -> return $ unwords g
268274
Nothing -> return ""
269275
]
276+
277+
indexless :: String -> String
278+
indexless url
279+
| reverse toDrop `isPrefixOf` lru = reverse $ drop (length toDrop) lru
280+
| otherwise = url
281+
where
282+
lru = reverse url
283+
toDrop = "index.html"

0 commit comments

Comments
 (0)