瀏覽代碼

move a bit closer to "the elm architecture"

Lucas Stadler 11 年之前
父節點
當前提交
d9c93bf279
共有 1 個文件被更改,包括 34 次插入4 次删除
  1. 34 4
      elm/Stream.elm

+ 34 - 4
elm/Stream.elm

@ -1,7 +1,10 @@
1 1
module Stream where
2 2
3 3
import Date
4
import Date (Date)
4 5
import Html (..)
6
import Html.Attributes as Attr
7
import Html.Events (onClick)
5 8
import List
6 9
import String
7 10
import Time
@ -10,6 +13,14 @@ import Signal
10 13
import Post
11 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 24
date s = case (Date.fromString s) of
14 25
    Ok  d -> d
15 26
    Err e -> Date.fromTime 0
@ -23,9 +34,28 @@ posts = [{title = "Fancy post", content = "Post may have multiple lines now.\nWh
23 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