module VNEdit.Titles exposing (..)
import Html exposing (..)
import Html.Attributes exposing (..)
import Dict
import Lib.Html exposing (..)
import Lib.Gen exposing (..)
import Lib.Util exposing (..)
type alias Model =
{ title : String
, original : String
, alias : String
, aliasList : List String
, aliasDuplicates : Bool
, aliasBad : List String
, aliasRel : Dict.Dict String Bool
}
init : VNEdit -> Model
init d =
{ title = d.title
, original = d.original
, alias = d.alias
, aliasList = splitLn d.alias
, aliasDuplicates = False
, aliasBad = []
, aliasRel = Dict.fromList <| List.map (\e -> (e,True)) <| List.map .title d.releases ++ List.map .original d.releases
}
new : Model
new =
{ title = ""
, original = ""
, alias = ""
, aliasList = []
, aliasDuplicates = False
, aliasBad = []
, aliasRel = Dict.empty
}
type Msg
= Title String
| Original String
| Alias String
update : Msg -> Model -> Model
update msg model =
case msg of
Title s -> { model | title = s }
Original s -> { model | original = s }
Alias s ->
let
lst = splitLn s
check a = a == model.title || a == model.original || Dict.member a model.aliasRel
in
{ model
| alias = s
, aliasList = lst
, aliasDuplicates = hasDuplicates lst
, aliasBad = List.filter check lst
}
view : Model -> List (Html Msg)
view model =
[ cardRow "Title" Nothing <| formGroups
[ [ label [for "title"] [text "Title (romaji)"]
, inputText "title" model.title Title [required True, maxlength 250]
]
, [ label [for "original"] [text "Original"]
, inputText "original" model.original Original [maxlength 250]
, div [class "form-group__help"] [text "The original title of this visual novel, leave blank if it already is in the Latin alphabet."]
]
]
, cardRow "Aliases" Nothing <| formGroup
[ inputTextArea "aliases" model.alias Alias
[ rows 4, maxlength 500
, classList [("is-invalid", model.aliasDuplicates || not (List.isEmpty model.aliasBad))]
]
, if model.aliasDuplicates
then div [class "invalid-feedback"]
[ text "There are duplicate aliases." ]
else text ""
, if List.isEmpty model.aliasBad
then text ""
else div [class "invalid-feedback"]
[ text
<| "The following aliases are already listed elsewhere and should be removed: "
++ String.join ", " model.aliasBad
]
, div [class "form-group__help"]
[ text "List of alternative titles or abbreviations. One line for each alias. Can include both official (japanese/english) titles and unofficial titles used around net."
, br [] []
, text "Titles that are listed in the releases should not be added here!"
]
]
]