4import CSS.Safer (cssSafer)
5import CSSBaseline (mkCssBaseline)
6import CompileEditor.Component (mkCompileEditor)
7import Data.Array as Array
8import Data.Maybe (Maybe(..), fromMaybe)
9import Data.Nullable (Nullable)
10import Data.Nullable as Nullable
11import Data.String as String
13import Milkis.Impl (FetchImpl)
14import React.Basic (JSX, ReactComponent)
15import React.Basic.DOM (unsafeCreateDOMComponent)
16import React.Basic.DOM as R
17import React.Basic.Hooks (ReactChildren, componentWithChildren, element)
18import React.Basic.Hooks as React
19import Theme (fromTheme)
20import Theme.Default (darkTheme)
21import Theme.Provider (mkThemeProvider)
22import Theme.Styles (makeStyles)
23import Theme.Types (CSSTheme)
24import Typography.Header (HeadingLevel(..), mkH)
25import Typography.Paragraph (mkP)
26import Unsafe.Coerce (unsafeCoerce)
29 = { site ∷ { siteMetadata ∷ { title ∷ String } } }
36 { mdxType ∷ Nullable String
37 , children ∷ Nullable String
38 , className ∷ Nullable String
48 { children ∷ ReactChildren children
49 , siteInfo ∷ SiteQueryResult
52mkLayout fetchImpl = do
53 themeProvider <- mkThemeProvider
54 mdxProviderComponent <- mkMdxProviderComponent fetchImpl
55 componentWithChildren "MDXLayout" \{ children, siteInfo } -> React.do
57 $ element themeProvider
58 { theme: fromTheme darkTheme
60 [ element mdxProviderComponent
67mkMdxProviderComponent ::
72 { children ∷ ReactChildren children
73 , siteInfo ∷ SiteQueryResult
76mkMdxProviderComponent fetchImpl = do
77 cssBaseline <- mkCssBaseline
78 editor <- mkCompileEditor fetchImpl
82 makeStyles \(theme :: CSSTheme) ->
85 { fontFamily: "PragmataPro Liga"
86 , backgroundColor: theme.interfaceColour
88 , border: "1px solid #383c39"
98 componentWithChildren "MDXProviderComponent" \{ children, siteInfo } -> React.do
101 baseline child = element cssBaseline { kids: child }
108 , text: siteInfo.site.siteMetadata.title
111 , R.div_ (unsafeCoerce children)
118 element h { level: H2, text: props.children, className: Just classes.margins }
121 element h { level: H3, text: props.children, className: Just classes.margins }
124 element h { level: H4, text: props.children, className: Just classes.margins }
128 { children: [ element p { text: props.children } ]
129 , className: classes.margins
133 R.span { className: classes.code, children: props.children }
135 \(props ∷ PreProps) -> do
137 childrenQ = Nullable.toMaybe props.children
139 propsQ = (_.props >>> Nullable.toMaybe) =<< childrenQ
141 mdxTypeQ = (_.mdxType >>> Nullable.toMaybe) =<< propsQ
143 childrenQ2 = (_.children >>> Nullable.toMaybe) =<< propsQ
145 classNameQ = (_.className >>> Nullable.toMaybe) =<< propsQ
147 isCode = fromMaybe false (mdxTypeQ <#> eq "code")
152 (fromMaybe 200 >>> show >>> (_ <> "px")) do
155 ( String.split (String.Pattern "\n") code
157 # \x -> (x * 12) + 100
160 language = fromMaybe "" (classNameQ >>= String.stripPrefix (String.Pattern "language-"))
163 { initialCode: fromMaybe "" codeQ
168 element (unsafeCreateDOMComponent "pre") props
172 [ element mdxProvider
173 { children: [ siteInfoJSX ]
174 , components: mdxComponents
178foreign import mdxProvider ∷
181 { components ∷ { | r } -- TODO Don't lie
182 , children ∷ Array JSX
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list