Safe Haskell | None |
---|---|
Language | Haskell98 |
This module containing some specialized functions to deal with tags. It assumes you follow some conventions.
We support two types of tags: tags and categories.
To use default tags, use buildTags
. Tags are placed in a comma-separated
metadata field like this:
--- author: Philip K. Dick title: Do androids dream of electric sheep? tags: future, science fiction, humanoid --- The novel is set in a post-apocalyptic near future, where the Earth and its populations have been damaged greatly by Nuclear...
To use categories, use the buildCategories
function. Categories are
determined by the directory a page is in, for example, the post
posts/coding/2010-01-28-hakyll-categories.markdown
will receive the coding
category.
Advanced users may implement custom systems using buildTagsWith
if desired.
In the above example, we would want to create a page which lists all pages in
the coding
category, for example, with the Identifier
:
tags/coding.html
This is where the first parameter of buildTags
and buildCategories
comes
in. In the above case, we used the function:
fromCapture "tags/*.html" :: String -> Identifier
The tagsRules
function lets you generate such a page for each tag in the
Rules
monad.
- data Tags = Tags {
- tagsMap :: [(String, [Identifier])]
- tagsMakeId :: String -> Identifier
- tagsDependency :: Dependency
- getTags :: MonadMetadata m => Identifier -> m [String]
- buildTagsWith :: MonadMetadata m => (Identifier -> m [String]) -> Pattern -> (String -> Identifier) -> m Tags
- buildTags :: MonadMetadata m => Pattern -> (String -> Identifier) -> m Tags
- buildCategories :: MonadMetadata m => Pattern -> (String -> Identifier) -> m Tags
- tagsRules :: Tags -> (String -> Pattern -> Rules ()) -> Rules ()
- renderTags :: (String -> String -> Int -> Int -> Int -> String) -> ([String] -> String) -> Tags -> Compiler String
- renderTagCloud :: Double -> Double -> Tags -> Compiler String
- renderTagCloudWith :: (Double -> Double -> String -> String -> Int -> Int -> Int -> String) -> ([String] -> String) -> Double -> Double -> Tags -> Compiler String
- tagCloudField :: String -> Double -> Double -> Tags -> Context a
- tagCloudFieldWith :: String -> (Double -> Double -> String -> String -> Int -> Int -> Int -> String) -> ([String] -> String) -> Double -> Double -> Tags -> Context a
- renderTagList :: Tags -> Compiler String
- tagsField :: String -> Tags -> Context a
- tagsFieldWith :: (Identifier -> Compiler [String]) -> (String -> Maybe FilePath -> Maybe Html) -> ([Html] -> Html) -> String -> Tags -> Context a
- categoryField :: String -> Tags -> Context a
- sortTagsBy :: ((String, [Identifier]) -> (String, [Identifier]) -> Ordering) -> Tags -> Tags
- caseInsensitiveTags :: (String, [Identifier]) -> (String, [Identifier]) -> Ordering
Documentation
Data about tags
Tags | |
|
getTags :: MonadMetadata m => Identifier -> m [String] Source
Obtain tags from a page in the default way: parse them from the tags
metadata field.
buildTagsWith :: MonadMetadata m => (Identifier -> m [String]) -> Pattern -> (String -> Identifier) -> m Tags Source
Higher-order function to read tags
buildTags :: MonadMetadata m => Pattern -> (String -> Identifier) -> m Tags Source
buildCategories :: MonadMetadata m => Pattern -> (String -> Identifier) -> m Tags Source
:: (String -> String -> Int -> Int -> Int -> String) | Produce a tag item: tag, url, count, min count, max count |
-> ([String] -> String) | Join items |
-> Tags | Tag cloud renderer |
-> Compiler String |
Render tags in HTML (the flexible higher-order function)
:: Double | Smallest font size, in percent |
-> Double | Biggest font size, in percent |
-> Tags | Input tags |
-> Compiler String | Rendered cloud |
Render a tag cloud in HTML
:: (Double -> Double -> String -> String -> Int -> Int -> Int -> String) | Render a single tag link |
-> ([String] -> String) | Concatenate links |
-> Double | Smallest font size, in percent |
-> Double | Biggest font size, in percent |
-> Tags | Input tags |
-> Compiler String | Rendered cloud |
Render a tag cloud in HTML
:: String | Destination key |
-> Double | Smallest font size, in percent |
-> Double | Biggest font size, in percent |
-> Tags | Input tags |
-> Context a | Context |
Render a tag cloud in HTML as a context
:: String | Destination key |
-> (Double -> Double -> String -> String -> Int -> Int -> Int -> String) | Render a single tag link |
-> ([String] -> String) | Concatenate links |
-> Double | Smallest font size, in percent |
-> Double | Biggest font size, in percent |
-> Tags | Input tags |
-> Context a | Context |
Render a tag cloud in HTML as a context
renderTagList :: Tags -> Compiler String Source
Render a simple tag list in HTML, with the tag count next to the item TODO: Maybe produce a Context here
:: (Identifier -> Compiler [String]) | Get the tags |
-> (String -> Maybe FilePath -> Maybe Html) | Render link for one tag |
-> ([Html] -> Html) | Concatenate tag links |
-> String | Destination field |
-> Tags | Tags structure |
-> Context a | Resulting context |
Render tags with links with custom functions to get tags and to render links
Render the category in a link
sortTagsBy :: ((String, [Identifier]) -> (String, [Identifier]) -> Ordering) -> Tags -> Tags Source
Sort tags using supplied function. First element of the tuple passed to the comparing function is the actual tag name.
caseInsensitiveTags :: (String, [Identifier]) -> (String, [Identifier]) -> Ordering Source
Sample sorting function that compares tags case insensitively.