Elm練習11


このエントリーをはてなブックマークに追加

引き続きElm練習

Elm練習 archives

debugger(のように使える?)elm-time-travelを試してみる

Elmのバージョンはv0.17.1を使ってます

githubのページ
elm-time-travel



使い方


packageをインストールする

下記コマンドでpackageをインストールする

1
$ elm-package install jinjor/elm-time-travel -y

Html.Appの代わりにimportする

elmのコードはbeginnerProgramまたはprogramを使用するために

Html.Appを先頭でimportしているが

その代わりに、TimeTravel.Html.Appをimportしてやる

1
2
-- import Html.App as App
import TimeTravel.Html.App as TimeTravel

いくつかサンプルがある
http://jinjor.github.io/elm-time-travel/

例えば、公式のfieldをTimeTravelで置き換えるとコードは下記のようになる

FieldSample.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
import Html exposing (Html, Attribute, text, div, input)
-- import Html.App exposing (beginnerProgram) -- ここを置き換えてやる
import TimeTravel.Html.App exposing (beginnerProgram)
import Html.Attributes exposing (..)
import Html.Events exposing (onInput)
import String
main =
beginnerProgram { model = "", view = view, update = update }
-- UPDATE
type Msg = NewContent String
update (NewContent content) oldContent =
content
-- VIEW
view content =
div []
[ input [ placeholder "Text to reverse", onInput NewContent, myStyle ] []
, div [ myStyle ] [ text (String.reverse content) ]
]
myStyle =
style
[ ("width", "100%")
, ("height", "40px")
, ("padding", "10px 0")
, ("font-size", "2em")
, ("text-align", "center")
]

また、もちろんApp.programにも適用できるのでexampleのtimeのコードは以下のようにしてやればよい

TimeSample.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
import Html exposing (Html)
-- import Html.App as App -- ここを置き換える
import TimeTravel.Html.App as App
import Svg exposing (..)
import Svg.Attributes exposing (..)
import Time exposing (Time, second)
main =
App.program
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
}
-- MODEL
type alias Model = Time
init : (Model, Cmd Msg)
init =
(0, Cmd.none)
-- UPDATE
type Msg
= Tick Time
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
Tick newTime ->
(newTime, Cmd.none)
-- SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions model =
Time.every second Tick
-- VIEW
view : Model -> Html Msg
view model =
let
angle =
turns (Time.inMinutes model)
handX =
toString (50 + 40 * cos angle)
handY =
toString (50 + 40 * sin angle)
in
svg [ viewBox "0 0 100 100", width "300px" ]
[ circle [ cx "50", cy "50", r "45", fill "#0B79CE" ] []
, line [ x1 "50", y1 "50", x2 handX, y2 handY, stroke "#023963" ] []
]

こんな感じで使ってやれば良い

fieldの例だと、debugとしてNewContentが表示され、timeの例だとTickが表示されるので

Msgの部分がdebugの結果として表示されるのかな?

と思われる


このエントリーをはてなブックマークに追加