[elm-discuss] Re: Decoding childNodes textContent

2016-12-08 Thread Laurence Roberts
For anyone who comes across this, see this PR 
- https://github.com/elm-lang/core/pull/768

On Thursday, 24 November 2016 23:58:27 UTC, Laurence Roberts wrote:
>
> I've become stumped by a json decode issue where the code compiles 
> correctly but does not appear to actually run.
>
> If you run this code below, open your console, enter anything in the 
> editable element and click out of it. I would expect the message `"Write!"` 
> to be logged but it is not. Equally the model is not updated.
>
> Is this an issue with my code or is it a limitation of decoding child 
> nodes? The app works fine if refactored to take a model of `type alias 
> Model = { contents : String }` instead of a `List String`. As far as I 
> can tell the issue seems to lie with attempting to decode `childNodes`. 
> Any ideas?
>
> Thanks!
>
> import List exposing (map)
> import Html exposing (beginnerProgram)
> import Html exposing (Html, article, p)
> import Html.Attributes exposing (style, contenteditable, spellcheck)
> import Html.Events exposing (on)
> import Json.Decode as Decode
>
>
> main : Program Never Model Message
> main =
> beginnerProgram { model = model, view = view, update = update }
>
>
> -- MODEL
>
> type alias Model =
> { contents : List String }
>
> model : Model
> model =
> { contents =
> [ "Lorem"
> , "ipsum"
> , "dolor"
> ]
> }
>
>
> -- UPDATE
>
> type Message =
> Write (List String)
>
>
> update : Message -> Model -> Model
> update message model =
> case message of
> Write contents ->
> { model | contents = Debug.log "Write!" contents }
>
> -- VIEW
>
> view : Model -> Html Message
> view model =
> article
> [ contenteditable True
> , spellcheck False
> , on "blur" <| Decode.map Write <| childrenContentDecoder
> ]
> (viewContents model.contents)
>
> viewContents : List String -> List (Html a)
> viewContents contents =
> contents |> map (\content -> p [] [ Html.text content ])
>
>
> childrenContentDecoder : Decode.Decoder (List String)
> childrenContentDecoder =
> Decode.at [ "target", "childNodes" ] (Decode.list textContentDecoder)
>
>
> textContentDecoder : Decode.Decoder String
> textContentDecoder =
> Decode.field "textContent" Decode.string
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[elm-discuss] Decoding childNodes textContent

2016-11-24 Thread Laurence Roberts
I've become stumped by a json decode issue where the code compiles 
correctly but does not appear to actually run.

If you run this code below, open your console, enter anything in the 
editable element and click out of it. I would expect the message `"Write!"` 
to be logged but it is not. Equally the model is not updated.

Is this an issue with my code or is it a limitation of decoding child 
nodes? The app works fine if refactored to take a model of `type alias 
Model = { contents : String }` instead of a `List String`. As far as I can 
tell the issue seems to lie with attempting to decode `childNodes`. Any 
ideas?

Thanks!

import List exposing (map)
import Html exposing (beginnerProgram)
import Html exposing (Html, article, p)
import Html.Attributes exposing (style, contenteditable, spellcheck)
import Html.Events exposing (on)
import Json.Decode as Decode


main : Program Never Model Message
main =
beginnerProgram { model = model, view = view, update = update }


-- MODEL

type alias Model =
{ contents : List String }

model : Model
model =
{ contents =
[ "Lorem"
, "ipsum"
, "dolor"
]
}


-- UPDATE

type Message =
Write (List String)


update : Message -> Model -> Model
update message model =
case message of
Write contents ->
{ model | contents = Debug.log "Write!" contents }

-- VIEW

view : Model -> Html Message
view model =
article
[ contenteditable True
, spellcheck False
, on "blur" <| Decode.map Write <| childrenContentDecoder
]
(viewContents model.contents)

viewContents : List String -> List (Html a)
viewContents contents =
contents |> map (\content -> p [] [ Html.text content ])


childrenContentDecoder : Decode.Decoder (List String)
childrenContentDecoder =
Decode.at [ "target", "childNodes" ] (Decode.list textContentDecoder)


textContentDecoder : Decode.Decoder String
textContentDecoder =
Decode.field "textContent" Decode.string



-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.