Use Mustache templates for site URL so that the username can be inserted anywhere in the template rather than only at the end

This commit is contained in:
Danielle McLean 2017-10-10 15:16:50 +11:00
parent 7b2c1681eb
commit bbe563dee7
Signed by: 00dani
GPG key ID: 5A5D2D1AFF12EEC5
6 changed files with 41 additions and 8 deletions

View file

@ -4,18 +4,25 @@
module Widget.Card ( hCard ) where
import Import
import Util ( compileMustache )
import Data.Maybe (fromJust)
import Text.Mustache ( Template, substitute )
import qualified Data.Map as M
import qualified Data.Text as T
entityToTuple :: Entity t -> (Key t, t)
entityToTuple (Entity key value) = (key, value)
arrangeProfiles :: M.Map (Key Site) Site -> [Profile] -> [(Site,Profile)]
arrangeProfiles sites profiles = sortBy icon $ zip profileSites profiles
compileTemplates :: M.Map (Key Site) Site -> M.Map (Key Site) (Site, Template)
compileTemplates = fmap $ \site -> (site, compile site)
where compile site = T.unpack (siteIcon site) `compileMustache` siteTemplate site
arrangeProfiles :: [Profile] -> M.Map (Key Site) (Site, Template) -> [((Site, Template), Profile)]
arrangeProfiles profiles sites = sortBy icon $ zip profileSites profiles
where findSite = fromJust . flip M.lookup sites . profileSiteId
profileSites = findSite <$> profiles
icon = comparing $ siteIcon . fst
icon = comparing $ siteIcon . fst . fst
prettyPgp :: PgpKey -> Text
prettyPgp = T.unwords . T.chunksOf 4 . pgpKeyFingerprint
@ -29,6 +36,6 @@ hCard (Entity userId user) = do
userProfiles <- handlerToWidget . runDB $ do
profiles <- map entityVal <$> selectList [ProfileUserId ==. userId] []
sites <- M.fromList . map entityToTuple <$> selectList [SiteId <-. (profileSiteId <$> profiles)] []
return $ arrangeProfiles sites profiles
return . arrangeProfiles profiles . compileTemplates $ sites
pgpKeys <- handlerToWidget . runDB $ map entityVal <$> selectList [PgpKeyUserId ==. userId] []
$(widgetFile "mf2/h-card")