updated logic for padding with spaces, improved spam mode

This commit is contained in:
Henry Jameson 2019-09-15 12:09:19 +03:00
parent d2fe797821
commit e366adbb6c
5 changed files with 36 additions and 7 deletions

View file

@ -178,14 +178,37 @@ const EmojiInput = {
this.caret = 0
},
insert ({ insertion, spamMode }) {
const before = this.value.substring(0, this.caret) || ''
const after = this.value.substring(this.caret) || ''
/* Using a bit more smart approach to padding emojis with spaces:
* - put a space before cursor if there isn't one already, unless we
* are at the beginning of post or in spam mode
* - put a space after emoji if there isn't one already unless we are
* in spam mode
*
* The idea is that when you put a cursor somewhere in between sentence
* inserting just ' :emoji: ' will add more spaces to post which might
* break the flow/spacing, as well as the case where user ends sentence
* with a space before adding emoji.
*
* Spam mode is intended for creating multi-part emojis and overall spamming
* them, masto seem to be rendering :emoji::emoji: correctly now so why not
*/
const isSpaceRegex = /\s/
const spaceBefore = !isSpaceRegex.exec(before.slice(-1)) && before.length && !spamMode > 0 ? ' ' : ''
const spaceAfter = !isSpaceRegex.exec(after[0]) && !spamMode ? ' ' : ''
const newValue = [
this.value.substring(0, this.caret),
before,
spaceBefore,
insertion,
this.value.substring(this.caret)
spaceAfter,
after
].join('')
this.spamMode = spamMode
this.$emit('input', newValue)
const position = this.caret + insertion.length
const position = this.caret + (insertion + spaceAfter + spaceBefore).length
this.$nextTick(function () {
// Re-focus inputbox after clicking suggestion