update autocomplete

This commit is contained in:
2023-05-04 23:00:37 +02:00
parent 82e4f25b04
commit e606296585

View File

@@ -68,7 +68,7 @@ export default class ContextedLinkEditing extends Plugin {
_addAutocomplete() { _addAutocomplete() {
// Copied from: node_modules/@ckeditor/ckeditor5-autoformat/src/inlineautoformatediting.js // Copied from: node_modules/@ckeditor/ckeditor5-autoformat/src/inlineautoformatediting.js
const editor = this.editor const editor = this.editor
// let autocomplete = false let showAutocomplete = false
editor.model.document.on('change', (_, batch) => { editor.model.document.on('change', (_, batch) => {
if (batch.isUndo || !batch.isLocal) return if (batch.isUndo || !batch.isLocal) return
const model = editor.model const model = editor.model
@@ -81,11 +81,12 @@ export default class ContextedLinkEditing extends Plugin {
if ( if (
changes.length != 1 || changes.length != 1 ||
(entry.type !== 'insert' && entry.type !== 'remove') || (entry.type !== 'insert' && entry.type !== 'remove') ||
entry.name != '$text' || (entry.name != '$text' && entry.name != 'paragraph') ||
entry.length != 1 entry.length != 1
) { ) {
return return
} }
const focus = selection.focus const focus = selection.focus
const block = focus?.parent const block = focus?.parent
if (!block || !focus) return if (!block || !focus) return
@@ -99,6 +100,7 @@ export default class ContextedLinkEditing extends Plugin {
const autocompleteNode: any = cursorNodes.find((node) => const autocompleteNode: any = cursorNodes.find((node) =>
node?.hasAttribute('autocomplete') node?.hasAttribute('autocomplete')
) )
interface AutocompleteEvent { interface AutocompleteEvent {
position?: any position?: any
autocompleteText?: string autocompleteText?: string
@@ -107,9 +109,14 @@ export default class ContextedLinkEditing extends Plugin {
if (Boolean(autocompleteText) || Boolean(autocompleteNode)) { if (Boolean(autocompleteText) || Boolean(autocompleteNode)) {
if (Boolean(autocompleteText) !== Boolean(autocompleteNode)) { if (Boolean(autocompleteText) !== Boolean(autocompleteNode)) {
editor.execute('autocomplete') editor.execute('autocomplete')
if (autocompleteNode) if (autocompleteNode) {
editor.model.document.fire('contextedLinkAutocomplete', { show: false }) showAutocomplete = false
editor.model.document.fire('contextedLinkAutocomplete', {
show: showAutocomplete,
})
}
} else { } else {
showAutocomplete = true
const event: AutocompleteEvent = { const event: AutocompleteEvent = {
position: getNodePosition( position: getNodePosition(
editor, editor,
@@ -119,11 +126,17 @@ export default class ContextedLinkEditing extends Plugin {
) )
), ),
autocompleteText: autocompleteNode.data, autocompleteText: autocompleteNode.data,
show: true, show: showAutocomplete,
} }
editor.model.document.fire('contextedLinkAutocomplete', event) editor.model.document.fire('contextedLinkAutocomplete', event)
} }
} }
if (!autocompleteNode && showAutocomplete) {
showAutocomplete = false
editor.model.document.fire('contextedLinkAutocomplete', {
show: showAutocomplete,
})
}
}) })
} }
} }