definition module SaplHtml import StdString, Void :: HtmlDocument :: HtmlObject :: TaskSID :== String // String TaskId :: HtmlElementId :== String :: HtmlObjAttr :== String :: HtmlEventName :== String :: HtmlEvent st = HtmlEvent !HtmlElementId !HtmlEventName (HtmlEventHandlerFunc st) :: HtmlEventHandlerFunc st :== (st TaskSID HtmlObject *HtmlDocument -> *(!*HtmlDocument, st)) /** * TODO: * - createFunction :: !String ![String] -> HtmlObject * - createEventhandler :: !(HtmlEventHandlerFunc st) !TaskSID -> HtmlObject * - Functions are wrapped into {funcValue: ...} on creation, and unwrapped on passing as argument */ /** * Three layers of event handler wrapping: * 3. Clean event handler function of type "HtmlEventHandlerFunc a" * 2. SaplHtml.handleJSEvent: creates the context for 3., still Clean function * 1. JavaScript event handler function created by createEventHandler */ // 2. layer handleJSEvent :: (HtmlEventHandlerFunc a) !TaskSID *HtmlObject -> Void // creates 1. layer createEventHandler :: (HtmlEventHandlerFunc a) !TaskSID -> HtmlObject getObjectAttr :: !*HtmlDocument !HtmlObject !HtmlObjAttr -> *(!*HtmlDocument, !HtmlObject, !HtmlObject) //getObjectAttrObject :: !*HtmlDocument !HtmlObject !HtmlObjAttr -> *(!*HtmlDocument, !HtmlObject, !HtmlObject) setObjectAttr :: !*HtmlDocument !HtmlObject !HtmlObjAttr !a -> *(!*HtmlDocument, !HtmlObject, !HtmlObject) //setObjectAttrObject :: !*HtmlDocument !HtmlObject !HtmlObjAttr !HtmlObject -> *(!*HtmlDocument, !HtmlObject, !HtmlObject) // calls SAPL.toJS toHtmlObject :: !a -> HtmlObject // does nothing, use it carefully! fromHtmlObject :: HtmlObject -> a runObjectMethod :: !*HtmlDocument !HtmlObject !String ![HtmlObject] -> *(!*HtmlDocument, !HtmlObject, !HtmlObject) getDomElement :: !*HtmlDocument !HtmlElementId -> *(!*HtmlDocument, !HtmlObject) getDomAttr :: !*HtmlDocument !HtmlElementId !HtmlObjAttr -> *(!*HtmlDocument, !String) setDomAttr :: !*HtmlDocument !HtmlElementId !HtmlObjAttr !a -> *(!*HtmlDocument, !a) isUndefined :: !HtmlObject -> Bool /* * Find a browser object or constant like: * - window, document * - google.maps.MapTypeId.ROADMAP */ findObject :: !*HtmlDocument !String -> *(!*HtmlDocument, !HtmlObject) /* * Create a JS object, like: * - new google.maps.LatLng(-34.397, 150.644) */ createObject :: !*HtmlDocument !String ![HtmlObject] -> *(!*HtmlDocument, !HtmlObject) /* * Load external JS by its URL. A continuation must be given, * which is called when script is actually loaded */ loadExternalJS :: !*HtmlDocument !String !HtmlObject -> *HtmlDocument