Once a target is compiled, the user usually wants to save it to the disk.
This is where the Routes
type comes in; it determines where a certain
target should be written.
Suppose we have an item foo/bar.markdown
. We can render this to
foo/bar.html
using:
route "foo/bar.markdown" (setExtension ".html")
If we do not want to change the extension, we can use idRoute
, the simplest
route available:
route "foo/bar.markdown" idRoute
That will route foo/bar.markdown
to foo/bar.markdown
.
Note that the extension says nothing about the content! If you set the
extension to .html
, it is your own responsibility to ensure that the
content is indeed HTML.
Finally, some special cases:
- If there is no route for an item, this item will not be routed, so it will not appear in your site directory.
- If an item matches multiple routes, the first rule will be chosen.
- data Routes
- runRoutes :: Routes -> Identifier -> Maybe FilePath
- idRoute :: Routes
- setExtension :: String -> Routes
- ifMatch :: Pattern -> Routes -> Routes
- customRoute :: (Identifier -> FilePath) -> Routes
Documentation
A route that uses the identifier as filepath. For example, the target with
ID foo/bar
will be written to the file foo/bar
.
setExtension :: String -> RoutesSource
Set (or replace) the extension of a route.
Example:
runRoute (setExtension "html") "foo/bar"
Result:
Just "foo/bar.html"
Example:
runRoute (setExtension "html") "posts/the-art-of-trolling.markdown"
Result:
Just "posts/the-art-of-trolling.html"
ifMatch :: Pattern -> Routes -> RoutesSource
Modify a route: apply the route if the identifier matches the given pattern, fail otherwise.
customRoute :: (Identifier -> FilePath) -> RoutesSource
Create a custom route. This should almost always be used with ifMatch
.