11import * as Range from "./methods/Range"
22import Debugger from "./components/Debugger"
3+ import isCtrlOrMetaKey from "lib/Client/isCtrlOrMetaKey"
34import React from "react"
45import Renderer from "./components/Renderer"
56import useDOMContentLoadedCallback from "lib/x/useDOMContentLoadedCallback"
67import useRichTextEditor from "./useRichTextEditor"
78import { parseRenderedChildren } from "./parsers"
89
10+ import "./RichTextEditor.css"
11+
912const RichTextEditor = ( { markup, children } ) => {
1013 const ref = React . useRef ( null )
1114 const pointerdownRef = React . useRef ( false )
@@ -15,6 +18,28 @@ const RichTextEditor = ({ markup, children }) => {
1518 // Disables read-only mode on DOMContentLoaded.
1619 useDOMContentLoadedCallback ( dispatch . disableReadOnlyMode )
1720
21+ // Binds ctrl-/ or cmd-/ to toggle display display
22+ // markdown mode. Does not use onKeyDown because of the
23+ // readWriteOnlyHandler pattern.
24+ React . useEffect (
25+ React . useCallback ( ( ) => {
26+ const handler = e => {
27+ if ( isCtrlOrMetaKey ( e ) && e . key === "/" ) {
28+ let toggle = dispatch . enableDisplayMarkdownMode
29+ if ( state . displayMarkdownModeEnabled ) {
30+ toggle = dispatch . disableDisplayMarkdownMode
31+ }
32+ toggle ( )
33+ }
34+ }
35+ document . addEventListener ( "keydown" , handler )
36+ return ( ) => {
37+ document . removeEventListener ( "keydown" , handler )
38+ }
39+ } , [ state , dispatch ] ) ,
40+ [ state . displayMarkdownModeEnabled ] ,
41+ )
42+
1843 // Returns a handler when read-only mode is disabled.
1944 const readWriteOnlyHandler = handler => {
2045 if ( state . readOnlyModeEnabled ) {
@@ -173,6 +198,8 @@ const RichTextEditor = ({ markup, children }) => {
173198 suppressContentEditableWarning = { ! state . readOnlyModeEnabled }
174199
175200 data-root
201+ data-read-only-mode = { state . readOnlyModeEnabled }
202+ data-display-markdown-mode = { state . displayMarkdownModeEnabled }
176203 >
177204 < Renderer
178205 forwardedRef = { ref }
@@ -190,8 +217,8 @@ const RichTextEditor = ({ markup, children }) => {
190217 // readOnlyModeEnabled
191218 // displayMarkdownModeEnabled
192219 // focused
193- // elements
194- // range
220+ elements
221+ range
195222 // shouldRerender
196223 />
197224
0 commit comments