4import Data.Array as Array
5import Data.Array.NonEmpty as NEA
6import Data.Maybe (Maybe(..), fromMaybe)
7import Data.Nullable (Nullable)
8import Data.Nullable as Nullable
9import Data.String as String
11import Effect.Unsafe (unsafePerformEffect)
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, useState)
20import React.Basic.Hooks as React
21import Yoga.Box.Component as Box
22import Yoga.CompileEditor.Component (mkCompileEditor)
23import Yoga.Compiler.Api (apiCompiler)
24import Yoga.FillInTheGaps.Component as FillInTheGaps
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
81mkSecret :: Effect ( ReactComponent { kids ∷ Array JSX , visible ∷ Boolean })
83 component "Secret" \{ kids, visible } -> React.do
86 { style: R.css { visibility: if visible then "visible" else "hidden" }
90mkMdxProviderComponent ∷
94 { children ∷ ReactChildren JSX
95 , siteInfo ∷ SiteQueryResult
98mkMdxProviderComponent fetchImpl = do
99 cssBaseline <- mkCssBaseline
100 editor <- mkCompileEditor fetchImpl
101 fillInTheGaps <- FillInTheGaps.makeComponent (apiCompiler fetchImpl)
102 box <- Box.makeComponent
105 yogaInlineCode <- InlineCode.makeComponent
111 $ jssClasses \(theme ∷ CSSTheme) ->
113 { fontFamily: theme.codeFontFamily # NEA.head
114 , backgroundColor: theme.interfaceColour
116 , border: "1px solid #383c39"
118 , borderRadius: "3px"
122 , flexDirection: "row"
125 componentWithChildren "MDXProviderComponent" \{ children, siteInfo } -> React.do
126 classes <- useStyles {}
127 sections <- useState []
129 baseline child = element cssBaseline { kids: child }
134 [ jsx header { className: "" } [ R.text siteInfo.site.siteMetadata.title ]
135 , element sidebar { links: siteInfo.site.siteMetadata.menuLinks }
136 , jsx box {} (reactChildrenToArray children)
143 element h ({ level: H2, text: props.children, className: Nothing })
146 element h { level: H3, text: props.children, className: Nothing }
149 element h { level: H4, text: props.children, className: Nothing }
153 { children: [ element p { text: props.children } ]
156 \props -> R.div_ [ R.text "HOUI" ]
159 R.span { className: classes.code, children: props.children }
161 \(props ∷ PreProps) -> do
163 childrenQ = Nullable.toMaybe props.children
165 propsQ = (_.props >>> Nullable.toMaybe) =<< childrenQ
167 mdxTypeQ = (_.mdxType >>> Nullable.toMaybe) =<< propsQ
169 childrenQ2 = (_.children >>> Nullable.toMaybe) =<< propsQ
171 classNameQ = (_.className >>> Nullable.toMaybe) =<< propsQ
173 isCode = fromMaybe false (mdxTypeQ <#> eq "code")
178 (fromMaybe 200 >>> show >>> (_ <> "px")) do
181 ( String.split (String.Pattern "\n") code
183 # \x -> (x * 12) + 100
186 language = fromMaybe "" (classNameQ >>= String.stripPrefix (String.Pattern "language-"))
187 case isCode, language of
188 true, "puregaps" -> element fillInTheGaps { code: fromMaybe "" codeQ }
191 { initialCode: fromMaybe "" codeQ
195 false, _ -> element (unsafeCreateDOMComponent "pre") props
199 [ element mdxProvider
203 , components: mdxComponents
208 withSidebar <- WithSidebar.makeComponent
211 $ jssClasses \(theme ∷ CSSTheme) ->
215 , flexDirection: "row"
220 component "Sidebar" \{ links } -> React.do
221 classes <- useStyles {}
223 $ element withSidebar
225 { sidebarChildren: [ R.div_ [ R.text "hahahaha" ] ]
226 , notSidebarChildren: [] ∷ Array JSX
230foreign import mdxProvider ∷
233 { components ∷ { | r } -- TODO Don't lie
234 , 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