5import Color (toHexString)
6import Data.Array as Array
7import Data.Maybe (Maybe(..), fromMaybe)
8import Data.Nullable (Nullable)
9import Data.Nullable as Nullable
10import Data.String as String
12import JSS (jss, jssClasses)
13import Justifill (justifill)
14import Milkis.Impl (FetchImpl)
15import React.Basic (JSX, ReactComponent)
16import React.Basic.DOM (unsafeCreateDOMComponent)
17import React.Basic.DOM as R
18import React.Basic.Helpers (jsx)
19import React.Basic.Hooks (ReactChildren, component, componentWithChildren, element, reactChildrenToArray)
20import React.Basic.Hooks as React
21import Yoga.CompileEditor.Component (mkCompileEditor)
22import Yoga.Header.Component (mkHeader)
23import Yoga.Theme (fromTheme)
24import Yoga.Theme.CSSBaseline (mkCssBaseline)
25import Yoga.Theme.Default (darkTheme)
26import Yoga.Theme.Provider (mkThemeProvider)
27import Yoga.Theme.Styles (makeStylesJSS)
28import Yoga.Theme.Types (CSSTheme)
29import Yoga.Typography.Header (HeadingLevel(..), mkH)
30import Yoga.Typography.Paragraph (mkP)
31import Yoga.WithSidebar.Component (makeComponent) as WithSidebar
37 , menuLinks ∷ Array { name ∷ String, link ∷ String }
47 { mdxType ∷ Nullable String
48 , children ∷ Nullable String
49 , className ∷ Nullable String
58 { children ∷ ReactChildren JSX
59 , siteInfo ∷ SiteQueryResult
62mkLayout fetchImpl = do
63 themeProvider <- mkThemeProvider
64 mdxProviderComponent <- mkMdxProviderComponent fetchImpl
65 componentWithChildren "MDXLayout" \{ children, siteInfo } -> React.do
67 $ element themeProvider
68 { theme: fromTheme darkTheme
70 [ element mdxProviderComponent
77mkMdxProviderComponent ∷
81 { children ∷ ReactChildren JSX
82 , siteInfo ∷ SiteQueryResult
85mkMdxProviderComponent fetchImpl = do
86 cssBaseline <- mkCssBaseline
87 editor <- mkCompileEditor fetchImpl
94 $ jssClasses \(theme ∷ CSSTheme) ->
96 { fontFamily: theme.codeFontFamily
97 , backgroundColor: toHexString $ theme.interfaceColour
99 , border: "1px solid #383c39"
101 , borderRadius: "3px"
105 , flexDirection: "row"
108 componentWithChildren "MDXProviderComponent" \{ children, siteInfo } -> React.do
109 classes <- useStyles {}
111 baseline child = element cssBaseline { kids: child }
116 [ jsx header { className: "" } [ R.text siteInfo.site.siteMetadata.title ]
117 , element sidebar { links: siteInfo.site.siteMetadata.menuLinks }
118 , R.div_ (reactChildrenToArray children)
125 element h ({ level: H2, text: props.children, className: Nothing })
128 element h { level: H3, text: props.children, className: Nothing }
131 element h { level: H4, text: props.children , className: Nothing}
135 { children: [ element p { text: props.children } ]
139 R.span { className: classes.code, children: props.children }
141 \(props ∷ PreProps) -> do
143 childrenQ = Nullable.toMaybe props.children
145 propsQ = (_.props >>> Nullable.toMaybe) =<< childrenQ
147 mdxTypeQ = (_.mdxType >>> Nullable.toMaybe) =<< propsQ
149 childrenQ2 = (_.children >>> Nullable.toMaybe) =<< propsQ
151 classNameQ = (_.className >>> Nullable.toMaybe) =<< propsQ
153 isCode = fromMaybe false (mdxTypeQ <#> eq "code")
158 (fromMaybe 200 >>> show >>> (_ <> "px")) do
161 ( String.split (String.Pattern "\n") code
163 # \x -> (x * 12) + 100
166 language = fromMaybe "" (classNameQ >>= String.stripPrefix (String.Pattern "language-"))
169 { initialCode: fromMaybe "" codeQ
174 element (unsafeCreateDOMComponent "pre") props
178 [ element mdxProvider
182 , components: mdxComponents
187 withSidebar <- WithSidebar.makeComponent
190 $ jssClasses \(theme ∷ CSSTheme) ->
194 , flexDirection: "row"
199 component "Sidebar" \{ links } -> React.do
200 classes <- useStyles {}
202 $ element withSidebar
204 { sidebarChildren: [ R.div_ [ R.text "hahahaha" ] ]
205 , notSidebarChildren: [] ∷ Array JSX
209foreign import mdxProvider ∷
212 { components ∷ { | r } -- TODO Don't lie
213 , 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