Explorar el Código

move a bit closer to "the elm architecture"

Lucas Stadler %!s(int64=11) %!d(string=hace) años
padre
commit
d9c93bf279
Se han modificado 1 ficheros con 34 adiciones y 4 borrados
  1. 34 4
      elm/Stream.elm

+ 34 - 4
elm/Stream.elm

1
module Stream where
1
module Stream where
2
2
3
import Date
3
import Date
4
import Date (Date)
4
import Html (..)
5
import Html (..)
6
import Html.Attributes as Attr
7
import Html.Events (onClick)
5
import List
8
import List
6
import String
9
import String
7
import Time
10
import Time
10
import Post
13
import Post
11
import Post (Post)
14
import Post (Post)
12
15
16
type alias Model =
17
    { posts         : List Post
18
    , referenceDate : Date
19
    }
20
21
type Action = NoOp
22
            | UpdateDate Date
23
13
date s = case (Date.fromString s) of
24
date s = case (Date.fromString s) of
14
    Ok  d -> d
25
    Ok  d -> d
15
    Err e -> Date.fromTime 0
26
    Err e -> Date.fromTime 0
23
         {title = "Ancient history", content = "Teenage angst!!!!", created = date "2009-06-07T02:54:29"}
34
         {title = "Ancient history", content = "Teenage angst!!!!", created = date "2009-06-07T02:54:29"}
24
        ]
35
        ]
25
36
26
currentDate = Signal.map Date.fromTime <| Time.every Time.minute
37
-- view
38
39
view model = div [] (List.map (Post.view model.referenceDate) (List.sortWith Post.compareByDateReverse model.posts))
40
41
-- wiring it all up
42
43
initialModel = { posts = posts, referenceDate = date "0" }
27
44
28
view referenceDate =
29
    div [] (List.map (Post.view referenceDate) (List.sortWith Post.compareByDateReverse posts))
45
update : Action -> Model -> Model
46
update action model =
47
    case action of
48
      NoOp -> model
49
50
      UpdateDate d -> { model | referenceDate <- d }
51
52
model : Signal Model
53
model = Signal.foldp update initialModel <| Signal.merge (Signal.subscribe updates) (Signal.map UpdateDate currentDate)
54
55
updates : Signal.Channel Action
56
updates = Signal.channel NoOp
57
58
currentDate : Signal Date
59
currentDate = Signal.map Date.fromTime <| Time.every Time.minute
30
60
31
main = Signal.map view currentDate
61
main = Signal.map view model