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.CompileEditor.Component (mkCompileEditor)
25import Yoga.Header.Component (mkHeader)
26import Yoga.InlineCode.Component as InlineCode
27import Yoga.Theme (fromTheme)
28import Yoga.Theme.CSSBaseline (mkCssBaseline)
29import Yoga.Theme.Default (darkTheme)
30import Yoga.Theme.Provider (mkThemeProvider)
31import Yoga.Theme.Styles (makeStylesJSS)
32import Yoga.Theme.Types (CSSTheme)
33import Yoga.Typography.Header (HeadingLevel(..), mkH)
34import Yoga.Typography.Paragraph (mkP)
35import Yoga.WithSidebar.Component (makeComponent) as WithSidebar
41 , menuLinks ∷ Array { name ∷ String, link ∷ String }
51 { mdxType ∷ Nullable String
52 , children ∷ Nullable String
53 , className ∷ Nullable String
62 { children ∷ ReactChildren JSX
63 , siteInfo ∷ SiteQueryResult
66mkLayout fetchImpl = do
67 themeProvider <- mkThemeProvider
68 mdxProviderComponent <- mkMdxProviderComponent fetchImpl
69 componentWithChildren "MDXLayout" \{ children, siteInfo } -> React.do
71 $ element themeProvider
72 { theme: fromTheme darkTheme
74 [ element mdxProviderComponent
81mkMdxProviderComponent ∷
85 { children ∷ ReactChildren JSX
86 , siteInfo ∷ SiteQueryResult
89mkMdxProviderComponent fetchImpl = do
90 cssBaseline <- mkCssBaseline
91 editor <- mkCompileEditor fetchImpl
92 fillInTheGaps <- mkFillInTheGaps fetchImpl
95 yogaInlineCode <- InlineCode.makeComponent
100 $ jssClasses \(theme ∷ CSSTheme) ->
102 { fontFamily: theme.codeFontFamily # NEA.head
103 , backgroundColor: theme.interfaceColour
105 , border: "1px solid #383c39"
107 , borderRadius: "3px"
111 , flexDirection: "row"
114 componentWithChildren "MDXProviderComponent" \{ children, siteInfo } -> React.do
115 classes <- useStyles {}
117 baseline child = element cssBaseline { kids: child }
122 [ jsx header { className: "" } [ R.text siteInfo.site.siteMetadata.title ]
123 , element sidebar { links: siteInfo.site.siteMetadata.menuLinks }
124 , R.div_ (reactChildrenToArray children)
131 element h ({ level: H2, text: props.children, className: Nothing })
134 element h { level: H3, text: props.children, className: Nothing }
137 element h { level: H4, text: props.children , className: Nothing}
141 { children: [ element p { text: props.children } ]
145 R.span { className: classes.code, children: props.children }
147 \(props ∷ PreProps) -> do
149 childrenQ = Nullable.toMaybe props.children
151 propsQ = (_.props >>> Nullable.toMaybe) =<< childrenQ
153 mdxTypeQ = (_.mdxType >>> Nullable.toMaybe) =<< propsQ
155 childrenQ2 = (_.children >>> Nullable.toMaybe) =<< propsQ
157 classNameQ = (_.className >>> Nullable.toMaybe) =<< propsQ
159 isCode = fromMaybe false (mdxTypeQ <#> eq "code")
164 (fromMaybe 200 >>> show >>> (_ <> "px")) do
167 ( String.split (String.Pattern "\n") code
169 # \x -> (x * 12) + 100
172 language = fromMaybe "" (classNameQ >>= String.stripPrefix (String.Pattern "language-"))
173 case isCode, language of
175 element fillInTheGaps { code: fromMaybe "" codeQ}
178 { initialCode: fromMaybe "" codeQ
182 false, _ -> element (unsafeCreateDOMComponent "pre") props
186 [ element mdxProvider
190 , components: mdxComponents
195 withSidebar <- WithSidebar.makeComponent
198 $ jssClasses \(theme ∷ CSSTheme) ->
202 , flexDirection: "row"
207 component "Sidebar" \{ links } -> React.do
208 classes <- useStyles {}
210 $ element withSidebar
212 { sidebarChildren: [ R.div_ [ R.text "hahahaha" ] ]
213 , notSidebarChildren: [] ∷ Array JSX
217foreign import mdxProvider ∷
220 { components ∷ { | r } -- TODO Don't lie
221 , 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