first commit
This commit is contained in:
100
frontend/node_modules/rc-mentions/es/util.js
generated
vendored
Normal file
100
frontend/node_modules/rc-mentions/es/util.js
generated
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
* Cut input selection into 2 part and return text before selection start
|
||||
*/
|
||||
export function getBeforeSelectionText(input) {
|
||||
var selectionStart = input.selectionStart;
|
||||
return input.value.slice(0, selectionStart);
|
||||
}
|
||||
/**
|
||||
* Find the last match prefix index
|
||||
*/
|
||||
export function getLastMeasureIndex(text, prefix) {
|
||||
return prefix.reduce(function (lastMatch, prefixStr) {
|
||||
var lastIndex = text.lastIndexOf(prefixStr);
|
||||
if (lastIndex > lastMatch.location) {
|
||||
return {
|
||||
location: lastIndex,
|
||||
prefix: prefixStr
|
||||
};
|
||||
}
|
||||
return lastMatch;
|
||||
}, {
|
||||
location: -1,
|
||||
prefix: ''
|
||||
});
|
||||
}
|
||||
function lower(char) {
|
||||
return (char || '').toLowerCase();
|
||||
}
|
||||
function reduceText(text, targetText, split) {
|
||||
var firstChar = text[0];
|
||||
if (!firstChar || firstChar === split) {
|
||||
return text;
|
||||
}
|
||||
|
||||
// Reuse rest text as it can
|
||||
var restText = text;
|
||||
var targetTextLen = targetText.length;
|
||||
for (var i = 0; i < targetTextLen; i += 1) {
|
||||
if (lower(restText[i]) !== lower(targetText[i])) {
|
||||
restText = restText.slice(i);
|
||||
break;
|
||||
} else if (i === targetTextLen - 1) {
|
||||
restText = restText.slice(targetTextLen);
|
||||
}
|
||||
}
|
||||
return restText;
|
||||
}
|
||||
|
||||
/**
|
||||
* Paint targetText into current text:
|
||||
* text: little@litest
|
||||
* targetText: light
|
||||
* => little @light test
|
||||
*/
|
||||
export function replaceWithMeasure(text, measureConfig) {
|
||||
var measureLocation = measureConfig.measureLocation,
|
||||
prefix = measureConfig.prefix,
|
||||
targetText = measureConfig.targetText,
|
||||
selectionStart = measureConfig.selectionStart,
|
||||
split = measureConfig.split;
|
||||
|
||||
// Before text will append one space if have other text
|
||||
var beforeMeasureText = text.slice(0, measureLocation);
|
||||
if (beforeMeasureText[beforeMeasureText.length - split.length] === split) {
|
||||
beforeMeasureText = beforeMeasureText.slice(0, beforeMeasureText.length - split.length);
|
||||
}
|
||||
if (beforeMeasureText) {
|
||||
beforeMeasureText = "".concat(beforeMeasureText).concat(split);
|
||||
}
|
||||
|
||||
// Cut duplicate string with current targetText
|
||||
var restText = reduceText(text.slice(selectionStart), targetText.slice(selectionStart - measureLocation - prefix.length), split);
|
||||
if (restText.slice(0, split.length) === split) {
|
||||
restText = restText.slice(split.length);
|
||||
}
|
||||
var connectedStartText = "".concat(beforeMeasureText).concat(prefix).concat(targetText).concat(split);
|
||||
return {
|
||||
text: "".concat(connectedStartText).concat(restText),
|
||||
selectionLocation: connectedStartText.length
|
||||
};
|
||||
}
|
||||
export function setInputSelection(input, location) {
|
||||
input.setSelectionRange(location, location);
|
||||
|
||||
/**
|
||||
* Reset caret into view.
|
||||
* Since this function always called by user control, it's safe to focus element.
|
||||
*/
|
||||
input.blur();
|
||||
input.focus();
|
||||
}
|
||||
export function validateSearch(text, split) {
|
||||
return !split || text.indexOf(split) === -1;
|
||||
}
|
||||
export function filterOption(input, _ref) {
|
||||
var _ref$value = _ref.value,
|
||||
value = _ref$value === void 0 ? '' : _ref$value;
|
||||
var lowerCase = input.toLowerCase();
|
||||
return value.toLowerCase().indexOf(lowerCase) !== -1;
|
||||
}
|
||||
Reference in New Issue
Block a user