Skip to content

Commit c30c958

Browse files
committed
make small stability improvements
1 parent 5669e22 commit c30c958

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

codejar.ts

+14-12
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ export function CodeJar(editor: HTMLElement, highlight: (e: HTMLElement, pos?: P
6666
if (editor.contentEditable !== 'plaintext-only') isLegacy = true
6767
if (isLegacy) editor.setAttribute('contenteditable', 'true')
6868

69+
recordHistory()
70+
6971
const debounceHighlight = debounce(() => {
7072
const pos = save()
7173
highlight(editor, pos)
@@ -105,10 +107,10 @@ export function CodeJar(editor: HTMLElement, highlight: (e: HTMLElement, pos?: P
105107

106108
function save(): Position {
107109
const s = getSelection()
108-
const pos: Position = {start: 0, end: 0, dir: undefined}
110+
const pos: Position = {start: 0, end: 0}
109111

110112
let {anchorNode, anchorOffset, focusNode, focusOffset} = s
111-
if (!anchorNode || !focusNode) throw 'error1'
113+
if (!anchorNode || !focusNode) return history[at]?.pos ?? pos
112114

113115
// Selection anchor and focus are expected to be text nodes,
114116
// so normalize them.
@@ -285,14 +287,7 @@ export function CodeJar(editor: HTMLElement, highlight: (e: HTMLElement, pos?: P
285287
if (isLegacy && event.key === 'Enter') {
286288
event.preventDefault()
287289
event.stopPropagation()
288-
if (aroundCursor().after === '') {
289-
insert('\n ')
290-
const pos = save()
291-
pos.start = --pos.end
292-
restore(pos)
293-
} else {
294-
insert('\n')
295-
}
290+
insert('\n')
296291
}
297292
}
298293

@@ -415,8 +410,13 @@ export function CodeJar(editor: HTMLElement, highlight: (e: HTMLElement, pos?: P
415410
function insert(text: string) {
416411
let {start} = save()
417412
const {before, after} = aroundCursor()
418-
editor.textContent = before + text + after
419413
start += text.length
414+
415+
// the last line break isn't shown and it can cause editing issues
416+
// so, add an extra line break in order to avoid those issues
417+
if (after === '' && text.endsWith('\n')) text += '\n'
418+
419+
editor.textContent = before + text + after
420420
restore({start, end: start})
421421
}
422422

@@ -452,7 +452,9 @@ export function CodeJar(editor: HTMLElement, highlight: (e: HTMLElement, pos?: P
452452
Object.assign(options, newOptions)
453453
},
454454
updateCode(code: string, callOnUpdate: boolean = true) {
455-
editor.textContent = code
455+
recordHistory()
456+
editor.textContent = ''
457+
insert(code)
456458
highlight(editor)
457459
if (callOnUpdate) onUpdate(code)
458460
},

0 commit comments

Comments
 (0)