1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | Object.defineProperty(exports, "__esModule", {
|
6 | value: true
|
7 | });
|
8 | exports.getBeforeSelectionText = getBeforeSelectionText;
|
9 | exports.getLastMeasureIndex = getLastMeasureIndex;
|
10 | exports.replaceWithMeasure = replaceWithMeasure;
|
11 | exports.setInputSelection = setInputSelection;
|
12 | exports.validateSearch = validateSearch;
|
13 | exports.filterOption = filterOption;
|
14 | exports.omit = void 0;
|
15 |
|
16 | var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
17 |
|
18 | var 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 |
|
32 |
|
33 |
|
34 |
|
35 | exports.omit = omit;
|
36 |
|
37 | function getBeforeSelectionText(input) {
|
38 | var selectionStart = input.selectionStart;
|
39 | return input.value.slice(0, selectionStart);
|
40 | }
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 | function 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 |
|
66 | function lower(char) {
|
67 | return (char || '').toLowerCase();
|
68 | }
|
69 |
|
70 | function reduceText(text, targetText, split) {
|
71 | var firstChar = text[0];
|
72 |
|
73 | if (!firstChar || firstChar === split) {
|
74 | return text;
|
75 | }
|
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 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 |
|
100 | function replaceWithMeasure(text, measureConfig) {
|
101 | var measureLocation = measureConfig.measureLocation,
|
102 | prefix = measureConfig.prefix,
|
103 | targetText = measureConfig.targetText,
|
104 | selectionStart = measureConfig.selectionStart,
|
105 | split = measureConfig.split;
|
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 | }
|
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 |
|
131 | function setInputSelection(input, location) {
|
132 | input.setSelectionRange(location, location);
|
133 | |
134 |
|
135 |
|
136 |
|
137 |
|
138 | input.blur();
|
139 | input.focus();
|
140 | }
|
141 |
|
142 | function validateSearch(text, props) {
|
143 | var split = props.split;
|
144 | return !split || text.indexOf(split) === -1;
|
145 | }
|
146 |
|
147 | function 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 |