category
4/16/2016 - 10:32 PM

Embed an Elm module in HTML. Compile with `elm-make Stamper.elm` or just generate the HTML automatically by specifying an HTML output file w

Embed an Elm module in HTML. Compile with elm-make Stamper.elm or just generate the HTML automatically by specifying an HTML output file with elm-make Stamper.elm --output=Main.html

module Stamper where

import Graphics.Collage (..)
import Graphics.Element (..)
import List
import List ((::))
import Mouse
import Signal
import Window


main : Signal Element
main =
  Signal.map2 renderStamps Window.dimensions clickLocations

clickLocations : Signal (List (Int,Int))
clickLocations =
  Signal.foldp (::) [] (Signal.sampleOn Mouse.clicks Mouse.position)

renderStamps : (Int,Int) -> List (Int,Int) -> Element
renderStamps (w,h) locs =
  let pentagon (x,y) =
        ngon 5 20
          |> filled (hsva (toFloat x) 1 1 0.7)
          |> move (toFloat x - toFloat w / 2, toFloat h / 2 - toFloat y)
          |> rotate (toFloat x)
  in
      layers
        [ collage w h (List.map pentagon locs)
        , plainText "Click to stamp a pentagon."
        ]
<html>

  <head>
    <title>Embedding Elm in HTML!</title>
    <script type="text/javascript" src="Stamper.js"></script>
  </head>

  <body>
    <h1>Stamper</h1>
    <div id="stamper" style="width:50%; height:400px;"></div>
  </body>

  <script type="text/javascript">
    var stamperDiv = document.getElementById('stamper');
    Elm.embed(Elm.Stamper, stamperDiv);
  </script>

</html>