diff --git a/src/components/emoji_input/emoji_input.js b/src/components/emoji_input/emoji_input.js index c74c531bd..6dc006f8c 100644 --- a/src/components/emoji_input/emoji_input.js +++ b/src/components/emoji_input/emoji_input.js @@ -78,6 +78,7 @@ const EmojiInput = { focused: false, blurTimeout: null, showPicker: false, + temporarilyHideSuggestions: false, spamMode: false, disableClickOutside: false } @@ -102,7 +103,11 @@ const EmojiInput = { })) }, showSuggestions () { - return this.focused && this.suggestions && this.suggestions.length > 0 && !this.showPicker + return this.focused && + this.suggestions && + this.suggestions.length > 0 && + !this.showPicker && + !this.temporarilyHideSuggestions }, textAtCaret () { return (this.wordAtCaret || {}).word || '' @@ -153,6 +158,7 @@ const EmojiInput = { }, 0) }, togglePicker () { + this.input.elm.focus() this.showPicker = !this.showPicker }, replace (replacement) { @@ -250,44 +256,68 @@ const EmojiInput = { this.focused = true this.setCaret(e) this.resize() + this.temporarilyHideSuggestions = false }, onKeyUp (e) { + const { key } = e this.setCaret(e) this.resize() + + // Setting hider in keyUp to prevent suggestions from blinking + // when moving away from suggested spot + if (key === 'Escape') { + this.temporarilyHideSuggestions = true + } else { + this.temporarilyHideSuggestions = false + } }, onPaste (e) { this.setCaret(e) this.resize() }, onKeyDown (e) { - this.setCaret(e) - this.resize() - const { ctrlKey, shiftKey, key } = e - if (key === 'Tab') { - if (shiftKey) { + // Disable suggestions hotkeys if suggestions are hidden + if (!this.temporarilyHideSuggestions) { + if (key === 'Tab') { + if (shiftKey) { + this.cycleBackward(e) + } else { + this.cycleForward(e) + } + } + if (key === 'ArrowUp') { this.cycleBackward(e) - } else { + } else if (key === 'ArrowDown') { this.cycleForward(e) } - } - if (key === 'ArrowUp') { - this.cycleBackward(e) - } else if (key === 'ArrowDown') { - this.cycleForward(e) - } - if (key === 'Enter') { - if (!ctrlKey) { - this.replaceText(e) + if (key === 'Enter') { + if (!ctrlKey) { + this.replaceText(e) + } } } + // Probably add optional keyboard controls for emoji picker? + + // Escape hides suggestions, if suggestions are hidden it + // de-focuses the element (i.e. default browser behavior) + if (key === 'Escape') { + if (!this.temporarilyHideSuggestions) { + this.input.elm.focus() + } + } + + this.showPicker = false + this.resize() }, onInput (e) { this.showPicker = false this.setCaret(e) + this.resize() this.$emit('input', e.target.value) }, onCompositionUpdate (e) { + this.showPicker = false this.setCaret(e) this.resize() this.$emit('input', e.target.value) diff --git a/src/components/emoji_picker/emoji_picker.js b/src/components/emoji_picker/emoji_picker.js index 03870a99c..bce5026ee 100644 --- a/src/components/emoji_picker/emoji_picker.js +++ b/src/components/emoji_picker/emoji_picker.js @@ -17,7 +17,6 @@ const EmojiPicker = { keyword: '', activeGroup: 'custom', showingStickers: false, - zoomEmoji: false, spamMode: false } }, @@ -61,13 +60,6 @@ const EmojiPicker = { }, onStickerUploadFailed (e) { this.$emit('sticker-upload-failed', e) - }, - setZoomEmoji (e, emoji) { - this.zoomEmoji = emoji - const { x, y } = e.target.getBoundingClientRect() - console.log(e.target) - this.$refs['zoom-portal'].style.left = (x - 32) + 'px' - this.$refs['zoom-portal'].style.top = (y - 32) + 'px' } }, watch: { diff --git a/src/components/emoji_picker/emoji_picker.scss b/src/components/emoji_picker/emoji_picker.scss index 7e76aa520..472db35b7 100644 --- a/src/components/emoji_picker/emoji_picker.scss +++ b/src/components/emoji_picker/emoji_picker.scss @@ -10,21 +10,6 @@ margin: 0 !important; z-index: 1; - .zoom-portal { - position: fixed; - pointer-events: none; - width: 96px; - height: 96px; - font-size: 96px; - line-height: 96px; - z-index: 10; - img { - object-fit: contain; - width: 100%; - height: 100%; - } - } - .spam-mode { padding: 7px; line-height: normal; @@ -150,10 +135,6 @@ cursor: pointer; - &:hover { - opacity: 0 - } - img { object-fit: contain; max-width: 100%; diff --git a/src/components/emoji_picker/emoji_picker.vue b/src/components/emoji_picker/emoji_picker.vue index 5a8961d2e..901520aaa 100644 --- a/src/components/emoji_picker/emoji_picker.vue +++ b/src/components/emoji_picker/emoji_picker.vue @@ -65,16 +65,12 @@ :title="emoji.displayText" class="emoji-item" @click.stop.prevent="onEmoji(emoji)" - @mouseenter="setZoomEmoji($event, emoji)" - @mouseleave="setZoomEmoji($event, false)" - > - - {{ emoji.replacement }} - + > + {{ emoji.replacement }} + > @@ -99,18 +95,6 @@ /> -
- - - {{ zoomEmoji.replacement }} - - - -
diff --git a/src/components/status/status.vue b/src/components/status/status.vue index a0756ae4a..2c75582f4 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -721,9 +721,6 @@ $status-margin: 0.75em; &.emoji { width: 32px; height: 32px; - transition: transform 200ms; - transform: scale(1); - pointer-events: none; } }