autocomplete vertical bounding box
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user