{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Data.API.Doc.Dir
( dirHtml
) where
import Data.API.Doc.Types
import Data.API.Doc.Subst
import Data.List
import Data.Ord
import Data.Char
dirHtml :: DocInfo -> Dict -> [Call] -> String
dirHtml :: DocInfo -> Dict -> [Call] -> [Char]
dirHtml DocInfo
di Dict
dct [Call]
cls = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
[ Dict -> [Char]
container_open Dict
dct
, forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map (DocInfo -> Dict -> ([Char], [Call]) -> [Char]
resourceHtml DocInfo
di Dict
dct) forall a b. (a -> b) -> a -> b
$ [Call] -> [([Char], [Call])]
aggregate [Call]
cls
]
aggregate :: [Call] -> [(String,[Call])]
aggregate :: [Call] -> [([Char], [Call])]
aggregate = forall a b. (a -> b) -> [a] -> [b]
map forall {a} {a}. [(a, a)] -> (a, [a])
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> a -> Bool) -> [a] -> [[a]]
groupBy forall {a} {b} {b}. Eq a => (a, b) -> (a, b) -> Bool
eq forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy (forall a b. Ord a => (b -> a) -> b -> b -> Ordering
comparing forall a b. (a, b) -> a
fst) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map Call -> ([Char], Call)
x_r
where
x_r :: Call -> ([Char], Call)
x_r cl :: Call
cl@Call{Bool
[Char]
[[Char]]
[Sample]
[View]
[Param]
[Header]
Maybe (APIType, [Char])
call_samples :: Call -> [Sample]
call_views :: Call -> [View]
call_params :: Call -> [Param]
call_body :: Call -> Maybe (APIType, [Char])
call_headers :: Call -> [Header]
call_auth_required :: Call -> Bool
call_description :: Call -> [Char]
call_path :: Call -> [[Char]]
call_http_method :: Call -> [Char]
call_samples :: [Sample]
call_views :: [View]
call_params :: [Param]
call_body :: Maybe (APIType, [Char])
call_headers :: [Header]
call_auth_required :: Bool
call_description :: [Char]
call_path :: [[Char]]
call_http_method :: [Char]
..} =
case [[Char]]
call_path of
[] -> ([Char]
"/" ,Call
cl)
[Char]
rsrc:[[Char]]
_ -> ([Char]
rsrc,Call
cl)
eq :: (a, b) -> (a, b) -> Bool
eq (a
x,b
_) (a
y,b
_) = a
xforall a. Eq a => a -> a -> Bool
==a
y
f :: [(a, a)] -> (a, [a])
f [] = forall a. HasCallStack => [Char] -> a
error [Char]
"Data.API.Doc.Dir.aggregate"
f ((a
rsrc,a
cl):[(a, a)]
ps) = (a
rsrc,a
clforall a. a -> [a] -> [a]
:forall a b. (a -> b) -> [a] -> [b]
map forall a b. (a, b) -> b
snd [(a, a)]
ps)
resourceHtml :: DocInfo -> Dict -> (String,[Call]) -> String
resourceHtml :: DocInfo -> Dict -> ([Char], [Call]) -> [Char]
resourceHtml DocInfo
di Dict
dct ([Char]
rsc,[Call]
cls) = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
[ Dict -> [Char]
resource_heading Dict
r_dct
, Dict -> [Char]
ul_open Dict
r_dct
, forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [ DocInfo -> Dict -> Call -> [Char]
callHtml DocInfo
di Dict
r_dct Call
cl | Call
cl<-[Call]
cls ]
, Dict -> [Char]
ul_close Dict
r_dct
]
where
r_dct :: Dict
r_dct = Dict -> [Char] -> Dict
resource_dict Dict
dct [Char]
rsc
resource_dict :: Dict -> String -> Dict
resource_dict :: Dict -> [Char] -> Dict
resource_dict Dict
dct [Char]
rsc = forall a b c. (a -> b -> c) -> b -> a -> c
flip [([Char], [Char])] -> Dict -> Dict
extDict Dict
dct
[ (,) [Char]
"RESOURCE-HEADING" [Char]
rsc
]
callHtml :: DocInfo -> Dict -> Call -> String
callHtml :: DocInfo -> Dict -> Call -> [Char]
callHtml DocInfo
di Dict
dct Call
cl = Dict -> [Char]
call forall a b. (a -> b) -> a -> b
$ DocInfo -> Dict -> Call -> Dict
call_dict DocInfo
di Dict
dct Call
cl
call_dict :: DocInfo -> Dict -> Call -> Dict
call_dict :: DocInfo -> Dict -> Call -> Dict
call_dict DocInfo
di Dict
dct Call{Bool
[Char]
[[Char]]
[Sample]
[View]
[Param]
[Header]
Maybe (APIType, [Char])
call_samples :: [Sample]
call_views :: [View]
call_params :: [Param]
call_body :: Maybe (APIType, [Char])
call_headers :: [Header]
call_auth_required :: Bool
call_description :: [Char]
call_path :: [[Char]]
call_http_method :: [Char]
call_samples :: Call -> [Sample]
call_views :: Call -> [View]
call_params :: Call -> [Param]
call_body :: Call -> Maybe (APIType, [Char])
call_headers :: Call -> [Header]
call_auth_required :: Call -> Bool
call_description :: Call -> [Char]
call_path :: Call -> [[Char]]
call_http_method :: Call -> [Char]
..} = forall a b c. (a -> b -> c) -> b -> a -> c
flip [([Char], [Char])] -> Dict -> Dict
extDict Dict
dct
[ (,) [Char]
"CALL-URL" forall a b. (a -> b) -> a -> b
$ DocInfo -> [Char] -> [[Char]] -> [Char]
doc_info_call_url DocInfo
di [Char]
call_http_method [[Char]]
call_path
, (,) [Char]
"METHOD-CLASS" forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toLower [Char]
mth_s
, (,) [Char]
"METHOD" forall a b. (a -> b) -> a -> b
$ [Char]
mth_s
, (,) [Char]
"PATH" forall a b. (a -> b) -> a -> b
$ Char
'/' forall a. a -> [a] -> [a]
: forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat (forall a. a -> [a] -> [a]
intersperse [Char]
"/" [[Char]]
call_path)
, (,) [Char]
"BODY-TYPE" forall a b. (a -> b) -> a -> b
$ forall b a. b -> (a -> b) -> Maybe a -> b
maybe [Char]
"—" (DocInfo -> APIType -> [Char]
renderAPIType DocInfo
di forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> a
fst) Maybe (APIType, [Char])
call_body
]
where
mth_s :: [Char]
mth_s = [Char]
call_http_method
container_open :: Dict -> String
container_open :: Dict -> [Char]
container_open Dict
dct = Dict -> [[Char]] -> [Char]
prep Dict
dct
[ [Char]
"<h2>"
, [Char]
" <<TITLE>>"
, [Char]
" <span class='tagline'><<TAGLINE>></span>"
, [Char]
"</h2>"
, [Char]
"<strong>Endpoint: </strong><<ENDPOINT>>"
, [Char]
"<br>"
, [Char]
"<div id='toc'>"
, [Char]
" <div id='app-description'>"
, [Char]
" <p><<SUMMARY>></p>"
, [Char]
" </div>"
, [Char]
" <hr/>"
, [Char]
" <br>"
, [Char]
" <h3 class='section-title'>"
, [Char]
" API Resources for This Application"
, [Char]
" </h3>"
]
resource_heading :: Dict -> String
resource_heading :: Dict -> [Char]
resource_heading Dict
dct = Dict -> [[Char]] -> [Char]
prep Dict
dct
[ [Char]
" <h5 class='tag'><<RESOURCE-HEADING>></h5>"
]
ul_open :: Dict -> String
ul_open :: Dict -> [Char]
ul_open Dict
dct = Dict -> [[Char]] -> [Char]
prep Dict
dct
[ [Char]
" <ul class='list resource-list'>"
]
call :: Dict -> String
call :: Dict -> [Char]
call Dict
dct = Dict -> [[Char]] -> [Char]
prep Dict
dct
[ [Char]
" <li >"
, [Char]
" <a class='reflink' href='<<CALL-URL>>'>"
, [Char]
" <span class='<<METHOD-CLASS>>'><<METHOD>></span>"
, [Char]
" <<PATH>>"
, [Char]
" </a>"
, [Char]
" <div class='post-data' ><<BODY-TYPE>></div>"
, [Char]
" </li>"
]
ul_close :: Dict -> String
ul_close :: Dict -> [Char]
ul_close Dict
dct = Dict -> [[Char]] -> [Char]
prep Dict
dct
[ [Char]
" </ul>"
]