Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
37e9fa2a0e |
@@ -40,6 +40,8 @@ export default function Editor({
|
|||||||
pref => pref >= 10 && pref <= 22
|
pref => pref >= 10 && pref <= 22
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const [wordWrap, setWordWrap] = usePreference<boolean>('wordwrap-enabled', true, (value) => true)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (contentType) {
|
if (contentType) {
|
||||||
setLanguage(contentType);
|
setLanguage(contentType);
|
||||||
@@ -66,6 +68,8 @@ export default function Editor({
|
|||||||
setReadOnly={setReadOnly}
|
setReadOnly={setReadOnly}
|
||||||
theme={theme}
|
theme={theme}
|
||||||
setTheme={setTheme}
|
setTheme={setTheme}
|
||||||
|
wordWrap={wordWrap}
|
||||||
|
setWordWrap={setWordWrap}
|
||||||
zoom={zoom}
|
zoom={zoom}
|
||||||
/>
|
/>
|
||||||
<EditorTextArea
|
<EditorTextArea
|
||||||
@@ -76,6 +80,7 @@ export default function Editor({
|
|||||||
language={language}
|
language={language}
|
||||||
fontSize={fontSize}
|
fontSize={fontSize}
|
||||||
readOnly={readOnly}
|
readOnly={readOnly}
|
||||||
|
wordWrap={wordWrap}
|
||||||
resetFunction={resetFunction}
|
resetFunction={resetFunction}
|
||||||
/>
|
/>
|
||||||
</ThemeProvider>
|
</ThemeProvider>
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ export interface EditorControlsProps {
|
|||||||
setReadOnly: (value: boolean) => void;
|
setReadOnly: (value: boolean) => void;
|
||||||
theme: keyof Themes;
|
theme: keyof Themes;
|
||||||
setTheme: (value: keyof Themes) => void;
|
setTheme: (value: keyof Themes) => void;
|
||||||
|
wordWrap: boolean
|
||||||
|
setWordWrap: (value: boolean) => void;
|
||||||
zoom: (delta: number) => void;
|
zoom: (delta: number) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,6 +33,8 @@ export default function EditorControls({
|
|||||||
setReadOnly,
|
setReadOnly,
|
||||||
theme,
|
theme,
|
||||||
setTheme,
|
setTheme,
|
||||||
|
wordWrap,
|
||||||
|
setWordWrap,
|
||||||
zoom,
|
zoom,
|
||||||
}: EditorControlsProps) {
|
}: EditorControlsProps) {
|
||||||
const [saving, setSaving] = useState<boolean>(false);
|
const [saving, setSaving] = useState<boolean>(false);
|
||||||
@@ -113,6 +117,7 @@ export default function EditorControls({
|
|||||||
<Section>
|
<Section>
|
||||||
<Button onClick={() => zoom(1)}>[+ </Button>
|
<Button onClick={() => zoom(1)}>[+ </Button>
|
||||||
<Button onClick={() => zoom(-1)}> -]</Button>
|
<Button onClick={() => zoom(-1)}> -]</Button>
|
||||||
|
<Button onClick={() => setWordWrap(!wordWrap)}>[<span className='optional'>wrap:</span>{wordWrap ? "on" : "off"}]</Button>
|
||||||
<MenuButton
|
<MenuButton
|
||||||
label="theme"
|
label="theme"
|
||||||
value={theme}
|
value={theme}
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ export interface EditorTextAreaProps {
|
|||||||
language: string;
|
language: string;
|
||||||
fontSize: number;
|
fontSize: number;
|
||||||
readOnly: boolean;
|
readOnly: boolean;
|
||||||
|
wordWrap: boolean;
|
||||||
resetFunction: MutableRefObject<ResetFunction | null>;
|
resetFunction: MutableRefObject<ResetFunction | null>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,6 +74,7 @@ export default function EditorTextArea({
|
|||||||
language,
|
language,
|
||||||
fontSize,
|
fontSize,
|
||||||
readOnly,
|
readOnly,
|
||||||
|
wordWrap,
|
||||||
resetFunction,
|
resetFunction,
|
||||||
}: EditorTextAreaProps) {
|
}: EditorTextAreaProps) {
|
||||||
const [editor, setEditor] = useState<editor.IStandaloneCodeEditor>();
|
const [editor, setEditor] = useState<editor.IStandaloneCodeEditor>();
|
||||||
@@ -166,7 +168,7 @@ export default function EditorTextArea({
|
|||||||
fontFamily: 'JetBrains Mono',
|
fontFamily: 'JetBrains Mono',
|
||||||
fontSize: fontSize,
|
fontSize: fontSize,
|
||||||
fontLigatures: true,
|
fontLigatures: true,
|
||||||
wordWrap: 'on',
|
wordWrap: wordWrap ? 'on' : 'off',
|
||||||
renderLineHighlight: 'none',
|
renderLineHighlight: 'none',
|
||||||
renderValidationDecorations: 'off',
|
renderValidationDecorations: 'off',
|
||||||
readOnly,
|
readOnly,
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ export default function usePreference<T>(
|
|||||||
const [value, setValue] = useState<T>(() => {
|
const [value, setValue] = useState<T>(() => {
|
||||||
const prefRaw = localStorage.getItem(id);
|
const prefRaw = localStorage.getItem(id);
|
||||||
const pref = prefRaw !== null ? (JSON.parse(prefRaw) as T) : undefined;
|
const pref = prefRaw !== null ? (JSON.parse(prefRaw) as T) : undefined;
|
||||||
if (pref && valid(pref)) {
|
if (pref !== null && pref !== undefined && valid(pref)) {
|
||||||
return pref;
|
return pref;
|
||||||
} else {
|
} else {
|
||||||
return defaultValue;
|
return defaultValue;
|
||||||
|
|||||||
Reference in New Issue
Block a user