module Handler.Utils.Form ( module Handler.Utils.Form , module Utils.Form ) where import Utils.Form import Handler.Utils.Form.Types import Handler.Utils.Templates import Handler.Utils.DateTime import qualified Data.Time as Time import Import hiding (cons) import qualified Data.Char as Char import Data.String (IsString(..)) import Data.CaseInsensitive (CI) 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 qualified Database.Esqueleto.Internal.Sql 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 Data.Maybe (fromJust) 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 $(return []) instance PathPiece BtnSubmitDelete where toPathPiece = $(nullaryToPathPiece ''BtnSubmitDelete [ T.intercalate "-" . drop 1 . splitCamel ]) fromPathPiece = finiteFromPathPiece -- -- 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| --
-- --