UNPKG

4.13 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.getBeforeSelectionText = getBeforeSelectionText;
9exports.getLastMeasureIndex = getLastMeasureIndex;
10exports.replaceWithMeasure = replaceWithMeasure;
11exports.setInputSelection = setInputSelection;
12exports.validateSearch = validateSearch;
13exports.filterOption = filterOption;
14exports.omit = void 0;
15
16var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
17
18var omit = function omit(obj) {
19 var clone = (0, _objectSpread2.default)({}, obj);
20
21 for (var _len = arguments.length, keys = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
22 keys[_key - 1] = arguments[_key];
23 }
24
25 keys.forEach(function (key) {
26 delete clone[key];
27 });
28 return clone;
29};
30/**
31 * Cut input selection into 2 part and return text before selection start
32 */
33
34
35exports.omit = omit;
36
37function getBeforeSelectionText(input) {
38 var selectionStart = input.selectionStart;
39 return input.value.slice(0, selectionStart);
40}
41/**
42 * Find the last match prefix index
43 */
44
45
46function getLastMeasureIndex(text) {
47 var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
48 var prefixList = Array.isArray(prefix) ? prefix : [prefix];
49 return prefixList.reduce(function (lastMatch, prefixStr) {
50 var lastIndex = text.lastIndexOf(prefixStr);
51
52 if (lastIndex > lastMatch.location) {
53 return {
54 location: lastIndex,
55 prefix: prefixStr
56 };
57 }
58
59 return lastMatch;
60 }, {
61 location: -1,
62 prefix: ''
63 });
64}
65
66function lower(char) {
67 return (char || '').toLowerCase();
68}
69
70function reduceText(text, targetText, split) {
71 var firstChar = text[0];
72
73 if (!firstChar || firstChar === split) {
74 return text;
75 } // Reuse rest text as it can
76
77
78 var restText = text;
79 var targetTextLen = targetText.length;
80
81 for (var i = 0; i < targetTextLen; i += 1) {
82 if (lower(restText[i]) !== lower(targetText[i])) {
83 restText = restText.slice(i);
84 break;
85 } else if (i === targetTextLen - 1) {
86 restText = restText.slice(targetTextLen);
87 }
88 }
89
90 return restText;
91}
92/**
93 * Paint targetText into current text:
94 * text: little@litest
95 * targetText: light
96 * => little @light test
97 */
98
99
100function replaceWithMeasure(text, measureConfig) {
101 var measureLocation = measureConfig.measureLocation,
102 prefix = measureConfig.prefix,
103 targetText = measureConfig.targetText,
104 selectionStart = measureConfig.selectionStart,
105 split = measureConfig.split; // Before text will append one space if have other text
106
107 var beforeMeasureText = text.slice(0, measureLocation);
108
109 if (beforeMeasureText[beforeMeasureText.length - split.length] === split) {
110 beforeMeasureText = beforeMeasureText.slice(0, beforeMeasureText.length - split.length);
111 }
112
113 if (beforeMeasureText) {
114 beforeMeasureText = "".concat(beforeMeasureText).concat(split);
115 } // Cut duplicate string with current targetText
116
117
118 var restText = reduceText(text.slice(selectionStart), targetText.slice(selectionStart - measureLocation - prefix.length), split);
119
120 if (restText.slice(0, split.length) === split) {
121 restText = restText.slice(split.length);
122 }
123
124 var connectedStartText = "".concat(beforeMeasureText).concat(prefix).concat(targetText).concat(split);
125 return {
126 text: "".concat(connectedStartText).concat(restText),
127 selectionLocation: connectedStartText.length
128 };
129}
130
131function setInputSelection(input, location) {
132 input.setSelectionRange(location, location);
133 /**
134 * Reset caret into view.
135 * Since this function always called by user control, it's safe to focus element.
136 */
137
138 input.blur();
139 input.focus();
140}
141
142function validateSearch(text, props) {
143 var split = props.split;
144 return !split || text.indexOf(split) === -1;
145}
146
147function filterOption(input, _ref) {
148 var _ref$value = _ref.value,
149 value = _ref$value === void 0 ? '' : _ref$value;
150 var lowerCase = input.toLowerCase();
151 return value.toLowerCase().indexOf(lowerCase) !== -1;
152}
\No newline at end of file