@@ -10,7 +10,7 @@ import Data.Binary (Binary)
10
10
import Data.Data (Typeable )
11
11
import Data.Foldable (for_ )
12
12
import Data.Functor ((<&>) )
13
- import Data.List (find , lookup , nub , sort )
13
+ import Data.List (find , isPrefixOf , lookup , nub , sort )
14
14
import Data.List.NonEmpty (NonEmpty (.. ))
15
15
import qualified Data.List.NonEmpty as NE
16
16
import qualified Data.Map.Strict as Map
@@ -74,7 +74,7 @@ main = hakyll $ do
74
74
[ listField
75
75
" files"
76
76
( mconcat
77
- [ urlField " url" ,
77
+ [ indexlessUrlField " url" ,
78
78
field " name" (pure . view _1 . itemBody),
79
79
-- Set the language that highlight.js should use for syntax highlighting
80
80
field " language" $ \ (itemBody -> (filename, _, _)) ->
@@ -169,7 +169,13 @@ breadcrumbField idents =
169
169
170
170
breadcrumbCtx :: [Item String ] -> Context String
171
171
breadcrumbCtx parents =
172
- listField " parents" (mconcat [urlField " url" , messageTitleField, defaultContext]) (pure parents)
172
+ listField " parents" (mconcat [indexlessUrlField " url" , messageTitleField, defaultContext]) (pure parents)
173
+
174
+ indexlessUrlField :: String -> Context a
175
+ indexlessUrlField key = field key $ \ i ->
176
+ let id = itemIdentifier i
177
+ empty' = fail $ " No route url found for item " ++ show id
178
+ in maybe empty' (indexless . toUrl) <$> getRoute id
173
179
174
180
messageTitleField :: Context String
175
181
messageTitleField = field " title" getTitle
@@ -185,7 +191,7 @@ messageTitleField = field "title" getTitle
185
191
Nothing -> pure " "
186
192
187
193
messageCtx :: Context String
188
- messageCtx = field " id" (pure . getId)
194
+ messageCtx = field " id" (pure . getId) <> indexlessUrlField " url "
189
195
190
196
getId :: Item a -> String
191
197
getId item = fromMaybe " " $ getIdentId (itemIdentifier item)
@@ -271,3 +277,11 @@ flagSetFields =
271
277
Just (_, g) -> return $ unwords g
272
278
Nothing -> return " "
273
279
]
280
+
281
+ indexless :: String -> String
282
+ indexless url
283
+ | reverse toDrop `isPrefixOf` lru = reverse $ drop (length toDrop) lru
284
+ | otherwise = url
285
+ where
286
+ lru = reverse url
287
+ toDrop = " index.html"
0 commit comments