Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/components/PreferencesModal/GeneralTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ const GeneralTab = () => {
onChange={selectLanguage}
>
<option value='en-US'>English (US)</option>
<option value='ja'>Japanese</option>
<option value='ja'>日本語</option>
</select>
</SectionControl>
</Section>
Expand Down
31 changes: 31 additions & 0 deletions src/components/PreferencesModal/MarkdownTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { SelectChangeEventHandler } from '../../lib/events'
import { themes } from '../../lib/CodeMirror'
import { capitalize } from '../../lib/string'
import { useTranslation } from 'react-i18next'
import { usePreviewStyle, defaultPreviewStyle } from '../../lib/preview'

const defaultPreviewContent = `# hello-world.js

Expand All @@ -26,6 +27,24 @@ const PreviewContainer = styled.div`
`

const MarkdownTab = () => {
const { previewStyle, setPreviewStyle } = usePreviewStyle()
const [newPreviewStyle, setNewPreviewStyle] = useState(previewStyle)
const updatePreviewStyle = useCallback(
(newValue: string) => {
setNewPreviewStyle(newValue)
},
[setNewPreviewStyle]
)
const savePreviewStyle = useCallback(() => {
if (previewStyle !== newPreviewStyle) {
setPreviewStyle(newPreviewStyle)
}
}, [setPreviewStyle, newPreviewStyle, previewStyle])

const resetNewPreviewStyle = useCallback(() => {
setNewPreviewStyle(defaultPreviewStyle)
}, [setNewPreviewStyle])

const { preferences, setPreferences } = usePreferences()

const selectCodeFenceTheme: SelectChangeEventHandler = useCallback(
Expand All @@ -49,6 +68,18 @@ const MarkdownTab = () => {

return (
<div>
<Section>
<SectionHeader>{t('preferences.previewStyle')}</SectionHeader>
<SectionControl>
<button onClick={savePreviewStyle}>Save</button>
<button onClick={resetNewPreviewStyle}>Use default style</button>
<CustomizedCodeEditor
value={newPreviewStyle}
onChange={updatePreviewStyle}
mode='css'
/>
</SectionControl>
</Section>
<Section>
<SectionHeader>{t('preferences.markdownCodeBlockTheme')}</SectionHeader>
<SectionControl>
Expand Down
7 changes: 4 additions & 3 deletions src/components/atoms/CodeEditor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ const StyledContainer = styled.div`

const defaultCodeMirrorOptions: CodeMirror.EditorConfiguration = {
lineWrapping: true,
lineNumbers: true,
mode: 'markdown'
lineNumbers: true
}

interface CodeEditorProps {
Expand All @@ -33,6 +32,7 @@ interface CodeEditorProps {
indentType?: EditorIndentTypeOptions
indentSize?: EditorIndentSizeOptions
keyMap?: EditorKeyMapOptions
mode?: string
}

class CodeEditor extends React.Component<CodeEditorProps> {
Expand All @@ -51,7 +51,8 @@ class CodeEditor extends React.Component<CodeEditorProps> {
indentWithTabs: this.props.indentType === 'tab',
indentUnit: indentSize,
tabSize: indentSize,
keyMap
keyMap,
mode: this.props.mode || 'markdown'
})
this.codeMirror.on('change', this.handleCodeMirrorChange)
window.addEventListener('codemirror-mode-load', this.reloadMode)
Expand Down
5 changes: 4 additions & 1 deletion src/components/atoms/CustomizedCodeEditor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@ interface CustomizedCodeEditor {
) => void
codeMirrorRef?: (codeMirror: CodeMirror.EditorFromTextArea) => void
className?: string
mode?: string
}

const CustomizedCodeEditor = ({
onChange,
value,
codeMirrorRef,
className
className,
mode
}: CustomizedCodeEditor) => {
const { preferences } = usePreferences()
return (
Expand All @@ -31,6 +33,7 @@ const CustomizedCodeEditor = ({
indentType={preferences['editor.indentType']}
indentSize={preferences['editor.indentSize']}
keyMap={preferences['editor.keyMap']}
mode={mode}
/>
)
}
Expand Down
3 changes: 3 additions & 0 deletions src/components/atoms/CustomizedMarkdownPreviewer.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import React from 'react'
import { usePreferences } from '../../lib/preferences'
import MarkdownPreviewer from './MarkdownPreviewer'
import { usePreviewStyle } from '../../lib/preview'

interface CustomizedMarkdownPreviewer {
content: string
Expand All @@ -10,11 +11,13 @@ const CustomizedMarkdownPreviewer = ({
content
}: CustomizedMarkdownPreviewer) => {
const { preferences } = usePreferences()
const { previewStyle } = usePreviewStyle()

return (
<MarkdownPreviewer
content={content}
theme={preferences['markdown.codeBlockTheme']}
style={previewStyle}
/>
)
}
Expand Down
24 changes: 15 additions & 9 deletions src/components/atoms/MarkdownPreviewer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import CodeMirror from '../../lib/CodeMirror'
import h from 'hastscript'
import useForceUpdate from 'use-force-update'
import styled from '../../lib/styled'
import { githubPreviewStyle } from '../../lib/preview'

const schema = mergeDeepRight(gh, { attributes: { '*': ['className'] } })

Expand Down Expand Up @@ -150,19 +149,17 @@ function createMarkdownProcessor(options: MarkdownProcessorOptions = {}) {
.use(rehypeReact, { createElement: React.createElement })
}

const StyledContainer = styled.div`
.CodeMirror {
height: inherit;
}
${githubPreviewStyle}
`

interface MarkdownPreviewerProps {
content: string
theme?: string
style?: string
}

const MarkdownPreviewer = ({ content, theme }: MarkdownPreviewerProps) => {
const MarkdownPreviewer = ({
content,
theme,
style
}: MarkdownPreviewerProps) => {
const forceUpdate = useForceUpdate()
const [rendering, setRendering] = useState(false)
const previousContentRef = useRef('')
Expand Down Expand Up @@ -209,6 +206,15 @@ const MarkdownPreviewer = ({ content, theme }: MarkdownPreviewerProps) => {
renderContent(content)
}, [content, theme, rendering, renderContent, renderedContent])

const StyledContainer = useMemo(() => {
return styled.div`
.CodeMirror {
height: inherit;
}
${style}
`
}, [style])

return (
<StyledContainer className='MarkdownPreviewer'>
{rendering && 'rendering...'}
Expand Down
2 changes: 2 additions & 0 deletions src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ import { combineProviders } from './lib/utils/context'
import { DbProvider } from './lib/db'
import { PreferencesProvider } from './lib/preferences'
import { GeneralStatusProvider } from './lib/generalStatus'
import { PreviewStyleProvider } from './lib/preview'

const CombinedProvider = combineProviders(
PreviewStyleProvider,
GeneralStatusProvider,
PreferencesProvider,
DialogProvider,
Expand Down
2 changes: 2 additions & 0 deletions src/lib/CodeMirror.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import CodeMirror from 'codemirror'
import 'codemirror/addon/runmode/runmode'
import 'codemirror/addon/mode/overlay'
import 'codemirror/addon/comment/comment'
import 'codemirror/mode/markdown/markdown'
import 'codemirror/mode/css/css'
import debounce from 'lodash/debounce'
import 'codemirror/lib/codemirror.css'
import 'codemirror/keymap/sublime'
Expand Down
1 change: 1 addition & 0 deletions src/lib/i18n/enUS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export default {
'preferences.editorPreview': 'Editor Preview',

// Preferences MarkdownTab
'preferences.previewStyle': 'Preview Style',
'preferences.markdownCodeBlockTheme': 'Code Block Theme'
}
}
1 change: 1 addition & 0 deletions src/lib/i18n/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export default {
'preferences.editorPreview': 'エディタープレヴュー',

// Preferences MarkdownTab
'preferences.previewStyle': 'プレビュースタイル',
'preferences.markdownCodeBlockTheme': 'コードブロックテーマ'
}
}
1 change: 1 addition & 0 deletions src/lib/localStorageKeys.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export const preferencesKey = 'note.boostio.co:preferences'
export const storageDataListKey = 'note.boostio.co:storageDataList'
export const generalStatusKey = 'note.boostio.co:generalStatusKey'
export const previewStyleKey = 'note.boostio.co:previewStyleKey'
Loading