UNPKG

zent

Version:

一套前端设计语言和基于React的实现

46 lines (45 loc) 1.47 kB
import { isWhiteSpace } from './utils'; import { MENTION_NOT_FOUND, MENTION_FOUND } from './constants'; import findLastIndex from '../utils/findLastIndex'; import findIndex from '../utils/findIndex'; var NOT_FOUND = { code: MENTION_NOT_FOUND, }; export function findMentionAtCaretPosition(_a) { var input = _a.input, value = _a.value, triggerText = _a.triggerText; var selectionEnd = input.selectionEnd; var mentionStartIndex = findLastIndex(value, isWhiteSpace, selectionEnd - 1); if (mentionStartIndex + 1 === selectionEnd) { return NOT_FOUND; } var mentionEndIndex = findIndex(value, isWhiteSpace, selectionEnd); var i = mentionStartIndex === -1 ? 0 : Math.min(mentionStartIndex + 1, value.length - 1); var caretMeasureStart = i; var end = mentionEndIndex === -1 ? value.length - 1 : Math.max(mentionEndIndex - 1, 0); var j = 0; var triggerEnd = triggerText.length - 1; var foundTrigger = true; while (j <= triggerEnd) { if (i > end || value[i] !== triggerText[j]) { foundTrigger = false; break; } i++; j++; } if (!foundTrigger) { return NOT_FOUND; } return { code: MENTION_FOUND, caretMeasureStart: caretMeasureStart, searchStart: i, searchEnd: end, placeholderStart: caretMeasureStart + triggerText.length, placeholderEnd: end, }; }