1module Url.Ext exposing (action, extractQueryParam, queryDictionary)
2
3import Dict exposing (Dict)
4import Maybe.Extra as Maybe
5import Url exposing (Url)
6import Url.Parser as Url
7import Url.Parser.Query as Query
8
9
10
11-- 🔱
12
13
14action : Url -> List String
15action url =
16 url
17 |> extractQueryParam "action"
18 |> Maybe.map (String.split "/")
19 |> Maybe.withDefault []
20
21
22extractQueryParam : String -> Url -> Maybe String
23extractQueryParam key url =
24 { url | path = "" }
25 |> Url.parse (Url.query (Query.string key))
26 |> Maybe.join
27
28
29queryDictionary : Url -> Dict String String
30queryDictionary url =
31 url.query
32 |> Maybe.map (String.split "&")
33 |> Maybe.withDefault []
34 |> List.filterMap
35 (\s ->
36 case String.split "=" s of
37 [ k, v ] ->
38 Just ( k, v )
39
40 k :: v ->
41 Just ( k, String.join "=" v )
42
43 _ ->
44 Nothing
45 )
46 |> Dict.fromList