git.iko.soy/rowtype-yoga/psfp
on master help sign in
Some work on markdown
commitdc3b89ea9f0cbb34cad11c1156b39e632d583d13 authorMark Eibes <mark.eibes@gmail.com> dateMon 6 Apr 2020, 23:08 (7 years ago) parent659e174
6 files changed+35−26
blog/.psc-ide-port+1−1 blog/src/components/FillInTheGaps.purs+9−11 blog/src/components/PSLayout.purs+12−8 blog/src/components/fillInTheGaps.js−2 blog/src/pages/optional.mdx+2−4 components/src/Yoga/Helpers.purs+11
blog/.psc-ide-port+1−1
@@ -1 +1 @@
1−15530
1+15750
blog/src/components/FillInTheGaps.purs+9−11
@@ -3,17 +3,17 @@ module FillInTheGaps where
33import Prelude
44
55import Data.Array as A
6−import Data.Maybe (Maybe(..), fromMaybe)
6+import Data.Maybe (fromMaybe)
77import Data.String (Pattern(..), split)
88import Data.Tuple.Nested ((/\))
99import Effect (Effect)
10−import Effect.Unsafe (unsafePerformEffect)
1110import Justifill (justifill)
1211import Partial.Unsafe (unsafeCrashWith)
1312import React.Basic (JSX, ReactComponent, element)
1413import React.Basic.DOM as R
15−import React.Basic.Hooks (ReactChildren, componentWithChildren, reactChildrenToArray, useState)
14+import React.Basic.Hooks (component, useState)
1615import React.Basic.Hooks as React
16+import Yoga.Helpers (intersperse)
1717import Yoga.InlineCode.Component as InlineCode
1818
1919data Segment = Filler String | Hole String
@@ -36,19 +36,17 @@ updateLine idx v arr = fromMaybe [] (A.modifyAt idx f arr)
3636 Filler s -> unsafeCrashWith "Updated a filler"
3737 Hole _ -> Hole v
3838
39−
40−fillInTheGaps :: ReactComponent { children :: ReactChildren String }
41−fillInTheGaps = unsafePerformEffect do
39+mkFillInTheGaps :: Effect (ReactComponent { code :: String })
40+mkFillInTheGaps = do
4241 ic <- InlineCode.makeComponent
43− componentWithChildren "InlineCodeWithChildren" \{ children } -> React.do
42+ component "FillInTheGaps" \{ code } -> React.do
4443 let
4544 separator = "???"
46− child = children # reactChildrenToArray # A.head # fromMaybe "gurki"
47− lines = split (Pattern "\n") child
48− rawSegments = split (Pattern separator)
45+ lines = split (Pattern "\n") code
46+ rawSegments = split (Pattern separator) >>> intersperse separator
4947 toSegment = case _ of
5048 x | x == separator -> Hole ""
5149 other -> Filler other
5250 initialSegments = lines <#> \line -> rawSegments line <#> toSegment
53− (segments :: Array (Array Segment)) /\ modifySegments <- useState initialSegments
51+ segments /\ modifySegments <- useState initialSegments
5452 pure $ renderSegments ic (modifySegments) segments
blog/src/components/PSLayout.purs+12−8
@@ -11,6 +11,7 @@ import Data.Nullable as Nullable
1111import Data.Semigroup.Foldable (intercalateMap)
1212import Data.String as String
1313import Effect (Effect)
14+import FillInTheGaps (mkFillInTheGaps)
1415import JSS (jss, jssClasses)
1516import Justifill (justifill)
1617import Milkis.Impl (FetchImpl)
@@ -88,6 +89,7 @@ mkMdxProviderComponent ∷
8889mkMdxProviderComponent fetchImpl = do
8990 cssBaseline <- mkCssBaseline
9091 editor <- mkCompileEditor fetchImpl
92+ fillInTheGaps <- mkFillInTheGaps
9193 sidebar <- mkSidebar
9294 header <- mkHeader
9395 yogaInlineCode <- InlineCode.makeComponent
@@ -168,14 +170,16 @@ mkMdxProviderComponent fetchImpl = do
168170 )
169171
170172 language = fromMaybe "" (classNameQ >>= String.stripPrefix (String.Pattern "language-"))
171− if isCode then
172− element editor
173− { initialCode: fromMaybe "" codeQ
174− , height
175− , language
176− }
177− else
178− element (unsafeCreateDOMComponent "pre") props
173+ case isCode, language of
174+ true, "puregaps" ->
175+ element fillInTheGaps { code: fromMaybe "" codeQ}
176+ true, _ ->
177+ element editor
178+ { initialCode: fromMaybe "" codeQ
179+ , height
180+ , language
181+ }
182+ false, _ -> element (unsafeCreateDOMComponent "pre") props
179183 }
180184 pure
181185 $ baseline
blog/src/components/fillInTheGaps.jsdeleted−2
@@ -1,2 +0,0 @@
1−const FillInTheGaps = require("./FillInTheGaps.purs").fillInTheGaps
2−export default FillInTheGaps;
blog/src/pages/optional.mdx+2−4
@@ -1,17 +1,15 @@
11import Layout from '../components/layout'
22import SEO from '../components/seo'
3−import FillInTheGaps from '../components/fillInTheGaps'
43
54<SEO title="Home" keywords={['gatsby', 'application', 'react']} />
65
76# Optional
87
9−<div>Udo</div>
10−<FillInTheGaps>module Main where
8+```puregaps
119import Batteries
1210
1311main :: Effect Unit
1412main = log "???"
15−</FillInTheGaps>
13+```
1614
1715## Hans Hölzel
components/src/Yoga/Helpers.purs+11
@@ -1,6 +1,7 @@
11module Yoga.Helpers where
22
33import Prelude
4+import Data.Array (head, tail, (:))
45import Data.Maybe (Maybe(..), fromMaybe)
56
67fromMaybeFlipped ∷ ∀ a. Maybe a -> a -> a
@@ -13,3 +14,13 @@ ifJustTrue option value = if option == Just true then value else mempty
1314
1415ifJustFalse ∷ ∀ m. Monoid m => Maybe Boolean -> m -> m
1516ifJustFalse option value = if option == Just false then value else mempty
17+
18+intersperse ∷ ∀ a. a -> Array a -> Array a
19+intersperse sep xs = case head xs, tail xs ?|| [] of
20+ Nothing, _ -> []
21+ Just x, xs' -> x : prependToAll sep xs'
22+
23+prependToAll ∷ ∀ a. a -> Array a -> Array a
24+prependToAll sep xs = case head xs, tail xs ?|| [] of
25+ Nothing, _ -> []
26+ Just x, xs' -> sep : x : prependToAll sep xs'