Skip to content

Commit b674399

Browse files
rupertlssmithsupermario
authored andcommitted
Added Lamdera alternative implementation fo HTML generation only when building Lamdera project, not regular Elm.
1 parent 1d47882 commit b674399

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

compiler/src/Generate/Html.hs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,50 @@ import qualified Lamdera.UiSourceMap
1717

1818
-- SANDWICH
1919

20-
20+
-- @LAMDERA root :: FilePath parameter added.
2121
sandwich :: FilePath -> Name.Name -> B.Builder -> B.Builder
2222
sandwich root moduleName javascript =
23+
Lamdera.alternativeImplementationWhen Lamdera.isLamdera_ (sandwich_ root moduleName javascript) $
24+
let name = Name.toBuilder moduleName in
25+
[r|<!DOCTYPE HTML>
26+
<html>
27+
<head>
28+
<meta charset="UTF-8">
29+
<title>|] <> name <> [r|</title>
30+
<style>body { padding: 0; margin: 0; }</style>
31+
</head>
32+
33+
<body>
34+
35+
<pre id="elm"></pre>
36+
37+
<script>
38+
try {
39+
|] <> javascript <> [r|
40+
41+
var app = Elm.|] <> name <> [r|.init({ node: document.getElementById("elm") });
42+
}
43+
catch (e)
44+
{
45+
// display initialization errors (e.g. bad flags, infinite recursion)
46+
var header = document.createElement("h1");
47+
header.style.fontFamily = "monospace";
48+
header.innerText = "Initialization Error";
49+
var pre = document.getElementById("elm");
50+
document.body.insertBefore(header, pre);
51+
pre.innerText = e;
52+
throw e;
53+
}
54+
</script>
55+
56+
</body>
57+
</html>|]
58+
59+
60+
-- @LAMDERA
61+
62+
sandwich_ :: FilePath -> Name.Name -> B.Builder -> B.Builder
63+
sandwich_ root moduleName javascript =
2364
let
2465
name = Name.toBuilder moduleName
2566

0 commit comments

Comments
 (0)