module Handler.Utils.Form ( module Handler.Utils.Form , module Utils.Form ) where import Utils.Form import Handler.Utils.Form.Types import Handler.Utils.DateTime import Import hiding (cons) import qualified Data.Char as Char import qualified Data.CaseInsensitive as CI import qualified Data.Foldable as Foldable -- import Yesod.Core import qualified Data.Text as T -- import Yesod.Form.Types import Yesod.Form.Functions (parseHelper) import Yesod.Form.Bootstrap3 import Web.PathPieces (showToPathPiece, readFromPathPiece) import Handler.Utils.Zip import qualified Data.Conduit.List as C import qualified Database.Esqueleto as E import Data.Set (Set) import qualified Data.Set as Set import Data.Map (Map, (!)) import qualified Data.Map as Map import Control.Monad.Writer.Class import Data.Scientific (Scientific) import Data.Ratio import Text.Read (readMaybe) import Utils.Lens ---------------------------- -- Buttons (new version ) -- ---------------------------- data BtnDelete = BtnDelete | BtnAbort deriving (Enum, Eq, Ord, Bounded, Read, Show) instance PathPiece BtnDelete where -- for displaying the button only, not really for paths toPathPiece = showToPathPiece fromPathPiece = readFromPathPiece instance Button UniWorX BtnDelete where label BtnDelete = [whamlet|_{MsgBtnDelete}|] label BtnAbort = [whamlet|_{MsgBtnAbort}|] cssClass BtnDelete = BCDanger cssClass BtnAbort = BCDefault data RegisterButton = BtnRegister | BtnDeregister deriving (Enum, Eq, Ord, Bounded, Read, Show) instance PathPiece RegisterButton where toPathPiece = showToPathPiece fromPathPiece = readFromPathPiece instance Button UniWorX RegisterButton where label BtnRegister = [whamlet|_{MsgBtnRegister}|] label BtnDeregister = [whamlet|_{MsgBtnDeregister}|] cssClass BtnRegister = BCPrimary cssClass BtnDeregister = BCDanger data AdminHijackUserButton = BtnHijack deriving (Enum, Eq, Ord, Bounded, Read, Show) instance PathPiece AdminHijackUserButton where toPathPiece = showToPathPiece fromPathPiece = readFromPathPiece instance Button UniWorX AdminHijackUserButton where label BtnHijack = [whamlet|_{MsgBtnHijack}|] cssClass BtnHijack = BCDefault data BtnSubmitDelete = BtnSubmit' | BtnDelete' deriving (Enum, Eq, Ord, Bounded, Read, Show) instance Universe BtnSubmitDelete instance Finite BtnSubmitDelete instance Button UniWorX BtnSubmitDelete where label BtnSubmit' = [whamlet|_{MsgBtnSubmit}|] label BtnDelete' = [whamlet|_{MsgBtnDelete}|] cssClass BtnSubmit' = BCPrimary cssClass BtnDelete' = BCDanger nullaryPathPiece ''BtnSubmitDelete (camelToPathPiece' 1 . dropSuffix "'") -- -- Looks like a button, but is just a link (e.g. for create course, etc.) -- data LinkButton = LinkButton (Route UniWorX) -- deriving (Enum, Eq, Ord, Bounded, Read, Show) -- -- instance PathPiece LinkButton where -- LinkButton route = ??? linkButton :: Widget -> ButtonCssClass UniWorX -> Route UniWorX -> Widget -- Alternative: Handler.Utils.simpleLink linkButton lbl cls url = [whamlet| ^{lbl} |] -- [whamlet| --
-- --