mirror of
https://github.com/laurent22/joplin.git
synced 2024-11-27 08:21:03 +02:00
Desktop: Fixed regression with Ace Editor list indentation, and cleaned up code
This commit is contained in:
parent
132c6543b2
commit
d41221bd90
@ -67,6 +67,7 @@ ElectronClient/gui/NoteEditor/NoteBody/AceEditor/styles/index.js
|
|||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/Toolbar.js
|
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/Toolbar.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/index.js
|
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/index.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/types.js
|
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/types.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/useListIdent.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
||||||
ElectronClient/gui/NoteEditor/NoteEditor.js
|
ElectronClient/gui/NoteEditor/NoteEditor.js
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -57,6 +57,7 @@ ElectronClient/gui/NoteEditor/NoteBody/AceEditor/styles/index.js
|
|||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/Toolbar.js
|
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/Toolbar.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/index.js
|
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/index.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/types.js
|
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/types.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/useListIdent.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
||||||
ElectronClient/gui/NoteEditor/NoteEditor.js
|
ElectronClient/gui/NoteEditor/NoteEditor.js
|
||||||
|
@ -6,6 +6,7 @@ import { EditorCommand, NoteBodyEditorProps } from '../../utils/types';
|
|||||||
import { commandAttachFileToBody } from '../../utils/resourceHandling';
|
import { commandAttachFileToBody } from '../../utils/resourceHandling';
|
||||||
import { ScrollOptions, ScrollOptionTypes } from '../../utils/types';
|
import { ScrollOptions, ScrollOptionTypes } from '../../utils/types';
|
||||||
import { textOffsetToCursorPosition, useScrollHandler, useRootWidth, usePrevious, lineLeftSpaces, selectionRangeCurrentLine, selectionRangePreviousLine, currentTextOffset, textOffsetSelection, selectedText, useSelectionRange } from './utils';
|
import { textOffsetToCursorPosition, useScrollHandler, useRootWidth, usePrevious, lineLeftSpaces, selectionRangeCurrentLine, selectionRangePreviousLine, currentTextOffset, textOffsetSelection, selectedText, useSelectionRange } from './utils';
|
||||||
|
import useListIdent from './utils/useListIdent';
|
||||||
import Toolbar from './Toolbar';
|
import Toolbar from './Toolbar';
|
||||||
import styles_ from './styles';
|
import styles_ from './styles';
|
||||||
import { RenderedBody, defaultRenderedBody } from './utils/types';
|
import { RenderedBody, defaultRenderedBody } from './utils/types';
|
||||||
@ -88,7 +89,6 @@ function AceEditor(props: NoteBodyEditorProps, ref: any) {
|
|||||||
const editorRef = useRef(null);
|
const editorRef = useRef(null);
|
||||||
editorRef.current = editor;
|
editorRef.current = editor;
|
||||||
const rootRef = useRef(null);
|
const rootRef = useRef(null);
|
||||||
const indentOrig = useRef<any>(null);
|
|
||||||
const webviewRef = useRef(null);
|
const webviewRef = useRef(null);
|
||||||
const props_onChangeRef = useRef<Function>(null);
|
const props_onChangeRef = useRef<Function>(null);
|
||||||
props_onChangeRef.current = props.onChange;
|
props_onChangeRef.current = props.onChange;
|
||||||
@ -105,6 +105,8 @@ function AceEditor(props: NoteBodyEditorProps, ref: any) {
|
|||||||
|
|
||||||
const { resetScroll, setEditorPercentScroll, setViewerPercentScroll, editor_scroll } = useScrollHandler(editor, webviewRef, props.onScroll);
|
const { resetScroll, setEditorPercentScroll, setViewerPercentScroll, editor_scroll } = useScrollHandler(editor, webviewRef, props.onScroll);
|
||||||
|
|
||||||
|
useListIdent({ editor, selectionRangeRef });
|
||||||
|
|
||||||
const aceEditor_change = useCallback((newBody: string) => {
|
const aceEditor_change = useCallback((newBody: string) => {
|
||||||
props_onChangeRef.current({ changeId: null, content: newBody });
|
props_onChangeRef.current({ changeId: null, content: newBody });
|
||||||
}, []);
|
}, []);
|
||||||
@ -446,8 +448,6 @@ function AceEditor(props: NoteBodyEditorProps, ref: any) {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!editor) return () => {};
|
if (!editor) return () => {};
|
||||||
|
|
||||||
editor.indent = indentOrig.current;
|
|
||||||
|
|
||||||
const cancelledKeys = [];
|
const cancelledKeys = [];
|
||||||
const letters = ['F', 'T', 'P', 'Q', 'L', ',', 'G', 'K'];
|
const letters = ['F', 'T', 'P', 'Q', 'L', ',', 'G', 'K'];
|
||||||
for (let i = 0; i < letters.length; i++) {
|
for (let i = 0; i < letters.length; i++) {
|
||||||
@ -499,36 +499,6 @@ function AceEditor(props: NoteBodyEditorProps, ref: any) {
|
|||||||
};
|
};
|
||||||
}, [editor, onEditorPaste, onEditorContextMenu, lastKeys]);
|
}, [editor, onEditorPaste, onEditorContextMenu, lastKeys]);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (!editor) return;
|
|
||||||
|
|
||||||
// Markdown list indentation. (https://github.com/laurent22/joplin/pull/2713)
|
|
||||||
// If the current line starts with `markup.list` token,
|
|
||||||
// hitting `Tab` key indents the line instead of inserting tab at cursor.
|
|
||||||
indentOrig.current = editor.indent;
|
|
||||||
const localIndentOrig = indentOrig.current;
|
|
||||||
editor.indent = function() {
|
|
||||||
const range = selectionRangeRef.current;
|
|
||||||
if (range.isEmpty()) {
|
|
||||||
const row = range.start.row;
|
|
||||||
const tokens = this.session.getTokens(row);
|
|
||||||
|
|
||||||
if (tokens.length > 0 && tokens[0].type == 'markup.list') {
|
|
||||||
if (tokens[0].value.search(/\d+\./) != -1) {
|
|
||||||
// Resets numbered list to 1.
|
|
||||||
this.session.replace({ start: { row, column: 0 }, end: { row, column: tokens[0].value.length } },
|
|
||||||
tokens[0].value.replace(/\d+\./, '1.'));
|
|
||||||
}
|
|
||||||
|
|
||||||
this.session.indentRows(row, row, '\t');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
localIndentOrig.call(this);
|
|
||||||
};
|
|
||||||
}, [editor]);
|
|
||||||
|
|
||||||
const webview_domReady = useCallback(() => {
|
const webview_domReady = useCallback(() => {
|
||||||
setWebviewReady(true);
|
setWebviewReady(true);
|
||||||
}, []);
|
}, []);
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
import { useEffect } from 'react';
|
||||||
|
|
||||||
|
interface HookDependencies {
|
||||||
|
editor: any,
|
||||||
|
selectionRangeRef: any,
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function useListIdent(dependencies:HookDependencies) {
|
||||||
|
const { editor, selectionRangeRef } = dependencies;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!editor) return;
|
||||||
|
|
||||||
|
// Markdown list indentation. (https://github.com/laurent22/joplin/pull/2713)
|
||||||
|
// If the current line starts with `markup.list` token,
|
||||||
|
// hitting `Tab` key indents the line instead of inserting tab at cursor.
|
||||||
|
const originalEditorIndent = editor.indent;
|
||||||
|
|
||||||
|
editor.indent = function() {
|
||||||
|
const range = selectionRangeRef.current;
|
||||||
|
if (range.isEmpty()) {
|
||||||
|
const row = range.start.row;
|
||||||
|
const tokens = this.session.getTokens(row);
|
||||||
|
|
||||||
|
if (tokens.length > 0 && tokens[0].type == 'markup.list') {
|
||||||
|
if (tokens[0].value.search(/\d+\./) != -1) {
|
||||||
|
// Resets numbered list to 1.
|
||||||
|
this.session.replace({ start: { row, column: 0 }, end: { row, column: tokens[0].value.length } },
|
||||||
|
tokens[0].value.replace(/\d+\./, '1.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.session.indentRows(row, row, '\t');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (originalEditorIndent) originalEditorIndent.call(this);
|
||||||
|
};
|
||||||
|
}, [editor]);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user