| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- import { EditorView } from '@codemirror/view'
- const TOP_EDGE_THRESHOLD = 100
- const BOTTOM_EDGE_THRESHOLD = 200
- export function isCursorNearViewportEdge(view: EditorView, pos: number) {
- return (
- isCursorNearViewportTop(view, pos) || isCursorNearViewportBottom(view, pos)
- )
- }
- export function isCursorNearViewportTop(
- view: EditorView,
- pos: number,
- threshold = TOP_EDGE_THRESHOLD
- ) {
- const cursorCoords = view.coordsAtPos(pos)
- if (!cursorCoords) {
- return false
- }
- const scrollInfo = view.scrollDOM.getBoundingClientRect()
- return Math.abs(cursorCoords.bottom - scrollInfo.top) <= threshold
- }
- export function isCursorNearViewportBottom(
- view: EditorView,
- pos: number,
- threshold = BOTTOM_EDGE_THRESHOLD
- ) {
- const cursorCoords = view.coordsAtPos(pos)
- if (!cursorCoords) {
- return false
- }
- const scrollInfo = view.scrollDOM.getBoundingClientRect()
- const viewportHeight = view.scrollDOM.clientHeight
- const viewportBottom = scrollInfo.top + viewportHeight
- return Math.abs(cursorCoords.bottom - viewportBottom) <= threshold
- }
|