panda-0.0.0.5.1: Panda/Model/Tag.hs
module Panda.Model.Tag where
import qualified Panda.Model.Post as Post
-- env
import Panda.Helper.Env hiding (readFile, name)
import Prelude hiding ((.), (/), id)
import qualified Data.Set as Set
import qualified Data.Map as Map
import qualified Data.List as List
import qualified Panda.Config.Global as Config
data Tag = Tag
{ uid :: String -- tag/name
, name :: String
, resources :: Set.Set String
}
deriving (Show, Eq)
sorted xs = xs.List.sortBy(compare_by (resources >>> Set.size)).reverse
name_to_id x = Config.tag_id / (x.to_utf8)
list = ls Config.tag_uri <.> map (Config.tag_id /) >>= mapM get
get id = get_resources id <.> Tag id (get_name id)
get_name id = id.from_utf8.split "/" .tail.join'
get_resources id = (Config.flat_uri / id) .readFile -- preserve ansi file path
<.> filter_comment <.> lines <.> map (Config.blog_id / ) <.> to_set
tag_map' xs = xs . map (name &&& resources) . to_h
tag_map = list <.> tag_map'
for_resource xs x = xs.select (resources >>> Set.member x) .map name
fill_tag xs x = x { Post.tags = for_resource xs (x.Post.uid) }