-
Notifications
You must be signed in to change notification settings - Fork 0
/
Main.elm
109 lines (88 loc) · 2.22 KB
/
Main.elm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
module Main exposing (..)
import Html exposing (..)
import Html.Attributes exposing (src, title, class, id, type_, style)
import Html.Events exposing (on)
import Json.Decode as JD
import Ports exposing (ImagePortData, fileSelected, fileContentRead)
type Msg
= ImageSelected
| ImageRead ImagePortData
type alias Image =
{ contents : String
, filename : String
}
type alias Model =
{ id : String
, mImage : Maybe Image
}
main : Program Never Model Msg
main =
program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
init : ( Model, Cmd Msg )
init =
{ id = "ImageInputId"
, mImage = Nothing
}
! []
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
ImageSelected ->
model ! [ fileSelected model.id ]
ImageRead portData ->
let
newImage =
{ contents = portData.contents
, filename = portData.filename
}
in
{ model | mImage = Just newImage }
! []
view : Model -> Html Msg
view model =
let
imagePreview =
case model.mImage of
Just i ->
viewImagePreview model i
Nothing ->
text ""
in
div [ class "imageWrapper" ]
[ input
[ type_ "file"
, id model.id
, on "change"
(JD.succeed ImageSelected)
]
[]
, imagePreview
]
viewImagePreview : Model -> Image -> Html Msg
viewImagePreview model image =
div
[ style
[ ( "position", "relative" )
, ( "width", "500px" )
, ( "height", "500px" )
]
]
[ img
[ src image.contents
, title image.filename
, style
[ ( "width", "750px" )
, ( "height", "500px" )
]
]
[]
]
subscriptions : Model -> Sub Msg
subscriptions model =
Sub.batch
[ fileContentRead ImageRead ]