|
@@ -1,6 +1,7 @@
|
|
|
module Main exposing (..)
|
|
module Main exposing (..)
|
|
|
|
|
|
|
|
import Browser exposing (Document)
|
|
import Browser exposing (Document)
|
|
|
|
|
+import Card exposing (CardData)
|
|
|
import Database
|
|
import Database
|
|
|
import Draft exposing (Draft)
|
|
import Draft exposing (Draft)
|
|
|
import Html exposing (Html, button, div, img, span, text)
|
|
import Html exposing (Html, button, div, img, span, text)
|
|
@@ -8,6 +9,7 @@ import Html.Attributes exposing (alt, attribute, class, classList, disabled, src
|
|
|
import Html.Events as Events exposing (onClick)
|
|
import Html.Events as Events exposing (onClick)
|
|
|
import Html.Keyed as Keyed
|
|
import Html.Keyed as Keyed
|
|
|
import Json.Decode exposing (decodeString)
|
|
import Json.Decode exposing (decodeString)
|
|
|
|
|
+import Round
|
|
|
import Zipper
|
|
import Zipper
|
|
|
|
|
|
|
|
|
|
|
|
@@ -162,25 +164,76 @@ viewHighlightedCard : ReadyModel -> Html Msg
|
|
|
viewHighlightedCard model =
|
|
viewHighlightedCard model =
|
|
|
div [ class "col-span-2 shadow-xl bg-slate-600 p-6" ]
|
|
div [ class "col-span-2 shadow-xl bg-slate-600 p-6" ]
|
|
|
[ case model.highlighted of
|
|
[ case model.highlighted of
|
|
|
- Just { name, frontImage, backImage } ->
|
|
|
|
|
|
|
+ Just highlighted ->
|
|
|
let
|
|
let
|
|
|
url =
|
|
url =
|
|
|
- case ( model.flipHighlighted, backImage ) of
|
|
|
|
|
|
|
+ case ( model.flipHighlighted, highlighted.backImage ) of
|
|
|
( True, Just backUrl ) ->
|
|
( True, Just backUrl ) ->
|
|
|
backUrl
|
|
backUrl
|
|
|
|
|
|
|
|
_ ->
|
|
_ ->
|
|
|
- frontImage
|
|
|
|
|
|
|
+ highlighted.frontImage
|
|
|
in
|
|
in
|
|
|
div
|
|
div
|
|
|
- [ onClick FlipHighlightedCard ]
|
|
|
|
|
- [ img [ src url, alt name ] [] ]
|
|
|
|
|
|
|
+ []
|
|
|
|
|
+ [ img
|
|
|
|
|
+ [ src url
|
|
|
|
|
+ , alt highlighted.name
|
|
|
|
|
+ , onClick FlipHighlightedCard
|
|
|
|
|
+ ]
|
|
|
|
|
+ []
|
|
|
|
|
+ , viewCardDetailedPerformance model.database highlighted
|
|
|
|
|
+ ]
|
|
|
|
|
|
|
|
Nothing ->
|
|
Nothing ->
|
|
|
div [] []
|
|
div [] []
|
|
|
]
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+formatPercentage : Float -> String
|
|
|
|
|
+formatPercentage value =
|
|
|
|
|
+ Round.round 2 (value * 100) ++ "%"
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+viewCardDetailedPerformance : Database.Database -> Draft.PickCard -> Html Msg
|
|
|
|
|
+viewCardDetailedPerformance db { name } =
|
|
|
|
|
+ let
|
|
|
|
|
+ makeCardFacts : CardData -> List ( String, String )
|
|
|
|
|
+ makeCardFacts cardData =
|
|
|
|
|
+ [ ( "Pick rate"
|
|
|
|
|
+ , Just <|
|
|
|
|
|
+ formatPercentage (Card.pickRate cardData)
|
|
|
|
|
+ )
|
|
|
|
|
+ , ( "GIHWR"
|
|
|
|
|
+ , Maybe.map formatPercentage cardData.performance.gameInHandWinRate
|
|
|
|
|
+ )
|
|
|
|
|
+ , ( "ALPA"
|
|
|
|
|
+ , Maybe.map (Round.round 2) cardData.performance.averagePickPosition
|
|
|
|
|
+ )
|
|
|
|
|
+ , ( "ALSA"
|
|
|
|
|
+ , Maybe.map (Round.round 2) cardData.performance.averageSeenPosition
|
|
|
|
|
+ )
|
|
|
|
|
+ ]
|
|
|
|
|
+ |> List.filterMap (\( label, value ) -> Maybe.map (\v -> ( label, v )) value)
|
|
|
|
|
+
|
|
|
|
|
+ viewFact : ( String, String ) -> Html Msg
|
|
|
|
|
+ viewFact ( label, value ) =
|
|
|
|
|
+ div
|
|
|
|
|
+ [ class "" ]
|
|
|
|
|
+ [ div [] [ text label ]
|
|
|
|
|
+ , div [] [ text value ]
|
|
|
|
|
+ ]
|
|
|
|
|
+ in
|
|
|
|
|
+ case Database.get name db of
|
|
|
|
|
+ Just cardData ->
|
|
|
|
|
+ div
|
|
|
|
|
+ [ class "" ]
|
|
|
|
|
+ (List.map viewFact (makeCardFacts cardData))
|
|
|
|
|
+
|
|
|
|
|
+ Nothing ->
|
|
|
|
|
+ div [] [ text "Could not find card in database" ]
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
viewKeyedCard : Bool -> Draft.PickCard -> ( String, Html Msg )
|
|
viewKeyedCard : Bool -> Draft.PickCard -> ( String, Html Msg )
|
|
|
viewKeyedCard wasChosen { name, frontImage, backImage } =
|
|
viewKeyedCard wasChosen { name, frontImage, backImage } =
|
|
|
( name
|
|
( name
|