diff options
| author | Shpuld Shpludson <shp@cock.li> | 2020-09-08 09:46:19 +0000 |
|---|---|---|
| committer | Shpuld Shpludson <shp@cock.li> | 2020-09-08 09:46:19 +0000 |
| commit | 938887ef91a12dcaaaaa0884af4e76abd1c6c679 (patch) | |
| tree | 14d913a145a4e7bcb9221a38aea70410293ce69f /src/services/completion/completion.js | |
| parent | e768ec1fca2f7580d111b0878a9695b0c8b9dbb1 (diff) | |
| parent | f31bc5310e544cd6f960471659c5a83e1f1721be (diff) | |
Merge branch 'rc/2.1.1' into 'master'
Update master with 2.1.1
See merge request pleroma/pleroma-fe!1231
Diffstat (limited to 'src/services/completion/completion.js')
| -rw-r--r-- | src/services/completion/completion.js | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/src/services/completion/completion.js b/src/services/completion/completion.js index df83d03d..8a6eba7e 100644 --- a/src/services/completion/completion.js +++ b/src/services/completion/completion.js @@ -5,7 +5,7 @@ export const replaceWord = (str, toReplace, replacement) => { } export const wordAtPosition = (str, pos) => { - const words = splitIntoWords(str) + const words = splitByWhitespaceBoundary(str) const wordsWithPosition = addPositionToWords(words) return find(wordsWithPosition, ({ start, end }) => start <= pos && end > pos) @@ -34,36 +34,36 @@ export const addPositionToWords = (words) => { }, []) } -export const splitIntoWords = (str) => { - // Split at word boundaries - const regex = /\b/ - const triggers = /[@#:]+$/ - - let split = str.split(regex) - - // Add trailing @ and # to the following word. - const words = reduce(split, (result, word) => { - if (result.length > 0) { - let previous = result.pop() - const matches = previous.match(triggers) - if (matches) { - previous = previous.replace(triggers, '') - word = matches[0] + word - } - result.push(previous) +export const splitByWhitespaceBoundary = (str) => { + let result = [] + let currentWord = '' + for (let i = 0; i < str.length; i++) { + const currentChar = str[i] + // Starting a new word + if (!currentWord) { + currentWord = currentChar + continue } - result.push(word) - - return result - }, []) - - return words + // current character is whitespace while word isn't, or vice versa: + // add our current word to results, start over the current word. + if (!!currentChar.trim() !== !!currentWord.trim()) { + result.push(currentWord) + currentWord = currentChar + continue + } + currentWord += currentChar + } + // Add the last word we were working on + if (currentWord) { + result.push(currentWord) + } + return result } const completion = { wordAtPosition, addPositionToWords, - splitIntoWords, + splitByWhitespaceBoundary, replaceWord } |
