on master help sign in
Merge pull request #874 from puffnfresh/javascript-ready
ba03e21Edwin Brady
src/IRTS/CodegenJavaScript.hs+14−2
@@ -231,6 +231,10 @@ jsAnd :: JS -> JS -> JS
231jsAnd = JSBinOp "&&"
231jsAnd = JSBinOp "&&"
232
232
233
233
234+jsOr :: JS -> JS -> JS
235+jsOr = JSBinOp "||"
236+
237+
234jsType :: JS
238jsType :: JS
235jsType = JSIdent $ idrRTNamespace ++ "Type"
239jsType = JSIdent $ idrRTNamespace ++ "Type"
236
240
@@ -1247,17 +1251,25 @@ codegenJavaScript target definitions filename outputType = do
1247 JSAlloc "main" $ Just $ JSFunction [] (
1251 JSAlloc "main" $ Just $ JSFunction [] (
1248 case target of
1252 case target of
1249 Node -> mainFun
1253 Node -> mainFun
1250− JavaScript -> jsMeth (JSIdent "window") "addEventListener" [
1254+ JavaScript -> JSCond [(isReady, mainFun), (JSTrue, jsMeth (JSIdent "window") "addEventListener" [
1251 JSString "DOMContentLoaded", JSFunction [] (
1255 JSString "DOMContentLoaded", JSFunction [] (
1252 mainFun
1256 mainFun
1253 ), JSFalse
1257 ), JSFalse
1254− ]
1258+ ])]
1255 )
1259 )
1256 where
1260 where
1257 mainFun :: JS
1261 mainFun :: JS
1258 mainFun = jsTailcall $ jsCall runMain []
1262 mainFun = jsTailcall $ jsCall runMain []
1259
1263
1260
1264
1265+ isReady :: JS
1266+ isReady = readyState `jsEq` JSString "complete" `jsOr` readyState `jsEq` JSString "loaded"
1267+
1268+
1269+ readyState :: JS
1270+ readyState = JSProj (JSIdent "document") "readyState"
1271+
1272+
1261 runMain :: String
1273 runMain :: String
1262 runMain = idrNamespace ++ translateName (sMN 0 "runMain")
1274 runMain = idrNamespace ++ translateName (sMN 0 "runMain")
1263
1275