1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-24 10:27:10 +02:00

Mobile: Fixes #9532: Fix cursor location on opening the editor and attachments inserted in wrong location (#9536)

This commit is contained in:
Henry Heino 2023-12-17 12:58:22 -08:00 committed by GitHub
parent 815a0a5db4
commit d4157e14fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 11 deletions

View File

@ -270,6 +270,7 @@ function NoteEditor(props: Props, ref: any) {
const setInitialSelectionJS = props.initialSelection ? ` const setInitialSelectionJS = props.initialSelection ? `
cm.select(${props.initialSelection.start}, ${props.initialSelection.end}); cm.select(${props.initialSelection.start}, ${props.initialSelection.end});
cm.execCommand('scrollSelectionIntoView');
` : ''; ` : '';
const editorSettings: EditorSettings = { const editorSettings: EditorSettings = {
@ -331,6 +332,7 @@ function NoteEditor(props: Props, ref: any) {
const settings = ${JSON.stringify(editorSettings)}; const settings = ${JSON.stringify(editorSettings)};
cm = codeMirrorBundle.initCodeMirror(parentElement, initialText, settings); cm = codeMirrorBundle.initCodeMirror(parentElement, initialText, settings);
${setInitialSelectionJS} ${setInitialSelectionJS}
window.onresize = () => { window.onresize = () => {

View File

@ -10,6 +10,7 @@ import NoteEditor from '../NoteEditor/NoteEditor';
const FileViewer = require('react-native-file-viewer').default; const FileViewer = require('react-native-file-viewer').default;
const React = require('react'); const React = require('react');
const { Keyboard, View, TextInput, StyleSheet, Linking, Image, Share } = require('react-native'); const { Keyboard, View, TextInput, StyleSheet, Linking, Image, Share } = require('react-native');
import type { NativeSyntheticEvent } from 'react-native';
import { Platform, PermissionsAndroid } from 'react-native'; import { Platform, PermissionsAndroid } from 'react-native';
const { connect } = require('react-redux'); const { connect } = require('react-redux');
// const { MarkdownEditor } = require('@joplin/lib/../MarkdownEditor/index.js'); // const { MarkdownEditor } = require('@joplin/lib/../MarkdownEditor/index.js');
@ -50,8 +51,9 @@ import isEditableResource from '../NoteEditor/ImageEditor/isEditableResource';
import VoiceTypingDialog from '../voiceTyping/VoiceTypingDialog'; import VoiceTypingDialog from '../voiceTyping/VoiceTypingDialog';
import { voskEnabled } from '../../services/voiceTyping/vosk'; import { voskEnabled } from '../../services/voiceTyping/vosk';
import { isSupportedLanguage } from '../../services/voiceTyping/vosk.android'; import { isSupportedLanguage } from '../../services/voiceTyping/vosk.android';
import { ChangeEvent as EditorChangeEvent, UndoRedoDepthChangeEvent } from '@joplin/editor/events'; import { ChangeEvent as EditorChangeEvent, SelectionRangeChangeEvent, UndoRedoDepthChangeEvent } from '@joplin/editor/events';
import { join } from 'path'; import { join } from 'path';
import { SelectionRange } from '../NoteEditor/types';
const urlUtils = require('@joplin/lib/urlUtils'); const urlUtils = require('@joplin/lib/urlUtils');
// import Vosk from 'react-native-vosk'; // import Vosk from 'react-native-vosk';
@ -64,6 +66,7 @@ class NoteScreenComponent extends BaseScreenComponent {
// This isn't in this.state because we don't want changing scroll to trigger // This isn't in this.state because we don't want changing scroll to trigger
// a re-render. // a re-render.
private lastBodyScroll: number|undefined = undefined; private lastBodyScroll: number|undefined = undefined;
private selection: SelectionRange;
public static navigationOptions(): any { public static navigationOptions(): any {
return { header: null }; return { header: null };
@ -251,7 +254,6 @@ class NoteScreenComponent extends BaseScreenComponent {
this.undoRedoService_stackChange = this.undoRedoService_stackChange.bind(this); this.undoRedoService_stackChange = this.undoRedoService_stackChange.bind(this);
this.screenHeader_undoButtonPress = this.screenHeader_undoButtonPress.bind(this); this.screenHeader_undoButtonPress = this.screenHeader_undoButtonPress.bind(this);
this.screenHeader_redoButtonPress = this.screenHeader_redoButtonPress.bind(this); this.screenHeader_redoButtonPress = this.screenHeader_redoButtonPress.bind(this);
this.body_selectionChange = this.body_selectionChange.bind(this);
this.onBodyViewerLoadEnd = this.onBodyViewerLoadEnd.bind(this); this.onBodyViewerLoadEnd = this.onBodyViewerLoadEnd.bind(this);
this.onBodyViewerCheckboxChange = this.onBodyViewerCheckboxChange.bind(this); this.onBodyViewerCheckboxChange = this.onBodyViewerCheckboxChange.bind(this);
this.onBodyChange = this.onBodyChange.bind(this); this.onBodyChange = this.onBodyChange.bind(this);
@ -520,13 +522,13 @@ class NoteScreenComponent extends BaseScreenComponent {
this.scheduleSave(); this.scheduleSave();
} }
private body_selectionChange(event: any) { private onPlainEdtiorSelectionChange = (event: NativeSyntheticEvent<any>) => {
if (this.useEditorBeta()) { this.selection = event.nativeEvent.selection;
this.selection = event.selection; };
} else {
this.selection = event.nativeEvent.selection; private onMarkdownEditorSelectionChange = (event: SelectionRangeChangeEvent) => {
} this.selection = { start: event.from, end: event.to };
} };
public makeSaveAction() { public makeSaveAction() {
return async () => { return async () => {
@ -1392,7 +1394,7 @@ class NoteScreenComponent extends BaseScreenComponent {
multiline={true} multiline={true}
value={note.body} value={note.body}
onChangeText={(text: string) => this.body_changeText(text)} onChangeText={(text: string) => this.body_changeText(text)}
onSelectionChange={this.body_selectionChange} onSelectionChange={this.onPlainEdtiorSelectionChange}
blurOnSubmit={false} blurOnSubmit={false}
selectionColor={theme.textSelectionColor} selectionColor={theme.textSelectionColor}
keyboardAppearance={theme.keyboardAppearance} keyboardAppearance={theme.keyboardAppearance}
@ -1413,7 +1415,7 @@ class NoteScreenComponent extends BaseScreenComponent {
initialText={note.body} initialText={note.body}
initialSelection={this.selection} initialSelection={this.selection}
onChange={this.onBodyChange} onChange={this.onBodyChange}
onSelectionChange={this.body_selectionChange} onSelectionChange={this.onMarkdownEditorSelectionChange}
onUndoRedoDepthChange={this.onUndoRedoDepthChange} onUndoRedoDepthChange={this.onUndoRedoDepthChange}
onAttach={() => this.showAttachMenu()} onAttach={() => this.showAttachMenu()}
readOnly={this.state.readOnly} readOnly={this.state.readOnly}