From df1398f756f274b7a4bd9866eb1d71b97ee0f85d Mon Sep 17 00:00:00 2001 From: SJost Date: Mon, 9 Oct 2017 07:47:34 +0200 Subject: [PATCH] JSON for showTerms --- src/Common.hs | 16 ++++++++++++++++ src/Handler/Term.hs | 37 ++++++++++++++++++++----------------- src/Handler/Utils/Table.hs | 16 ++++++++++++++-- 3 files changed, 50 insertions(+), 19 deletions(-) diff --git a/src/Common.hs b/src/Common.hs index 9c49ec0a4..2dd8a5525 100644 --- a/src/Common.hs +++ b/src/Common.hs @@ -1,4 +1,5 @@ {-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE QuasiQuotes #-} module Common where -- Common Utility Functions @@ -23,3 +24,18 @@ projNI n i = lamE [pat] rhs where pat = tupP (map varP xs) rhs = varE (xs !! (i - 1)) xs = [ mkName $ "x" ++ show j | j <- [1..n] ] + + +--------------- +-- Functions -- +--------------- + +permuteFun :: [Int] -> ExpQ -- generic permutation of function arguments, i.e. $(permuteFun [2,1]) == flip +permuteFun perm = lamE pat rhs + where pat = map varP $ fn:xs + rhs = foldl appE (varE fn) $ map varE ps +-- rhs = appE (varE fn) (varE $ xs!!1) + ln = length perm + xs = [ mkName $ "x" ++ show j | j <- [1..ln] ] + ps = [ xs !! (j-1) | j <- perm ] + fn = mkName "fn" diff --git a/src/Handler/Term.hs b/src/Handler/Term.hs index df382feb2..7e1127144 100644 --- a/src/Handler/Term.hs +++ b/src/Handler/Term.hs @@ -18,25 +18,28 @@ import Colonnade import Yesod.Colonnade -getShowTermsR :: Handler Html +getShowTermsR :: Handler TypedContent getShowTermsR = do terms <- runDB $ selectList [] [Desc TermStart] - let colonnadeTerms = mconcat - -- TODO Edit-Links only $if isAdmin, otherwise breadcrumb navigation - [ headed "Kürzel" $ (\t -> let tn = termName t in - [whamlet| #{termToText tn}|] ) - , headed "Beginn Vorlesungen" $ fromString.formatTimeGerWD.termLectureStart - , headed "Ende Vorlesungen" $ fromString.formatTimeGerWD.termLectureEnd - , headed "Aktiv" (\t -> if termActive t then tickmark else "") --- , Colonnade.bool (Headed "Aktiv") termActive (const tickmark) (const "") - , headed "Semesteranfang" $ fromString.formatTimeGerWD.termStart - , headed "Semesterende" $ fromString.formatTimeGerWD.termEnd - , headed "Feiertage im Semester" $ - fromString.(intercalate ", ").(map formatTimeGerWD).termHolidays - ] - defaultLayout $ do - setTitle "Freigeschaltete Semester" - encodeHeadedWidgetTable tableDefault colonnadeTerms (map entityVal terms) + selectRep $ do + provideRep $ return $ toJSON terms + provideRep $ do + let colonnadeTerms = mconcat + -- TODO Edit-Links only $if isAdmin, otherwise breadcrumb navigation + [ headed "Kürzel" $ (\t -> let tn = termName t in + [whamlet| #{termToText tn}|] ) + , headed "Beginn Vorlesungen" $ fromString.formatTimeGerWD.termLectureStart + , headed "Ende Vorlesungen" $ fromString.formatTimeGerWD.termLectureEnd + , headed "Aktiv" (\t -> if termActive t then tickmark else "") + -- , Colonnade.bool (Headed "Aktiv") termActive (const tickmark) (const "") + , headed "Semesteranfang" $ fromString.formatTimeGerWD.termStart + , headed "Semesterende" $ fromString.formatTimeGerWD.termEnd + , headed "Feiertage im Semester" $ + fromString.(intercalate ", ").(map formatTimeGerWD).termHolidays + ] + defaultLayout $ do + setTitle "Freigeschaltete Semester" + encodeHeadedWidgetTable tableDefault colonnadeTerms (map entityVal terms) getNewTermR :: Handler Html diff --git a/src/Handler/Utils/Table.hs b/src/Handler/Utils/Table.hs index 8277c9cfc..f64af26a3 100644 --- a/src/Handler/Utils/Table.hs +++ b/src/Handler/Utils/Table.hs @@ -18,8 +18,20 @@ import Yesod.Colonnade tableDefault :: Attribute tableDefault = customAttribute "class" "table table-striped table-hover" +-- Colonnade Tools +numberColonnade :: (IsString c) => Colonnade Headed Int c +numberColonnade = headed "Nr" (fromString.show) + +pairColonnade :: (Functor h) => Colonnade h a c -> Colonnade h b c -> Colonnade h (a,b) c +pairColonnade a b = mconcat [ lmap fst a, lmap snd b] --- modifiy tables + +-- Table Modification encodeHeadedWidgetTableNumbered :: Attribute -> Colonnade Headed a (WidgetT site IO ()) -> [a] -> WidgetT site IO () encodeHeadedWidgetTableNumbered attrs colo tdata = - encodeHeadedWidgetTable attrs (mconcat [headed "Nr" (fromString.show.fst), lmap snd colo]) (zip [1..] tdata) + encodeHeadedWidgetTable attrs (mconcat [numberCol, lmap snd colo]) (zip [1..] tdata) + where + numberCol = headed "Nr" (fromString.show.fst) + + +