zent
Version:
一套前端设计语言和基于React的实现
46 lines (45 loc) • 1.47 kB
JavaScript
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,
};
}