Skip to content

Commit 01db168

Browse files
authored
Improve the way we update text checking features (#1333)
1 parent 40d90af commit 01db168

File tree

8 files changed

+62
-74
lines changed

8 files changed

+62
-74
lines changed

CoreEditor/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { WebModuleCoreImpl } from './src/bridge/web/core';
66
import { WebModuleCompletionImpl } from './src/bridge/web/completion';
77
import { WebModuleHistoryImpl } from './src/bridge/web/history';
88
import { WebModuleLineEndingsImpl } from './src/bridge/web/lineEndings';
9-
import { WebModuleTextCheckerImpl } from './src/bridge/web/textChecker';
109
import { WebModuleSelectionImpl } from './src/bridge/web/selection';
1110
import { WebModuleFormatImpl } from './src/bridge/web/format';
1211
import { WebModuleSearchImpl } from './src/bridge/web/search';
@@ -66,7 +65,6 @@ window.webModules = {
6665
completion: new WebModuleCompletionImpl(),
6766
history: new WebModuleHistoryImpl(),
6867
lineEndings: new WebModuleLineEndingsImpl(),
69-
textChecker: new WebModuleTextCheckerImpl(),
7068
selection: new WebModuleSelectionImpl(),
7169
format: new WebModuleFormatImpl(),
7270
search: new WebModuleSearchImpl(),

CoreEditor/src/bridge/web/textChecker.ts

Lines changed: 0 additions & 17 deletions
This file was deleted.

CoreEditor/src/core.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { getLineBreak, normalizeLineBreaks } from './modules/lineEndings';
1717
import { removeFrontMatter } from './modules/frontMatter';
1818
import { selectedMainText, scrollIntoView } from './modules/selection';
1919
import { markContentClean } from './modules/history';
20+
import { updateTextChecker } from './modules/textChecker';
2021

2122
import { TextEditor } from './api/editor';
2223
import { editorReadyListeners } from './api/methods';
@@ -104,6 +105,11 @@ export function resetEditor(initialContent: string) {
104105
const contentDOM = editor.contentDOM;
105106
contentDOM.addEventListener('blur', handleFocusLost);
106107

108+
updateTextChecker(contentDOM, {
109+
spellcheck: true,
110+
autocorrect: true,
111+
});
112+
107113
const scrollDOM = editor.scrollDOM;
108114
scrollDOM.scrollTo({ top: 0 }); // scrollIntoView doesn't work when the app is idle
109115

CoreEditor/src/modules/textChecker/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ import TextCheckerOptions from './options';
33
/**
44
* Div level text checker settings.
55
*/
6-
export function update(options: TextCheckerOptions) {
7-
const contentDOM = window.editor.contentDOM;
6+
export function updateTextChecker(contentDOM: HTMLElement, options: TextCheckerOptions) {
87
contentDOM.setAttribute('spellcheck', options.spellcheck ? 'true' : 'false');
98
contentDOM.setAttribute('autocorrect', options.autocorrect ? 'on' : 'off');
109

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { describe, expect, test } from '@jest/globals';
2+
import { updateTextChecker } from '../src/modules/textChecker';
3+
4+
function createContentDOM(): HTMLElement {
5+
const div = document.createElement('div');
6+
div.setAttribute('autocomplete', 'on');
7+
div.setAttribute('autocapitalize', 'on');
8+
return div;
9+
}
10+
11+
describe('TextChecker test suite', () => {
12+
test('test spellcheck and autocorrect enabled', () => {
13+
const dom = createContentDOM();
14+
updateTextChecker(dom, { spellcheck: true, autocorrect: true });
15+
16+
expect(dom.getAttribute('spellcheck')).toBe('true');
17+
expect(dom.getAttribute('autocorrect')).toBe('on');
18+
expect(dom.hasAttribute('autocomplete')).toBe(false);
19+
expect(dom.hasAttribute('autocapitalize')).toBe(false);
20+
});
21+
22+
test('test spellcheck and autocorrect disabled', () => {
23+
const dom = createContentDOM();
24+
updateTextChecker(dom, { spellcheck: false, autocorrect: false });
25+
26+
expect(dom.getAttribute('spellcheck')).toBe('false');
27+
expect(dom.getAttribute('autocorrect')).toBe('off');
28+
expect(dom.hasAttribute('autocomplete')).toBe(false);
29+
expect(dom.hasAttribute('autocapitalize')).toBe(false);
30+
});
31+
32+
test('test mixed options', () => {
33+
const dom = createContentDOM();
34+
updateTextChecker(dom, { spellcheck: true, autocorrect: false });
35+
36+
expect(dom.getAttribute('spellcheck')).toBe('true');
37+
expect(dom.getAttribute('autocorrect')).toBe('off');
38+
});
39+
40+
test('test autocomplete and autocapitalize are removed', () => {
41+
const dom = createContentDOM();
42+
expect(dom.hasAttribute('autocomplete')).toBe(true);
43+
expect(dom.hasAttribute('autocapitalize')).toBe(true);
44+
45+
updateTextChecker(dom, { spellcheck: false, autocorrect: false });
46+
47+
expect(dom.hasAttribute('autocomplete')).toBe(false);
48+
expect(dom.hasAttribute('autocapitalize')).toBe(false);
49+
});
50+
});

MarkEditKit/Sources/Bridge/Web/Generated/WebBridgeTextChecker.swift

Lines changed: 0 additions & 42 deletions
This file was deleted.

MarkEditKit/Sources/Bridge/Web/WebModuleBridge.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public struct WebModuleBridge {
1616
public let completion: WebBridgeCompletion
1717
public let history: WebBridgeHistory
1818
public let lineEndings: WebBridgeLineEndings
19-
public let textChecker: WebBridgeTextChecker
2019
public let selection: WebBridgeSelection
2120
public let format: WebBridgeFormat
2221
public let search: WebBridgeSearch
@@ -31,7 +30,6 @@ public struct WebModuleBridge {
3130
self.completion = WebBridgeCompletion(webView: webView)
3231
self.history = WebBridgeHistory(webView: webView)
3332
self.lineEndings = WebBridgeLineEndings(webView: webView)
34-
self.textChecker = WebBridgeTextChecker(webView: webView)
3533
self.selection = WebBridgeSelection(webView: webView)
3634
self.format = WebBridgeFormat(webView: webView)
3735
self.search = WebBridgeSearch(webView: webView)

MarkEditMac/Sources/Editor/Controllers/EditorViewController.swift

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -320,17 +320,13 @@ extension EditorViewController {
320320
return
321321
}
322322

323-
bridge.core.resetEditor(text: textContent) { _ in
324-
self.webView.magnification = 1.0
325-
self.bridge.textChecker.update(options: TextCheckerOptions(
326-
spellcheck: true,
327-
autocorrect: true
328-
))
323+
bridge.core.resetEditor(text: textContent) { [weak self] _ in
324+
self?.webView.magnification = 1.0
329325

330326
// Initial content from scenarios like "CreateNewDocumentIntent" or "New File from Clipboard"
331-
if let text = self.initialContent {
332-
self.prependTextContent(text)
333-
self.initialContent = nil
327+
if let text = self?.initialContent {
328+
self?.prependTextContent(text)
329+
self?.initialContent = nil
334330
}
335331
}
336332

0 commit comments

Comments
 (0)