@@ -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, _, _)) ->
@@ -165,7 +165,13 @@ breadcrumbField idents =
165
165
166
166
breadcrumbCtx :: [Item String ] -> Context String
167
167
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
169
175
170
176
messageTitleField :: Context String
171
177
messageTitleField = field " title" getTitle
@@ -181,7 +187,7 @@ messageTitleField = field "title" getTitle
181
187
Nothing -> pure " "
182
188
183
189
messageCtx :: Context String
184
- messageCtx = field " id" (pure . getId)
190
+ messageCtx = field " id" (pure . getId) <> indexlessUrlField " url "
185
191
186
192
getId :: Item a -> String
187
193
getId item = fromMaybe " " $ getIdentId (itemIdentifier item)
@@ -267,3 +273,11 @@ flagSetFields =
267
273
Just (_, g) -> return $ unwords g
268
274
Nothing -> return " "
269
275
]
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