summaryrefslogtreecommitdiff
path: root/elm
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2021-01-02 09:55:37 +0100
committerYorhel <git@yorhel.nl>2021-01-02 09:55:39 +0100
commit61cb7cd185fbf9203041ca366a2eb915e746d6f4 (patch)
treea3edc941c5cee87fa6edf8aec4bc19b604198bb1 /elm
parentb32c9d40ee8b9a29aa1acf2fef3376aee28d16d5 (diff)
AdvSearch: Add anime filter
Pretty much a copy-paste from the staff id filter.
Diffstat (limited to 'elm')
-rw-r--r--elm/AdvSearch/Anime.elm93
-rw-r--r--elm/AdvSearch/Fields.elm8
-rw-r--r--elm/AdvSearch/Lib.elm1
-rw-r--r--elm/AdvSearch/Main.elm2
4 files changed, 104 insertions, 0 deletions
diff --git a/elm/AdvSearch/Anime.elm b/elm/AdvSearch/Anime.elm
new file mode 100644
index 00000000..efd021f9
--- /dev/null
+++ b/elm/AdvSearch/Anime.elm
@@ -0,0 +1,93 @@
+module AdvSearch.Anime exposing (..)
+
+import Html exposing (..)
+import Html.Attributes exposing (..)
+import Set
+import Dict
+import Lib.Autocomplete as A
+import Lib.Html exposing (..)
+import Lib.Util exposing (..)
+import Gen.Api as GApi
+import AdvSearch.Lib exposing (..)
+import AdvSearch.Set as S
+
+
+
+type alias Model =
+ { sel : S.Model Int
+ , conf : A.Config Msg GApi.ApiAnimeResult
+ , search : A.Model GApi.ApiAnimeResult
+ }
+
+type Msg
+ = Sel (S.Msg Int)
+ | Search (A.Msg GApi.ApiAnimeResult)
+
+
+init : Data -> (Data, Model)
+init dat =
+ let (ndat, sel) = S.init dat
+ in ( { ndat | objid = ndat.objid + 1 }
+ , { sel = { sel | single = False }
+ , conf = { wrap = Search, id = "advsearch_anime" ++ String.fromInt ndat.objid, source = A.animeSource }
+ , search = A.init ""
+ }
+ )
+
+
+update : Data -> Msg -> Model -> (Data, Model, Cmd Msg)
+update dat msg model =
+ case msg of
+ Sel m -> (dat, { model | sel = S.update m model.sel }, Cmd.none)
+ Search m ->
+ let (nm, c, res) = A.update model.conf m model.search
+ in case res of
+ Nothing -> (dat, { model | search = nm }, c)
+ Just s ->
+ if Set.member s.id model.sel.sel then (dat, { model | search = nm }, c)
+ else ( { dat | anime = Dict.insert s.id s dat.anime }
+ , { model | search = A.clear nm "", sel = S.update (S.Sel s.id True) model.sel }
+ , c )
+
+
+toQuery m = S.toQuery (QInt 13) m.sel
+
+fromQuery dat qf = S.fromQuery (\q ->
+ case q of
+ QInt 13 op v -> Just (op, v)
+ _ -> Nothing) dat qf
+ |> Maybe.map (\(ndat,sel) ->
+ ( { ndat | objid = ndat.objid+1 }
+ , { sel = { sel | single = False }
+ , conf = { wrap = Search, id = "advsearch_anime" ++ String.fromInt ndat.objid, source = A.animeSource }
+ , search = A.init ""
+ }
+ ))
+
+
+
+view : Data -> Model -> (Html Msg, () -> List (Html Msg))
+view dat model =
+ ( case Set.toList model.sel.sel of
+ [] -> b [ class "grayedout" ] [ text "Anime" ]
+ [s] -> span [ class "nowrap" ]
+ [ S.lblPrefix model.sel
+ , b [ class "grayedout" ] [ text <| "a" ++ String.fromInt s ++ ":" ]
+ , Dict.get s dat.anime |> Maybe.map (\e -> e.title) |> Maybe.withDefault "" |> text
+ ]
+ l -> span [] [ S.lblPrefix model.sel, text <| "Anime (" ++ String.fromInt (List.length l) ++ ")" ]
+ , \() ->
+ [ div [ class "advheader" ]
+ [ h3 [] [ text "Anime" ]
+ , Html.map Sel (S.opts model.sel True True)
+ ]
+ , ul [] <| List.map (\s ->
+ li [ style "overflow" "hidden", style "text-overflow" "ellipsis" ]
+ [ inputButton "X" (Sel (S.Sel s False)) []
+ , b [ class "grayedout" ] [ text <| " a" ++ String.fromInt s ++ ": " ]
+ , Dict.get s dat.anime |> Maybe.map (\e -> e.title) |> Maybe.withDefault "" |> text
+ ]
+ ) (Set.toList model.sel.sel)
+ , A.view model.conf model.search [ placeholder "Search..." ]
+ ]
+ )
diff --git a/elm/AdvSearch/Fields.elm b/elm/AdvSearch/Fields.elm
index 54e27cf4..a73b0c6f 100644
--- a/elm/AdvSearch/Fields.elm
+++ b/elm/AdvSearch/Fields.elm
@@ -8,6 +8,7 @@ import Lib.Html exposing (..)
import Lib.DropDown as DD
import Lib.Api as Api
import Lib.Autocomplete as A
+import AdvSearch.Anime as AA
import AdvSearch.Set as AS
import AdvSearch.Producers as AP
import AdvSearch.Staff as AT
@@ -277,6 +278,7 @@ type FieldModel
| FMDeveloper AP.Model
| FMProducer AP.Model
| FMStaff AT.Model
+ | FMAnime AA.Model
| FMRDate AD.Model
| FMResolution AE.Model
| FMEngine AEng.Model
@@ -317,6 +319,7 @@ type FieldMsg
| FSDeveloper AP.Msg
| FSProducer AP.Msg
| FSStaff AT.Msg
+ | FSAnime AA.Msg
| FSRDate AD.Msg
| FSResolution AE.Msg
| FSEngine AEng.Msg
@@ -378,6 +381,7 @@ fields =
, f V "Popularity" 0 FMPopularity AR.popularityInit AR.popularityFromQuery
, f V "Rating" 0 FMRating AR.ratingInit AR.ratingFromQuery
, f V "Number of votes" 0 FMVotecount AR.votecountInit AR.votecountFromQuery
+ , f V "Anime" 0 FMAnime AA.init AA.fromQuery
, l V "Has description" 0 [(QInt 61 Eq 1, "Has description"), (QInt 61 Ne 1, "No description")]
, l V "Has anime" 0 [(QInt 62 Eq 1, "Has anime relation"), (QInt 62 Ne 1, "No anime relation")]
, l V "Has screenshot" 0 [(QInt 63 Eq 1, "Has screenshot(s)"), (QInt 63 Ne 1, "No screenshot(s)")]
@@ -443,6 +447,7 @@ fieldUpdate dat msg_ (num, dd, model) =
FMDeveloper m -> Cmd.map FSDeveloper (A.refocus m.conf)
FMProducer m -> Cmd.map FSProducer (A.refocus m.conf)
FMStaff m -> Cmd.map FSStaff (A.refocus m.conf)
+ FMAnime m -> Cmd.map FSAnime (A.refocus m.conf)
FMResolution m -> Cmd.map FSResolution (A.refocus m.conf)
FMEngine m -> Cmd.map FSEngine (A.refocus m.conf)
_ -> Cmd.none
@@ -497,6 +502,7 @@ fieldUpdate dat msg_ (num, dd, model) =
(FSDeveloper msg,FMDeveloper m)-> mapf FMDeveloper FSDeveloper (AP.update dat msg m)
(FSProducer msg, FMProducer m) -> mapf FMProducer FSProducer (AP.update dat msg m)
(FSStaff msg, FMStaff m) -> mapf FMStaff FSStaff (AT.update dat msg m)
+ (FSAnime msg, FMAnime m) -> mapf FMAnime FSAnime (AA.update dat msg m)
(FSRDate msg, FMRDate m) -> maps FMRDate (AD.update msg m)
(FSResolution msg,FMResolution m)->mapf FMResolution FSResolution (AE.update dat msg m)
(FSEngine msg, FMEngine m) -> mapf FMEngine FSEngine (AEng.update dat msg m)
@@ -562,6 +568,7 @@ fieldView dat (_, dd, model) =
FMDeveloper m -> f FSDeveloper (AP.view False dat m)
FMProducer m -> f FSProducer (AP.view True dat m)
FMStaff m -> f FSStaff (AT.view dat m)
+ FMAnime m -> f FSAnime (AA.view dat m)
FMRDate m -> f FSRDate (AD.view m)
FMResolution m -> f FSResolution (AE.view m)
FMEngine m -> f FSEngine (AEng.view m)
@@ -606,6 +613,7 @@ fieldToQuery dat (_, _, model) =
FMDeveloper m-> AP.toQuery False m
FMProducer m -> AP.toQuery True m
FMStaff m -> AT.toQuery m
+ FMAnime m -> AA.toQuery m
FMRDate m -> AD.toQuery m
FMResolution m-> AE.toQuery m
FMEngine m -> AEng.toQuery m
diff --git a/elm/AdvSearch/Lib.elm b/elm/AdvSearch/Lib.elm
index c1d252d8..0820eeb6 100644
--- a/elm/AdvSearch/Lib.elm
+++ b/elm/AdvSearch/Lib.elm
@@ -170,4 +170,5 @@ type alias Data =
, staff : Dict.Dict Int GApi.ApiStaffResult
, tags : Dict.Dict Int GApi.ApiTagResult
, traits : Dict.Dict Int GApi.ApiTraitResult
+ , anime : Dict.Dict Int GApi.ApiAnimeResult
}
diff --git a/elm/AdvSearch/Main.elm b/elm/AdvSearch/Main.elm
index e707a2a8..3565be81 100644
--- a/elm/AdvSearch/Main.elm
+++ b/elm/AdvSearch/Main.elm
@@ -32,6 +32,7 @@ type alias Recv =
, staff : List GApi.ApiStaffResult
, tags : List GApi.ApiTagResult
, traits : List GApi.ApiTraitResult
+ , anime : List GApi.ApiAnimeResult
}
type alias Model =
@@ -84,6 +85,7 @@ init arg =
, staff = Dict.fromList <| List.map (\s -> (s.id,s)) <| arg.staff
, tags = Dict.fromList <| List.map (\t -> (t.id,t)) <| arg.tags
, traits = Dict.fromList <| List.map (\t -> (t.id,t)) <| arg.traits
+ , anime = Dict.fromList <| List.map (\a -> (a.id,a)) <| arg.anime
}
qtype = if arg.qtype == "v" then V else R