diff options
author | Yorhel <git@yorhel.nl> | 2019-12-30 09:49:13 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2019-12-30 09:49:13 +0100 |
commit | d79c982ee876502db2e1a12752667c6a198c2ddc (patch) | |
tree | ccd4a4e72e5b0d3dd412bed6aee58044e93893f0 /elm3/StaffEdit/Main.elm | |
parent | e146ed7bda12d369532e485ca0c2e3d823811854 (diff) |
Actually, let's get rid of v3 now that it doesn't work anymore anyway
Diffstat (limited to 'elm3/StaffEdit/Main.elm')
-rw-r--r-- | elm3/StaffEdit/Main.elm | 220 |
1 files changed, 0 insertions, 220 deletions
diff --git a/elm3/StaffEdit/Main.elm b/elm3/StaffEdit/Main.elm deleted file mode 100644 index 96d90343..00000000 --- a/elm3/StaffEdit/Main.elm +++ /dev/null @@ -1,220 +0,0 @@ -module StaffEdit.Main exposing (Model, Msg, main, new, view, update) - -import Html exposing (..) -import Html.Events exposing (..) -import Html.Attributes exposing (..) -import Json.Encode as JE -import Browser -import Browser.Navigation exposing (load) -import Lib.Util exposing (..) -import Lib.Html exposing (..) -import Lib.Gen as Gen -import Lib.Api as Api -import Lib.Editsum as Editsum - - -main : Program Gen.StaffEdit Model Msg -main = Browser.element - { init = \e -> (init e, Cmd.none) - , view = view - , update = update - , subscriptions = always Sub.none - } - - -type alias Model = - { state : Api.State - , editsum : Editsum.Model - , alias : List Gen.StaffEditAlias - , aliasDup : Bool - , aid : Int - , desc : String - , gender : String - , l_site : String - , l_wp : String - , l_twitter : String - , l_anidb : Maybe Int - , lang : String - , id : Maybe Int - } - - -init : Gen.StaffEdit -> Model -init d = - { state = Api.Normal - , editsum = { authmod = d.authmod, editsum = d.editsum, locked = d.locked, hidden = d.hidden } - , alias = d.alias - , aliasDup = False - , aid = d.aid - , desc = d.desc - , gender = d.gender - , l_site = d.l_site - , l_wp = d.l_wp - , l_twitter = d.l_twitter - , l_anidb = d.l_anidb - , lang = "ja" - , id = d.id - } - - -new : Model -new = - { state = Api.Normal - , editsum = Editsum.new - , alias = [ { aid = -1, name = "", original = "", inuse = False } ] - , aliasDup = False - , aid = -1 - , desc = "" - , gender = "unknown" - , l_site = "" - , l_wp = "" - , l_twitter = "" - , l_anidb = Nothing - , lang = "ja" - , id = Nothing - } - - -encode : Model -> Gen.StaffEditSend -encode model = - { editsum = model.editsum.editsum - , hidden = model.editsum.hidden - , locked = model.editsum.locked - , aid = model.aid - , alias = List.map (\e -> { aid = e.aid, name = e.name, original = e.original }) model.alias - , desc = model.desc - , gender = model.gender - , l_anidb = model.l_anidb - , l_site = model.l_site - , l_twitter = model.l_twitter - , l_wp = model.l_wp - , lang = model.lang - } - - -newAid : Model -> Int -newAid model = - let id = Maybe.withDefault 0 <| List.minimum <| List.map .aid model.alias - in if id >= 0 then -1 else id - 1 - - -type Msg - = Editsum Editsum.Msg - | Submit - | Submitted Api.Response - | Lang String - | Website String - | LWP String - | LTwitter String - | LAnidb String - | Desc String - | AliasDel Int - | AliasName Int String - | AliasOrig Int String - | AliasMain Int Bool - | AliasAdd - - -validate : Model -> Model -validate model = { model | aliasDup = hasDuplicates <| List.map (\e -> (e.name, e.original)) model.alias } - - -update : Msg -> Model -> (Model, Cmd Msg) -update msg model = - case msg of - Editsum m -> ({ model | editsum = Editsum.update m model.editsum }, Cmd.none) - Lang s -> ({ model | lang = s }, Cmd.none) - Website s -> ({ model | l_site = s }, Cmd.none) - LWP s -> ({ model | l_wp = s }, Cmd.none) - LTwitter s -> ({ model | l_twitter = s }, Cmd.none) - LAnidb s -> ({ model | l_anidb = if s == "" then Nothing else String.toInt s }, Cmd.none) - Desc s -> ({ model | desc = s }, Cmd.none) - - AliasDel i -> (validate { model | alias = delidx i model.alias }, Cmd.none) - AliasName i s -> (validate { model | alias = modidx i (\e -> { e | name = s }) model.alias }, Cmd.none) - AliasOrig i s -> (validate { model | alias = modidx i (\e -> { e | original = s }) model.alias }, Cmd.none) - AliasMain n _ -> ({ model | aid = n }, Cmd.none) - AliasAdd -> ({ model | alias = model.alias ++ [{ aid = newAid model, name = "", original = "", inuse = False }] }, Cmd.none) - - Submit -> - let - path = - case model.id of - Just id -> "/s" ++ String.fromInt id ++ "/edit" - Nothing -> "/s/add" - body = Gen.staffeditSendEncode (encode model) - in ({ model | state = Api.Loading }, Api.post path body Submitted) - - Submitted (Gen.Changed id rev) -> (model, load <| "/s" ++ String.fromInt id ++ "." ++ String.fromInt rev) - Submitted r -> ({ model | state = Api.Error r }, Cmd.none) - - -isValid : Model -> Bool -isValid model = not - ( model.aliasDup - || List.any (\e -> e.name == "") model.alias - ) - - -view : Model -> Html Msg -view model = - let - nameEntry n e = editListRow "" - [ editListField 0 "" - [ inputRadio "main" (e.aid == model.aid) (AliasMain e.aid) ] - , editListField 1 "" - [ inputText "" e.name (AliasName n) <| (if e.name == "" then [class "is-invalid"] else []) ++ [placeholder "Name (romaji)"] ] - , editListField 1 "" - [ inputText "" e.original (AliasOrig n) [placeholder "Original name"] ] - , editListField 0 "" - [ if model.aid == e.aid || e.inuse then text "" else removeButton (AliasDel n) ] - ] - - names = cardRow "Name(s)" (Just "Selected name = primary name.") - <| editList (List.indexedMap nameEntry model.alias) - ++ formGroups ( - (if model.aliasDup - then [ [ div [ class "invalid-feedback" ] - [ text "The list contains duplicate aliases." ] ] ] - else [] - ) ++ - [ [ button [type_ "button", class "btn", tabindex 10, onClick AliasAdd] [ text "Add alias" ] ] - , [ div [ class "form-group__help" ] - [ text "Aliases can only be removed if they are not selected as this entry's primary name and if they are not credited in visual novel entries." - , text " In some cases it happens that an alias can not be removed even when there are no visible credits for it." - , text " This means that the alias is still credited from a deleted entry. A moderator can fix this for you." - ] - ] - ] - ) - - meta = cardRow "Meta" Nothing <| formGroups - [ [ label [for "lang"] [ text "Primary language" ] - , inputSelect [id "lang", name "lang", onInput Lang] model.lang Gen.languages - ] - , [ label [for "website"] [ text "Official Website" ] - , inputText "website" model.l_site Website [pattern Gen.weburlPattern] - ] - , [ label [] [ text "Wikipedia" ] - , p [] [ text "https://en.wikipedia.org/wiki/", inputText "l_wp" model.l_wp LWP [class "form-control--inline", maxlength 100] ] - ] - , [ label [] [ text "Twitter username" ] - , p [] [ text "https://twitter.com/", inputText "l_twitter" model.l_twitter LTwitter [class "form-control--inline", maxlength 100] ] - ] - , [ label [] [ text "AniDB creator ID" ] - , p [] - [ text "https://anidb.net/cr" - , inputText "l_anidb" (Maybe.withDefault "" (Maybe.map String.fromInt model.l_anidb)) - LAnidb [class "form-control--inline", maxlength 10, pattern "^[0-9]*$"] - ] - ] - ] - - desc = cardRow "Description" (Just "English please!") <| formGroup - [ inputTextArea "desc" model.desc Desc [rows 8] ] - - in form_ Submit (model.state == Api.Loading) - [ card "general" "General info" [] [ names, meta, desc ] - , Html.map Editsum <| Editsum.view model.editsum - , submitButton "Submit" model.state (isValid model) False - ] |