-
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
-
110
-- Copyright 2026 Shota FUJI
--
-- This Source Code Form is subject to the terms of the Mozilla Public
-- License, v. 2.0. If a copy of the MPL was not distributed with this
-- file, You can obtain one at https://mozilla.org/MPL/2.0/.
--
-- SPDX-License-Identifier: MPL-2.0
module Main exposing (main)
import Browser
import Browser.Navigation exposing (Key)
import Html exposing (node, p, text)
import Html.Attributes exposing (attribute)
import Parameters exposing (Parameters)
import Template exposing (template)
import Url exposing (Url)
main : Program Flags Model Msg
main =
Browser.application
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
, onUrlRequest = UrlRequested
, onUrlChange = UrlChanged
}
-- FLAGS
type alias Flags =
()
-- MODEL
type alias Model =
{ url : Url
, key : Key
, parameters : Parameters
}
init : Flags -> Url -> Key -> ( Model, Cmd Msg )
init _ url key =
( { url = url, key = key, parameters = Parameters.default }, Cmd.none )
-- UPDATE
type Msg
= NoOp
| UrlRequested Browser.UrlRequest
| UrlChanged Url
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
NoOp ->
( model, Cmd.none )
UrlRequested (Browser.Internal url) ->
( model, Browser.Navigation.replaceUrl model.key (Url.toString url) )
UrlRequested (Browser.External href) ->
( model, Browser.Navigation.load href )
UrlChanged url ->
( { model | url = url }, Cmd.none )
-- VIEW
view : Model -> Browser.Document Msg
view model =
{ title = ""
, body =
[ node "x-app-layout"
[]
[ node "x-preview"
[ attribute "slot" "preview" ]
[ template model.parameters [] ]
, node "x-panel"
[ attribute "slot" "parameters" ]
[ p [] [ text "Parameters" ] ]
]
]
}
-- SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions _ =
Sub.none