definition module GenVisualize
import HTML, JSON, TUIDefinition
import StdGeneric, Maybe, Void, Either
import GenUpdate, GenVerify
from Map import :: Map
:: StaticVisualizationMode = AsDisplay | AsLabel
//Generic text visualization function
generic gVisualizeText a :: !StaticVisualizationMode !a -> [String]
//Default available instances
derive gVisualizeText UNIT, PAIR, EITHER, CONS, OBJECT, FIELD
derive gVisualizeText Int, Real, Char, Bool, String
derive gVisualizeText Dynamic, [], Maybe, Either, (,), (,,), (,,,), (->), Void, Display, Editable, Hidden, VisualizationHint, Timestamp
derive gVisualizeText Note, Password, Date, Time, DateTime, Document, FormButton, Currency, User, UserDetails, RadioChoice, ComboChoice, CheckMultiChoice, Map, TreeChoice, Tree, TreeNode, Table
derive gVisualizeText EmailAddress, Action, HtmlDisplay, HtmlInclude, ManagerProperties, RunningTaskStatus, TaskPriority, ControlSize, FillControlSize, FillWControlSize, FillHControlSize, Session
//Generic html visualization function
generic gVisualizeHtml a :: !StaticVisualizationMode !a -> [HtmlTag]
//Default available instances
derive gVisualizeHtml UNIT, PAIR, EITHER, CONS, OBJECT, FIELD
derive gVisualizeHtml Int, Real, Char, Bool, String
derive gVisualizeHtml Dynamic, [], Maybe, Either, (,), (,,), (,,,), (->), Void, Display, Editable, Hidden, VisualizationHint, Timestamp
derive gVisualizeHtml Note, Password, Date, Time, DateTime, Document, FormButton, Currency, User, UserDetails, RadioChoice, ComboChoice, CheckMultiChoice, Map, TreeChoice, Tree, TreeNode, Table
derive gVisualizeHtml EmailAddress, Action, HtmlInclude, ManagerProperties, RunningTaskStatus, TaskPriority, ControlSize, FillControlSize, FillWControlSize, FillHControlSize, Session
//Generic editor function
generic gVisualizeEditor a | gVisualizeText a, gVisualizeHtml a :: !(Maybe a) !*VSt -> (![TUIDef], !*VSt)
//Default available instances
derive gVisualizeEditor UNIT, PAIR, EITHER, CONS, OBJECT, FIELD
derive gVisualizeEditor Int, Real, Char, Bool, String
derive gVisualizeEditor Dynamic, [], Maybe, Either, (,), (,,), (,,,), (->), Void, Display, Editable, Hidden, VisualizationHint, Timestamp
derive gVisualizeEditor Note, Password, Date, Time, DateTime, Document, FormButton, Currency, User, UserDetails, RadioChoice, ComboChoice, CheckMultiChoice, Map, TreeChoice, Tree, TreeNode, Table
derive gVisualizeEditor EmailAddress, Action, HtmlInclude, ManagerProperties, RunningTaskStatus, TaskPriority, ControlSize, FillControlSize, FillWControlSize, FillHControlSize, Session
//Wrapper functions for visualization
visualizeAsEditor :: !a !TaskId !Int !VerifyMask !(Maybe (!DataPath,!JSONNode)) -> Maybe TUIDef | gVisualizeEditor{|*|} a
visualizeAsDisplay :: !a -> Maybe TUIDef | gVisualizeEditor{|*|} a
visualizeAsText :: !StaticVisualizationMode !a -> String | gVisualizeText{|*|} a
visualizeAsHtml :: !StaticVisualizationMode !a -> HtmlTag | gVisualizeHtml{|*|} a
//Type definitions for visualization
:: *VSt =
{ currentPath :: !DataPath // Accumulated path through the data structure, used to identify sub-structures
, verifyMask :: ![VerifyMask]
, selectedConsIndex :: !Int // Index of the selected constructor in an Object
, optional :: !Bool // Create optional form fields
, renderAsStatic :: !Bool // If true, flag the form items as being static
, editEvent :: !(Maybe (!DataPath,!JSONNode)) // The edit event (if present) for keeping track of values sent by the client (used for diff)
, taskId :: !Maybe TaskId // The id of the task the visualisation belongs to
, controlSize :: !(!Maybe TUISize,!Maybe TUISize,!Maybe TUIMargins) // The width, height & margins of generated controls
}
:: VerifyResult = HintMsg !String | ValidMsg !String | ErrorMsg !String | NoMsg
//Utility functions making specializations of gVisualizeEditor
/**
* Generates an empty visualization.
*
* @param VSt
*
* @return An empty visualization
*/
noVisualization :: !*VSt -> *(![TUIDef],!*VSt)
/**
* Generates a control visualization.
*
* @param The type of the control
* @param The current value to visualize (if present)
* @param VSt
*
* @return The generated visualization
*/
visualizeControlSimple :: !TUIControlType !(Maybe a) !*VSt -> *(![TUIDef],!*VSt) | JSONEncode{|*|}, gVisualizeHtml{|*|} a
visualizeControl :: !TUIControlType !(Maybe (!a,b)) !(StaticVisualizationMode (Maybe b) -> [HtmlTag]) !*VSt -> *(![TUIDef], !*VSt) | JSONEncode{|*|} a
/**
* Generates a basic control visualization.
* Visualizations are generated by custom functions using VSt.
*
* @param Function for generating a TUI definition (see comment of TUIVizFunctionCustom for details)
* @param The current value to visualize (if present, possibly different types are used for TUI and static visualizations)
* @param Indicates if for static editor definitions automatically a HTML container with a static representation should be generated
(the TUIVizFunction is not called in this case)
* @param VSt
*
* @return The generated visualization
*/
visualizeCustom :: !(TUIVizFunction a) !(Maybe a) !*VSt -> *(![TUIDef],!*VSt)
/**
* A function using VSt for generating TUI definitions.
*
* @param The name of the TUI element
* @param The value of the TUI element (if present)
* @param A flag indicating if the value is touched
* @param Hint or Error message
* @param A flag indicating if a static editor should be generated
* @param VSt (currentPath points to first child of element, updateMasks & verifyMasks are masks of children)
*
* @return The generated TUI definition
*/
:: TUIVizFunction a :== TUIName (Maybe a) Bool VerifyResult Bool -> .(*VSt -> *(![TUIDef],!*VSt))
(+++>) infixr 5 :: !a !String -> String | gVisualizeText{|*|} a
(<+++) infixl 5 :: !String !a -> String | gVisualizeText{|*|} a