Untitled diff

Created Diff never expires
3 removals
Words removed3
Total words254
Words removed (%)1.18
102 lines
3 additions
Words added3
Total words254
Words added (%)1.18
102 lines
module Main exposing (view, Msg, update)
module Buttonslist exposing (view, Msg, update)


import Buttonslist as Imported
import Buttons as Imported
import Html exposing (beginnerProgram, div, button, text, pre)
import Html exposing (beginnerProgram, div, button, text, pre)
import Html.Events exposing (onClick)
import Html.Events exposing (onClick)
import Html.Attributes exposing (style)
import Html.Attributes exposing (style)
import Array
import Array




defaultIfNothing =
defaultIfNothing =
[]
0




main =
main =
beginnerProgram
beginnerProgram
{ model = []
{ model = []
, view = view
, view = view
, update = update
, update = update
}
}




view model =
view model =
div [ style [ ( "margin", "10px" ) ] ]
div [ style [ ( "margin", "10px" ) ] ]
[ button [ onClick (Add) ] [ text "Add" ]
[ button [ onClick (Add) ] [ text "Add" ]
, div []
, div []
(List.indexedMap
(List.indexedMap
(\index element ->
(\index element ->
div
div
[ style
[ style
[ ( "border", "1px solid #aaa" )
[ ( "border", "1px solid #aaa" )
, ( "background-color", "#eee" )
, ( "background-color", "#eee" )
, ( "display", "inline-block" )
, ( "display", "inline-block" )
, ( "padding", "10px" )
, ( "padding", "10px" )
, ( "margin", "10px" )
, ( "margin", "10px" )
]
]
]
]
[ Html.map
[ Html.map
(MsgFromChild index)
(MsgFromChild index)
(div
(div
[]
[]
[ Imported.view element ]
[ Imported.view element ]
)
)
, button [ onClick (Remove index) ] [ text "Remove" ]
, button [ onClick (Remove index) ] [ text "Remove" ]
]
]
)
)
model
model
)
)
, pre [] [ text ("model: " ++ (toString model)) ]
, pre [] [ text ("model: " ++ (toString model)) ]
]
]




type Msg
type Msg
= MsgFromChild Int Imported.Msg
= MsgFromChild Int Imported.Msg
| Remove Int
| Remove Int
| Add
| Add




getElementFromList list index default =
getElementFromList list index default =
list
list
|> Array.fromList
|> Array.fromList
|> Array.get index
|> Array.get index
|> replaceMaybeWithDefault default
|> replaceMaybeWithDefault default




replaceMaybeWithDefault default element =
replaceMaybeWithDefault default element =
case element of
case element of
Nothing ->
Nothing ->
default
default


Just val ->
Just val ->
val
val




setElementIntoList list index element =
setElementIntoList list index element =
list
list
|> Array.fromList
|> Array.fromList
|> Array.set index element
|> Array.set index element
|> Array.toList
|> Array.toList




removeElementFromList index list =
removeElementFromList index list =
(List.take index list) ++ (List.drop (index + 1) list)
(List.take index list) ++ (List.drop (index + 1) list)




update msg model =
update msg model =
case msg of
case msg of
MsgFromChild index buttons_Msg ->
MsgFromChild index buttons_Msg ->
let
let
oldButtons =
oldButtons =
getElementFromList model index defaultIfNothing
getElementFromList model index defaultIfNothing


newButtons =
newButtons =
Imported.update buttons_Msg oldButtons
Imported.update buttons_Msg oldButtons
in
in
setElementIntoList model index newButtons
setElementIntoList model index newButtons


Remove index ->
Remove index ->
removeElementFromList index model
removeElementFromList index model


Add ->
Add ->
List.append model [ defaultIfNothing ]
List.append model [ defaultIfNothing ]