summaryrefslogtreecommitdiff
path: root/elm
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2020-12-13 11:55:41 +0100
committerYorhel <git@yorhel.nl>2020-12-13 11:55:41 +0100
commitc52d6069ede8f995cc5d2eb09f93dbe66c2cfea7 (patch)
treee9b978c4d069d944165841a2f4d57df7961957a7 /elm
parent5348ad6ecf86ba6c840a55567bebaba4a944adb0 (diff)
AdvSearch: Merge character sex & sex-spoiler filters
Diffstat (limited to 'elm')
-rw-r--r--elm/AdvSearch/Fields.elm19
-rw-r--r--elm/AdvSearch/Set.elm55
2 files changed, 37 insertions, 37 deletions
diff --git a/elm/AdvSearch/Fields.elm b/elm/AdvSearch/Fields.elm
index 3bace2bb..82f5fa3e 100644
--- a/elm/AdvSearch/Fields.elm
+++ b/elm/AdvSearch/Fields.elm
@@ -239,8 +239,7 @@ type FieldModel
| FMLength (AS.Model Int)
| FMRole (AS.Model String)
| FMBlood (AS.Model String)
- | FMSexChar (AS.Model String)
- | FMSexSpoil (AS.Model String)
+ | FMSex (AS.SexModel)
| FMMedium (AS.Model String)
| FMVoiced (AS.Model Int)
| FMAniEro (AS.Model Int)
@@ -276,8 +275,7 @@ type FieldMsg
| FSLength (AS.Msg Int)
| FSRole (AS.Msg String)
| FSBlood (AS.Msg String)
- | FSSexChar (AS.Msg String)
- | FSSexSpoil (AS.Msg String)
+ | FSSex AS.SexMsg
| FSMedium (AS.Msg String)
| FSVoiced (AS.Msg Int)
| FSAniEro (AS.Msg Int)
@@ -380,8 +378,8 @@ fields =
, f C "Role" 1 FMRole AS.init AS.roleFromQuery
, f C "Age" 0 FMAge AR.ageInit AR.ageFromQuery
- , f C "Sex" 2 FMSexChar AS.init (AS.sexFromQuery AS.SexChar)
- , f C "Sex (spoiler)" 0 FMSexSpoil AS.init (AS.sexFromQuery AS.SexSpoil)
+ , f C "Sex" 2 FMSex (AS.sexInit False) (AS.sexFromQuery False)
+ , f C "" 0 FMSex (AS.sexInit True) (AS.sexFromQuery True)
, f C "Traits" 3 FMTrait AI.init (AI.fromQuery -1)
, f C "" 0 FMTrait AI.init (AI.fromQuery 0)
, f C "" 0 FMTrait AI.init (AI.fromQuery 1)
@@ -440,8 +438,7 @@ fieldUpdate dat msg_ (num, dd, model) =
(FSLength msg, FMLength m) -> maps FMLength (AS.update msg m)
(FSRole msg, FMRole m) -> maps FMRole (AS.update msg m)
(FSBlood msg, FMBlood m) -> maps FMBlood (AS.update msg m)
- (FSSexChar msg, FMSexChar m) -> maps FMSexChar (AS.update msg m)
- (FSSexSpoil msg, FMSexSpoil m) -> maps FMSexSpoil (AS.update msg m)
+ (FSSex msg, FMSex m) -> maps FMSex (AS.sexUpdate msg m)
(FSMedium msg, FMMedium m) -> maps FMMedium (AS.update msg m)
(FSVoiced msg, FMVoiced m) -> maps FMVoiced (AS.update msg m)
(FSAniEro msg, FMAniEro m) -> maps FMAniEro (AS.update msg m)
@@ -502,8 +499,7 @@ fieldView dat (_, dd, model) =
FMLength m -> f FSLength (AS.lengthView m)
FMRole m -> f FSRole (AS.roleView m)
FMBlood m -> f FSBlood (AS.bloodView m)
- FMSexChar m -> f FSSexChar (AS.sexView AS.SexChar m)
- FMSexSpoil m -> f FSSexSpoil (AS.sexView AS.SexSpoil m)
+ FMSex m -> f FSSex (AS.sexView m)
FMMedium m -> f FSMedium (AS.mediumView m)
FMVoiced m -> f FSVoiced (AS.voicedView m)
FMAniEro m -> f FSAniEro (AS.animatedView False m)
@@ -543,8 +539,7 @@ fieldToQuery dat (_, _, model) =
FMLength m -> AS.toQuery (QInt 5) m
FMRole m -> AS.toQuery (QStr 2) m
FMBlood m -> AS.toQuery (QStr 3) m
- FMSexChar m -> AS.toQuery (QStr 4) m
- FMSexSpoil m -> AS.toQuery (QStr 5) m
+ FMSex (s,m) -> AS.toQuery (QStr (if s then 5 else 4)) m
FMMedium m -> AS.toQuery (QStr 11) m
FMVoiced m -> AS.toQuery (QInt 12) m
FMAniEro m -> AS.toQuery (QInt 13) m
diff --git a/elm/AdvSearch/Set.elm b/elm/AdvSearch/Set.elm
index cbb7c6b8..a3000a3b 100644
--- a/elm/AdvSearch/Set.elm
+++ b/elm/AdvSearch/Set.elm
@@ -230,36 +230,41 @@ bloodFromQuery = fromQuery (\q ->
-- Sex / gender
-type SexType
- = SexChar -- chars sex
- | SexSpoil -- chars sex-spoil
- | SexGender -- staff gender
-
-sexView stype model =
- let lbl = case stype of
- SexChar -> "Sex"
- SexSpoil -> "Spoiler-sex"
- SexGender -> "Gender"
- in
+type alias SexModel = (Bool, Model String)
+
+type SexMsg = SexSpoil | SexSel (Msg String)
+
+sexInit spoil dat = init dat |> Tuple.mapSecond (\m -> (spoil,m))
+
+sexFromQuery spoil dat qf = Maybe.map (Tuple.mapSecond (\m -> (spoil,m))) <| fromQuery (\q ->
+ case (spoil, q) of
+ (False, QStr 4 op v) -> Just (op, v)
+ (True, QStr 5 op v) -> Just (op, v)
+ _ -> Nothing) dat qf
+
+sexUpdate msg (spoil,model) =
+ case msg of
+ SexSpoil -> (not spoil, model)
+ SexSel m -> (spoil, update m model)
+
+sexView (spoil,model) =
( case Set.toList model.sel of
- [] -> b [ class "grayedout" ] [ text lbl ]
- [v] -> span [ class "nowrap" ] [ lblPrefix model, text <| lbl ++ ": " ++ Maybe.withDefault "" (lookup v GT.genders) ]
- l -> span [] [ lblPrefix model, text <| lbl ++ " (" ++ String.fromInt (List.length l) ++ ")" ]
+ [] -> b [ class "grayedout" ] [ text "Sex" ]
+ [v] -> span [ class "nowrap" ] [ lblPrefix model, text <| "Sex: " ++ Maybe.withDefault "" (lookup v GT.genders) ]
+ l -> span [] [ lblPrefix model, text <| "Sex (" ++ String.fromInt (List.length l) ++ ")" ]
, \() ->
- [ div [ class "advheader" ]
- [ h3 [] [ text lbl ]
- , opts model False True ]
- , ul [] <| List.map (\(l,t) -> if stype == SexGender && l == "b" then text "" else li [] [ linkRadio (Set.member l model.sel) (Sel l) [ text t ] ]) GT.genders
+ [ div [ class "advheader", style "width" "280px" ]
+ [ h3 [] [ text "Sex" ]
+ , div [ class "opts" ]
+ [ Html.map SexSel (optsMode model False True)
+ , a [ href "#", onClickD SexSpoil ] [ text <| if spoil then "spoilers" else "no spoilers" ]
+ , linkRadio model.neg (SexSel << Neg) [ text "invert" ]
+ ]
+ ]
+ , ul [] <| List.map (\(l,t) -> li [] [ linkRadio (Set.member l model.sel) (SexSel << Sel l) [ text t ] ]) GT.genders
]
)
-sexFromQuery stype = fromQuery (\q ->
- case (stype, q) of
- (SexChar, QStr 4 op v) -> Just (op, v)
- (SexSpoil, QStr 5 op v) -> Just (op, v)
- -- TODO: SexGender
- _ -> Nothing)
-