packages feed

ihp-1.5.0: IHP/Breadcrumb/Types.hs

module IHP.Breadcrumb.Types where

import Prelude (Show(..), Maybe, (<>), ($))
import Data.Text (Text)
import Text.Blaze.Html (Html)
import Text.Blaze.Html.Renderer.String (renderHtml)

data BreadcrumbItem =
    BreadcrumbItem
    { breadcrumbLabel :: Html -- ^ The label of a single breadcrumbs items. May be HTML, thus use SVG or font icon.
    , url :: Maybe Text -- ^ The URL of the item. If Nothing, it will only show the label.
    }

-- Html doesn't have a Show instance, so we define it manually and use 'renderHtml' for that.
instance Show BreadcrumbItem where
    show breadcrumbItem = "{ breadcrumbLabel = \"" <> renderedLabel <> "\", url = " <> renderedUrl <> " }"
        where
            renderedLabel = renderHtml $ breadcrumbLabel breadcrumbItem
            renderedUrl = show $ url breadcrumbItem