diff --git a/src/ckeditor/ContextedPlugin.ts b/src/ckeditor/ContextedPlugin.ts index 64f7664..ec523bd 100644 --- a/src/ckeditor/ContextedPlugin.ts +++ b/src/ckeditor/ContextedPlugin.ts @@ -101,11 +101,6 @@ export default class ContextedLinkEditing extends Plugin { node?.hasAttribute('autocomplete') ) - interface AutocompleteEvent { - position?: any - autocompleteText?: string - show: boolean - } if (Boolean(autocompleteText) || Boolean(autocompleteNode)) { if (Boolean(autocompleteText) !== Boolean(autocompleteNode)) { editor.execute('autocomplete') @@ -117,6 +112,12 @@ export default class ContextedLinkEditing extends Plugin { } } else { showAutocomplete = true + const view = editor.editing.view + const viewPosition = view.document.selection.focus + const viewNode = viewPosition?.parent.parent + const domElement = viewNode + ? (view.domConverter.mapViewToDom(viewNode) as HTMLElement) + : undefined const event: AutocompleteEvent = { position: getNodePosition( editor, @@ -126,6 +127,7 @@ export default class ContextedLinkEditing extends Plugin { ) ), autocompleteText: autocompleteNode.data, + domElement, show: showAutocomplete, } editor.model.document.fire('contextedLinkAutocomplete', event) @@ -148,7 +150,7 @@ function getNodePosition(editor: any, modelPosition: any) { const viewRange = editor.editing.view.createRange(viewPosition) const domConverter = editor.editing.view.domConverter const rangeRects = Rect.getDomRangeRects( - domConverter.viewRangeToDom(viewRange) + domConverter.viewRangeToDom(viewRange) ).pop() return rangeRects } catch (e) { diff --git a/src/components/Autocomplete.vue b/src/components/Autocomplete.vue index 36c1a64..430ffdb 100644 --- a/src/components/Autocomplete.vue +++ b/src/components/Autocomplete.vue @@ -16,7 +16,7 @@ const results = computed(() => { diff --git a/src/global.d.ts b/src/global.d.ts index dcf1ec6..294de12 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -16,5 +16,12 @@ declare global { name: string icon: string } + + interface AutocompleteEvent { + position?: any + autocompleteText?: string + domElement?: HTMLElement + show: boolean + } } export {}