packages feed

lucienne-0.0.1: Lucienne/View/Link.hs

module Lucienne.View.Link
       ( Style (..)
       , to, toHome, toFeedUrl, toFeedItemUrl, toFeed, toFeed', toDeleteFeed, toDoDeleteFeed
       , toFeedItem, toDoDeleteFeedItem, toDoReadFeedItem)
where
  
import           Text.Blaze ((!))
import qualified Text.Blaze.Html4.Strict as H
import qualified Text.Blaze.Html4.Strict.Attributes as A
import           Data.Bson (ObjectId)
import           Lucienne.View.Common (stringValue,setTitle)
import           Lucienne.Model.Feed (Feed)
import qualified Lucienne.Model.Feed as F
import           Lucienne.Model.FeedItem (FeedItem)
import qualified Lucienne.Model.FeedItem as FI
import           Lucienne.Model.Util (showObjectId)
import qualified Lucienne.Url as Url

data Style = Default | Highlight | Active | Inactive

to :: String -> H.Html -> H.Html
to url = to' url Default

to' :: String -> Style -> H.Html -> H.Html
to' url style nested = 
  H.a ! toAttribute style ! A.href (stringValue url) $ nested

toAttribute :: Style -> H.Attribute
toAttribute style =
  case style of
    Default    -> A.class_ "default"
    Highlight  -> A.class_ "highlight"
    Active     -> A.class_ "active"
    Inactive   -> A.class_ "inactive"

toFeedUrl :: Feed -> H.Html -> H.Html
toFeedUrl feed = setTitle "Go to feed URL" . (to $ F.url feed)

toHome :: H.Html -> H.Html
toHome = to Url.home

toDoDeleteFeed,toDeleteFeed :: Feed -> H.Html -> H.Html
toDeleteFeed   feed = toId Url.deleteFeed   (F.id feed) Default
toDoDeleteFeed feed = toId Url.doDeleteFeed (F.id feed) Default

toFeed :: Feed -> Style -> H.Html -> H.Html
toFeed feed style = toId Url.feed (F.id feed) style

toFeedItem :: FeedItem -> Style -> H.Html -> H.Html
toFeedItem item = toId Url.feedItem (FI.id item)

toFeedItemUrl,toFeed',toDoDeleteFeedItem,toDoReadFeedItem :: FeedItem -> H.Html -> H.Html
toFeedItemUrl item = setTitle "Go to URL" . to (FI.url item)

toFeed' item = toId Url.feed (FI.feedId item) Default

toDoDeleteFeedItem item = 
  setTitle "Delete" . toId Url.doDeleteFeedItem (FI.id item) Default
  
toDoReadFeedItem item = 
  setTitle "Mark as read" . toId Url.doReadFeedItem (FI.id item) Default
  
toId :: Url.Url -> ObjectId -> Style -> H.Html -> H.Html
toId url objId style nested  = 
  H.a ! 
    toAttribute style !
    A.href (stringValue $ url ++ "/" ++ (showObjectId objId)) $
    nested