autocomplete vertical bounding box

This commit is contained in:
2023-05-10 00:04:40 +02:00
parent 9f9c3e9218
commit 25ce1a6954
2 changed files with 25 additions and 3 deletions

View File

@@ -38,7 +38,6 @@ const handleKeypress = (event: { [key: string]: number }) => {
} }
if (keyCodes.cycle.includes(keyCode)) { if (keyCodes.cycle.includes(keyCode)) {
const direction = keyCode === 38 ? -1 : 1 const direction = keyCode === 38 ? -1 : 1
console.log(direction)
changeActiveResult(direction) changeActiveResult(direction)
} else if (keyCodes.confirm.includes(keyCode)) { } else if (keyCodes.confirm.includes(keyCode)) {
const contextedLink = activeResult.value const contextedLink = activeResult.value

View File

@@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue' import { ref, nextTick } from 'vue'
import CKEditor from '@/ckeditor/CKEditor' import CKEditor from '@/ckeditor/CKEditor'
import BalloonEditor from '@ckeditor/ckeditor5-editor-balloon/src/ballooneditor' import BalloonEditor from '@ckeditor/ckeditor5-editor-balloon/src/ballooneditor'
import EssentialsPlugin from '@ckeditor/ckeditor5-essentials/src/essentials' import EssentialsPlugin from '@ckeditor/ckeditor5-essentials/src/essentials'
@@ -68,8 +68,9 @@ const autocompleteRef = ref<InstanceType<typeof Autocomplete> | null>(null)
const showAutocomplete = ref(false) const showAutocomplete = ref(false)
const autocompleteStyle = ref({}) const autocompleteStyle = ref({})
const autocompleteText = ref('') const autocompleteText = ref('')
const autocompleteReverse = ref(false)
const handleAutocomplete = (event: AutocompleteEvent) => { const handleAutocomplete = async (event: AutocompleteEvent) => {
const position = event.position const position = event.position
if (position && editorElement.value) { if (position && editorElement.value) {
const rect: any = editorElement.value?.getBoundingClientRect() const rect: any = editorElement.value?.getBoundingClientRect()
@@ -83,6 +84,27 @@ const handleAutocomplete = (event: AutocompleteEvent) => {
} }
autocompleteText.value = event.autocompleteText || '' autocompleteText.value = event.autocompleteText || ''
showAutocomplete.value = event.show showAutocomplete.value = event.show
await nextTick()
const autocompleteElem = autocompleteRef.value?.$el
const autocompleteRect = autocompleteRef.value?.$el.getBoundingClientRect()
const editorRect = editorElement.value?.getBoundingClientRect()
if (
autocompleteElem &&
autocompleteRect &&
editorRect &&
autocompleteRect.bottom > editorRect.bottom
) {
const autocompleteHeight = parseFloat(
window.getComputedStyle(autocompleteElem).height
)
autocompleteStyle.value = {
...autocompleteStyle.value,
top: `${position.top - editorRect.top - autocompleteHeight}px`,
}
autocompleteReverse.value = true
} else {
autocompleteReverse.value = false
}
} }
const handleContextedKeypress = (event: any) => { const handleContextedKeypress = (event: any) => {
@@ -111,6 +133,7 @@ const createLink = (link: string) => {
:style="autocompleteStyle" :style="autocompleteStyle"
@create-link="createLink" @create-link="createLink"
class="absolute w-[250px]" class="absolute w-[250px]"
:class="autocompleteReverse && 'flex-col-reverse'"
/> />
</div> </div>
</template> </template>