definition module iTasks.API.Core.Client.Editlet import iTasks, iTasks.API.Core.Client.Interface //****************************************************************************// // Wrapper types for defining custom editor components that can process events // that are defined server-side but run client-side //****************************************************************************// :: Editlet a d = Editlet a (EditletDef a d) :: EditletDef a d = E.st: { html :: ComponentId -> HtmlTag , updateUI :: ComponentId (Maybe d) a (Maybe st) *JSWorld -> *(!a,!Maybe st,!*JSWorld) , handlers :: ComponentId -> [ComponentEvent a st] // Functions for efficient bidirectional synchronisation of the editlet value , genDiff :: a a -> Maybe d , appDiff :: d a -> a } :: EditletEvent = EditletEvent :: ComponentId :== String :: ComponentEventName :== String :: ComponentEvent a st = ComponentEvent !ComponentId !ComponentEventName (ComponentEventHandlerFunc a st) :: ComponentEventHandlerFunc a st :== ComponentId (JSVal EditletEvent) a (Maybe st) *JSWorld -> *(!a,!Maybe st,!*JSWorld) createEditletEventHandler :: (ComponentEventHandlerFunc a st) !ComponentId -> (JSVal (JSFunction b)) derive JSONEncode Editlet derive JSONDecode Editlet derive gDefault Editlet derive gEq Editlet derive gVisualizeText Editlet derive gEditor Editlet derive gEditMeta Editlet derive gUpdate Editlet derive gVerify Editlet