diff options
Diffstat (limited to 'elm3/VNEdit/Titles.elm')
-rw-r--r-- | elm3/VNEdit/Titles.elm | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/elm3/VNEdit/Titles.elm b/elm3/VNEdit/Titles.elm new file mode 100644 index 00000000..9dad830d --- /dev/null +++ b/elm3/VNEdit/Titles.elm @@ -0,0 +1,103 @@ +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!" + ] + ] + ] |