The following is a popular Udemy course on Node.js:
The Complete Node.js Developer Course (3rd Edition)
One of the projects in the course is a chat app. Here’s that chat app with the front-end converted to Elm:
Here’s what it looks like:
It uses ports with socket.io.
2 Likes
The login page looks like this:
In the original version of the app, the HTML is as follows:
<div class="centered-form">
<div class="centered-form__box">
<h1>
Join
</h1>
<form action="chat.html">
<label>Display name</label>
<input type="text" name="username" placeholder="Display name" required>
<label>Room</label>
<input type="text" name="room" placeholder="Room" required>
<button>Join</button>
</form>
</div>
</div>
The conversion to Elm is straightforward:
view : Model -> Html Msg
view model =
div [ class "centered-form" ]
[
h1 [] [ text "Join" ],
Html.form [ action "chat.html" ]
[
label [] [ text "Display name"],
input [ type_ "text", name "username", placeholder "Display name", required True ] [],
label [] [ text "Room" ],
input [ type_ "text", name "room", placeholder "Room", required True ] [],
button [] [ text "Join" ]
]
]
This is in Login.elm.
In order to get the file to compile, I setup Msg
and Model
even though they aren’t used at all:
type Msg = Abc
type alias Model = Int
Is there a way I can setup Login.elm
so that I don’t have to define those?
Any other suggestions on how to streamline that file are welcome. 
joelq
3
The main
function of an Elm program needs to be either:
- a
Program
value
- a
Html
value
- an
Svg
value
This means that it’s OK to have your Elm program be static HTML
main : Html a
main =
div [ class "centered-form" ]
[ ...
]
Thanks @joelq! I’ve updated Login.elm to reflect your suggestion.
system
Closed
5
This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.