|
|
@ -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
|