5import Color (toHexString)
6import Data.Array as Array
7import Data.Array.NonEmpty as NEA
8import Data.Maybe (Maybe(..), fromMaybe)
9import Data.Nullable (Nullable)
10import Data.Nullable as Nullable
11import Data.Semigroup.Foldable (intercalateMap)
12import Data.String as String
14import FillInTheGaps (mkFillInTheGaps)
15import JSS (jss, jssClasses)
16import Justifill (justifill)
17import Milkis.Impl (FetchImpl)
18import React.Basic (JSX, ReactComponent)
19import React.Basic.DOM (unsafeCreateDOMComponent)
20import React.Basic.DOM as R
21import React.Basic.Helpers (jsx)
22import React.Basic.Hooks (ReactChildren, component, componentWithChildren, element, reactChildrenToArray)
23import React.Basic.Hooks as React
24import Yoga.Box.Component as Box
25import Yoga.CompileEditor.Component (mkCompileEditor)
26import Yoga.Header.Component (mkHeader)
27import Yoga.InlineCode.Component as InlineCode
28import Yoga.Theme (fromTheme)
29import Yoga.Theme.CSSBaseline (mkCssBaseline)
30import Yoga.Theme.Default (darkTheme)
31import Yoga.Theme.Provider (mkThemeProvider)
32import Yoga.Theme.Styles (makeStylesJSS)
33import Yoga.Theme.Types (CSSTheme)
34import Yoga.Typography.Header (HeadingLevel(..), mkH)
35import Yoga.Typography.Paragraph (mkP)
36import Yoga.WithSidebar.Component (makeComponent) as WithSidebar
42 , menuLinks ∷ Array { name ∷ String, link ∷ String }
52 { mdxType ∷ Nullable String
53 , children ∷ Nullable String
54 , className ∷ Nullable String
63 { children ∷ ReactChildren JSX
64 , siteInfo ∷ SiteQueryResult
67mkLayout fetchImpl = do
68 themeProvider <- mkThemeProvider
69 mdxProviderComponent <- mkMdxProviderComponent fetchImpl
70 componentWithChildren "MDXLayout" \{ children, siteInfo } -> React.do
72 $ element themeProvider
73 { theme: fromTheme darkTheme
75 [ element mdxProviderComponent
82mkMdxProviderComponent ∷
86 { children ∷ ReactChildren JSX
87 , siteInfo ∷ SiteQueryResult
90mkMdxProviderComponent fetchImpl = do
91 cssBaseline <- mkCssBaseline
92 editor <- mkCompileEditor fetchImpl
93 fillInTheGaps <- mkFillInTheGaps fetchImpl
94 box <- Box.makeComponent
97 yogaInlineCode <- InlineCode.makeComponent
102 $ jssClasses \(theme ∷ CSSTheme) ->
104 { fontFamily: theme.codeFontFamily # NEA.head
105 , backgroundColor: theme.interfaceColour
107 , border: "1px solid #383c39"
109 , borderRadius: "3px"
113 , flexDirection: "row"
116 componentWithChildren "MDXProviderComponent" \{ children, siteInfo } -> React.do
117 classes <- useStyles {}
119 baseline child = element cssBaseline { kids: child }
124 [ jsx header { className: "" } [ R.text siteInfo.site.siteMetadata.title ]
125 , element sidebar { links: siteInfo.site.siteMetadata.menuLinks }
126 , jsx box {} (reactChildrenToArray children)
133 element h ({ level: H2, text: props.children, className: Nothing })
136 element h { level: H3, text: props.children, className: Nothing }
139 element h { level: H4, text: props.children , className: Nothing}
143 { children: [ element p { text: props.children } ]
147 R.span { className: classes.code, children: props.children }
149 \(props ∷ PreProps) -> do
151 childrenQ = Nullable.toMaybe props.children
153 propsQ = (_.props >>> Nullable.toMaybe) =<< childrenQ
155 mdxTypeQ = (_.mdxType >>> Nullable.toMaybe) =<< propsQ
157 childrenQ2 = (_.children >>> Nullable.toMaybe) =<< propsQ
159 classNameQ = (_.className >>> Nullable.toMaybe) =<< propsQ
161 isCode = fromMaybe false (mdxTypeQ <#> eq "code")
166 (fromMaybe 200 >>> show >>> (_ <> "px")) do
169 ( String.split (String.Pattern "\n") code
171 # \x -> (x * 12) + 100
174 language = fromMaybe "" (classNameQ >>= String.stripPrefix (String.Pattern "language-"))
175 case isCode, language of
177 element fillInTheGaps { code: fromMaybe "" codeQ}
180 { initialCode: fromMaybe "" codeQ
184 false, _ -> element (unsafeCreateDOMComponent "pre") props
188 [ element mdxProvider
192 , components: mdxComponents
197 withSidebar <- WithSidebar.makeComponent
200 $ jssClasses \(theme ∷ CSSTheme) ->
204 , flexDirection: "row"
209 component "Sidebar" \{ links } -> React.do
210 classes <- useStyles {}
212 $ element withSidebar
214 { sidebarChildren: [ R.div_ [ R.text "hahahaha" ] ]
215 , notSidebarChildren: [] ∷ Array JSX
219foreign import mdxProvider ∷
222 { components ∷ { | r } -- TODO Don't lie
223 , 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