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) }