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