5import Control.Promise (Promise)
6import Control.Promise as Promise
7import Data.Foldable (for_)
8import Data.Maybe (Maybe(..))
9import Data.Nullable (notNull, null)
10import Data.Tuple.Nested ((/\))
11import Debug.Trace (spy)
13import Effect.Aff (Aff)
14import Effect.Class (liftEffect)
15import Effect.Class.Console (warn)
16import Effect.Uncurried (EffectFn1, EffectFn2, mkEffectFn1, mkEffectFn2, runEffectFn1)
17import Foreign (Foreign)
18import Prim.Row (class Union)
19import React.Basic (JSX, ReactComponent, element, fragment)
20import React.Basic.DOM as R
21import React.Basic.Events (handler_)
22import React.Basic.Hooks (component, readRefMaybe, useRef, useState, writeRef)
23import React.Basic.Hooks as React
24import React.Basic.Hooks.Aff (useAff)
25import Simple.JSON as Foreign
31 , editorDidMount ∷ EffectFn2 Node Editor Unit
40foreign import editorImpl ∷ ∀ attrs. ReactComponent { | attrs }
42foreign import initMonacoImpl ∷ Effect (Promise Monaco)
44foreign import defineThemeImpl ∷ Monaco -> String -> MonacoTheme -> Effect Unit
46foreign import setThemeImpl ∷ Monaco -> String -> Effect Unit
48foreign import nightOwlTheme ∷ MonacoTheme
50foreign import getValue ∷ Editor -> Effect String
52foreign import data Monaco ∷ Type
54foreign import data Editor ∷ Type
56foreign import data MonacoTheme ∷ Type
59 ∀ attrs attrs_. Union attrs attrs_ EditorProps => ReactComponent { | attrs }
62initMonaco ∷ Aff Monaco
63initMonaco = liftEffect initMonacoImpl >>= Promise.toAff
67mkEditor ∷ Effect (ReactComponent {})
69 component "Editor" \{} -> React.do
74 defineThemeImpl monaco themeName nightOwlTheme # liftEffect
75 setThemeImpl monaco themeName # liftEffect
78 [ R.button { onClick: handler_ do
79 maybeEditor <- readRefMaybe ref
90 { fontFamily: "PragmataPro"
96 , lineDecorationsWidth: 0
97 , lineNumbersMinChars: 0
98 , minimap: { enabled: false }
100 , language: "haskell"
102 -- https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-custom-languages
104 mkEffectFn2 \node editor ->
105 (editor # notNull # writeRef ref)
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