aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/components/emoji-input/emoji-input.js5
-rw-r--r--src/components/emoji-input/emoji-input.vue6
-rw-r--r--src/components/emoji-selector/emoji-selector.js5
-rw-r--r--src/components/emoji-selector/emoji-selector.vue17
4 files changed, 30 insertions, 3 deletions
diff --git a/src/components/emoji-input/emoji-input.js b/src/components/emoji-input/emoji-input.js
index 48e89409..8f7598ca 100644
--- a/src/components/emoji-input/emoji-input.js
+++ b/src/components/emoji-input/emoji-input.js
@@ -105,6 +105,11 @@ const EmojiInput = {
},
setCaret ({target: {selectionStart}}) {
this.caret = selectionStart
+ },
+ onEmoji (emoji) {
+ const newValue = this.value.substr(0, this.caret) + emoji + this.value.substr(this.caret)
+ this.$refs.input.focus()
+ this.$emit('input', newValue)
}
}
}
diff --git a/src/components/emoji-input/emoji-input.vue b/src/components/emoji-input/emoji-input.vue
index a1ddd7f9..151861de 100644
--- a/src/components/emoji-input/emoji-input.vue
+++ b/src/components/emoji-input/emoji-input.vue
@@ -1,6 +1,5 @@
<template>
<div class="emoji-input">
- <EmojiSelector />
<input
v-if="type !== 'textarea'"
:class="classname"
@@ -16,6 +15,7 @@
@keydown.shift.tab="cycleBackward"
@keydown.tab="cycleForward"
@keydown.enter="replaceEmoji"
+ ref="input"
/>
<textarea
v-else
@@ -31,7 +31,9 @@
@keydown.shift.tab="cycleBackward"
@keydown.tab="cycleForward"
@keydown.enter="replaceEmoji"
+ ref="input"
></textarea>
+ <EmojiSelector @emoji="onEmoji" />
<div class="autocomplete-panel" v-if="suggestions">
<div class="autocomplete-panel-body">
<div
@@ -58,6 +60,8 @@
@import '../../_variables.scss';
.emoji-input {
+ position: relative;
+
.form-control {
width: 100%;
}
diff --git a/src/components/emoji-selector/emoji-selector.js b/src/components/emoji-selector/emoji-selector.js
index 4771f4c6..07ea0442 100644
--- a/src/components/emoji-selector/emoji-selector.js
+++ b/src/components/emoji-selector/emoji-selector.js
@@ -12,6 +12,11 @@ const EmojiSelector = {
methods: {
togglePanel () {
this.open = !this.open
+ },
+ onEmoji (emoji) {
+ const value = emoji.image_url ? `:${emoji.shortcode}:` : emoji.utf
+ this.$emit('emoji', ` ${value} `)
+ this.open = false
}
},
computed: {
diff --git a/src/components/emoji-selector/emoji-selector.vue b/src/components/emoji-selector/emoji-selector.vue
index 576ca16e..70752714 100644
--- a/src/components/emoji-selector/emoji-selector.vue
+++ b/src/components/emoji-selector/emoji-selector.vue
@@ -14,7 +14,13 @@
<div class="emoji-groups">
<div v-for="(value, key) in emojis" :key="key" class="emoji-group">
<h6 class="emoji-group-title">{{value.text}}</h6>
- <span v-for="emoji in value.emojis" :key="key + emoji.shortcode" :title="emoji.shortcode" class="emoji-item">
+ <span
+ v-for="emoji in value.emojis"
+ :key="key + emoji.shortcode"
+ :title="emoji.shortcode"
+ class="emoji-item"
+ @click="onEmoji(emoji)"
+ >
<span v-if="!emoji.image_url">{{emoji.utf}}</span>
<img :src="'https://bikeshed.party' + emoji.image_url" v-else>
</span>
@@ -32,20 +38,27 @@
.emoji {
&-dropdown {
- position: relative;
+ position: absolute;
+ right: 10px;
+ top: 2px;
+ z-index: 1;
&-toggle {
cursor: pointer;
+ position: absolute;
+ right: 0;
}
&-menu {
position: absolute;
z-index: 1;
right: 0;
+ top: 25px;
width: 300px;
height: 300px;
display: flex;
flex-direction: column;
+ margin: 0 !important;
&-content {
flex: 1 1 1px;