diff options
Diffstat (limited to 'src/components/emoji_input')
| -rw-r--r-- | src/components/emoji_input/emoji_input.js | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/components/emoji_input/emoji_input.js b/src/components/emoji_input/emoji_input.js index 5ff27b20..b1640753 100644 --- a/src/components/emoji_input/emoji_input.js +++ b/src/components/emoji_input/emoji_input.js @@ -77,7 +77,9 @@ const EmojiInput = { caret: 0, focused: false, blurTimeout: null, - showPicker: false + showPicker: false, + spamMode: false, + disableClickOutside: false } }, components: { @@ -100,7 +102,7 @@ const EmojiInput = { })) }, showSuggestions () { - return this.focused && this.suggestions && this.suggestions.length > 0 + return this.focused && this.suggestions && this.suggestions.length > 0 && !this.showPicker }, textAtCaret () { return (this.wordAtCaret || {}).word || '' @@ -142,6 +144,13 @@ const EmojiInput = { methods: { triggerShowPicker () { this.showPicker = true + // This temporarily disables "click outside" handler + // since external trigger also means click originates + // from outside, thus preventing picker from opening + this.disableClickOutside = true + setTimeout(() => { + this.disableClickOutside = false + }, 0) }, togglePicker () { this.showPicker = !this.showPicker @@ -151,12 +160,13 @@ const EmojiInput = { this.$emit('input', newValue) this.caret = 0 }, - insert (insertion) { + insert ({ insertion, spamMode }) { const newValue = [ this.value.substring(0, this.caret), insertion, this.value.substring(this.caret) ].join('') + this.spamMode = spamMode this.$emit('input', newValue) const position = this.caret + insertion.length @@ -191,7 +201,7 @@ const EmojiInput = { }, cycleBackward (e) { const len = this.suggestions.length || 0 - if (len > 0) { + if (len > 1) { this.highlighted -= 1 if (this.highlighted < 0) { this.highlighted = this.suggestions.length - 1 @@ -203,7 +213,7 @@ const EmojiInput = { }, cycleForward (e) { const len = this.suggestions.length || 0 - if (len > 0) { + if (len > 1) { this.highlighted += 1 if (this.highlighted >= len) { this.highlighted = 0 @@ -234,7 +244,10 @@ const EmojiInput = { this.blurTimeout = null } - this.showPicker = false + console.log(this.spamMode) + if (!this.spamMode) { + this.showPicker = false + } this.focused = true this.setCaret(e) this.resize() @@ -280,7 +293,8 @@ const EmojiInput = { this.resize() this.$emit('input', e.target.value) }, - onClickOutside () { + onClickOutside (e) { + if (this.disableClickOutside) return this.showPicker = false }, onStickerUploaded (e) { |
