@@ -1,11 +1,13 @@
1module PSLayout where
1module PSLayout where
3import Prelude
3import Prelude
4import Data.Array as A
5import Data.Array as A
5import Data.Array as Array
6import Data.Array as Array
6import Data.Array.NonEmpty as NEA
7import Data.Array.NonEmpty as NEA
8+import Data.Function.Uncurried (mkFn2)
7−import Data.Maybe (Maybe(..), fromMaybe)
9+import Data.Maybe (Maybe(..), fromMaybe, isJust)
8−import Data.Nullable (Nullable)
10+import Data.Nullable (Nullable, toMaybe)
9import Data.Nullable as Nullable
11import Data.Nullable as Nullable
10import Data.String as String
12import Data.String as String
11import Data.Tuple.Nested ((/\))
13import Data.Tuple.Nested ((/\))
@@ -14,7 +16,7 @@ import Effect (Effect)
14import JSS (jss, jssClasses)
16import JSS (jss, jssClasses)
15import Justifill (justifill)
17import Justifill (justifill)
16import Milkis.Impl (FetchImpl)
18import Milkis.Impl (FetchImpl)
17−import React.Basic (JSX, ReactComponent)
19+import React.Basic (JSX, ReactComponent, fragment)
18import React.Basic.DOM (unsafeCreateDOMComponent)
20import React.Basic.DOM (unsafeCreateDOMComponent)
19import React.Basic.DOM as R
21import React.Basic.DOM as R
20import React.Basic.Helpers (jsx)
22import React.Basic.Helpers (jsx)
@@ -24,8 +26,9 @@ import Unsafe.Coerce (unsafeCoerce)
24import Yoga.Box.Component as Box
26import Yoga.Box.Component as Box
25import Yoga.CompileEditor.Component (mkCompileEditor)
27import Yoga.CompileEditor.Component (mkCompileEditor)
26import Yoga.Compiler.Api (apiCompiler)
28import Yoga.Compiler.Api (apiCompiler)
29+import Yoga.Compiler.Types (Compiler)
27import Yoga.FillInTheGaps.Component as FillInTheGaps
30import Yoga.FillInTheGaps.Component as FillInTheGaps
28−import Yoga.FillInTheGaps.Logic (parseSegments)
31+import Yoga.FillInTheGaps.Logic (complete, parseSegments)
29import Yoga.Header.Component (mkHeader)
32import Yoga.Header.Component (mkHeader)
30import Yoga.Helpers ((?||))
33import Yoga.Helpers ((?||))
31import Yoga.InlineCode.Component as InlineCode
34import Yoga.InlineCode.Component as InlineCode
@@ -70,7 +73,7 @@ mkLayout ∷
71mkLayout fetchImpl = do
74mkLayout fetchImpl = do
72 themeProvider <- mkThemeProvider
75 themeProvider <- mkThemeProvider
73− mdxProviderComponent <- mkMdxProviderComponent fetchImpl
76+ mdxProviderComponent <- mkMdxProviderComponent (apiCompiler fetchImpl)
74 componentWithChildren "MDXLayout" \{ children, siteInfo } -> React.do
77 componentWithChildren "MDXLayout" \{ children, siteInfo } -> React.do
76 $ element themeProvider
79 $ element themeProvider
@@ -96,16 +99,17 @@ mkSecret = do
98mkMdxProviderComponent ∷
101mkMdxProviderComponent ∷
99− FetchImpl ->
102+ ∀ r.
101 ( ReactComponent
105 ( ReactComponent
102 { children ∷ ReactChildren JSX
106 { children ∷ ReactChildren JSX
103 , siteInfo ∷ SiteQueryResult
107 , siteInfo ∷ SiteQueryResult
106−mkMdxProviderComponent fetchImpl = do
110+mkMdxProviderComponent compiler = do
107 cssBaseline <- mkCssBaseline
111 cssBaseline <- mkCssBaseline
108− editor <- mkCompileEditor fetchImpl
112+ editor <- mkCompileEditor compiler
109 fillInTheGaps <- FillInTheGaps.makeComponent
113 fillInTheGaps <- FillInTheGaps.makeComponent
110 box <- Box.makeComponent
114 box <- Box.makeComponent
111 sidebar <- mkSidebar
115 sidebar <- mkSidebar
@@ -132,18 +136,14 @@ mkMdxProviderComponent fetchImpl = do
133 componentWithChildren "MDXProviderComponent" \{ children, siteInfo } -> React.do
137 componentWithChildren "MDXProviderComponent" \{ children, siteInfo } -> React.do
134 classes <- useStyles {}
138 classes <- useStyles {}
135− visibleThroughKey /\ updateVisible <- useState ""
139+ visibleThrough /\ updateVisible <- useState 1
137 baseline child = element cssBaseline { kids: child }
141 baseline child = element cssBaseline { kids: child }
139 kids = reactChildrenToArray children
143 kids = reactChildrenToArray children
141 visibleKids =
145 visibleKids =
142− spy "visibleKids"
146+ TODO
144− i <- kids # A.findIndex (\x -> (unsafeCoerce x).key == visibleThroughKey)
145− pure $ A.take (i + 1) kids
147 siteInfoJSX =
147 siteInfoJSX =
149 { children:
149 { children:
@@ -163,13 +163,12 @@ mkMdxProviderComponent fetchImpl = do
164 \props ->
164 \props ->
165 element h { level: H4, text: props.children, className: Nothing }
165 element h { level: H4, text: props.children, className: Nothing }
166+ , hr: (const $ R.hr {})
167 \props ->
168 \props ->
169 { children: [ element p { text: props.children } ]
170 { children: [ element p { text: props.children } ]
172− -- \props -> jsx secret { register: updateSections (Map.insert ) }
173 , inlineCode:
172 , inlineCode:
174 \props -> do
173 \props -> do
175 R.span { className: classes.code, children: props.children }
174 R.span { className: classes.code, children: props.children }
@@ -200,23 +199,35 @@ mkMdxProviderComponent fetchImpl = do
202 language = fromMaybe "" (classNameQ >>= String.stripPrefix (String.Pattern "language-"))
201 language = fromMaybe "" (classNameQ >>= String.stripPrefix (String.Pattern "language-"))
203+ segmentsQ = parseSegments (codeQ ?|| "")
203− case isCode, language of
204+ case isCode, language, segmentsQ of
204− true, "puregaps" ->
205+ true, "purescript", Just initialSegments ->
205− element fillInTheGaps
207+ [ element fillInTheGaps
206− { initialSegments: parseSegments (codeQ ?|| "")
208+ { initialSegments
207− , update: \segs -> pure unit
209+ , update:
211+ when (complete segs)
213+ (\_ -> spy "setting key to" (unsafeCoerce props).key)
209− true, _ ->
216+ true, _, _ ->
210 element editor
217 element editor
211 { initialCode: fromMaybe "" codeQ
218 { initialCode: fromMaybe "" codeQ
213 , language
220 , language
215− false, _ -> element (unsafeCreateDOMComponent "pre") props
222+ false, _, _ -> element (unsafeCreateDOMComponent "pre") props
217 useEffect (A.length kids) do
224 useEffect (A.length kids) do
219− firstGaps = kids # A.find (\x -> (unsafeCoerce x).props.mdxType == "pre" && ((unsafeCoerce x).props.children.props.className == "language-puregaps")) <#> (\x -> (unsafeCoerce x).key)
226+ firstGaps = kids # A.find (\x -> (unsafeCoerce x).props.mdxType == "pre" &&
227+ ((unsafeCoerce x).props.children.props.className == "language-purescript") &&
228+ ((unsafeCoerce x).props.children.props.mdxType == "code") &&
229+ ((unsafeCoerce x).props.children.props.children # parseSegments # isJust)
230+ ) <#> (\x -> spy "first boy" $ (unsafeCoerce x).key)
221 lastKey = kids # A.last # unsafeCoerce # _.key
232 lastKey = kids # A.last # unsafeCoerce # _.key
222 updateVisible (const (firstGaps ?|| lastKey))
233 updateVisible (const (firstGaps ?|| lastKey))