mirror of
https://github.com/misskey-dev/misskey.git
synced 2024-12-29 18:29:11 +01:00
Improve reaction picker
This commit is contained in:
parent
0739ae006d
commit
c4f7e6659f
6 changed files with 67 additions and 14 deletions
|
@ -546,6 +546,11 @@ deck: "デッキ"
|
||||||
undeck: "デッキ解除"
|
undeck: "デッキ解除"
|
||||||
useBlurEffectForModal: "モーダルにぼかし効果を使用"
|
useBlurEffectForModal: "モーダルにぼかし効果を使用"
|
||||||
useFullReactionPicker: "フル機能リアクションピッカーを使用"
|
useFullReactionPicker: "フル機能リアクションピッカーを使用"
|
||||||
|
width: "幅"
|
||||||
|
height: "高さ"
|
||||||
|
large: "大"
|
||||||
|
medium: "中"
|
||||||
|
small: "小"
|
||||||
generateAccessToken: "アクセストークンの発行"
|
generateAccessToken: "アクセストークンの発行"
|
||||||
permission: "権限"
|
permission: "権限"
|
||||||
enableAll: "全て有効にする"
|
enableAll: "全て有効にする"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<MkModal ref="modal" :src="src" @click="$refs.modal.close()" @closed="$emit('closed')">
|
<MkModal ref="modal" :src="src" @click="$refs.modal.close()" @closed="$emit('closed')">
|
||||||
<div class="omfetrab _popup" :class="{ compact }">
|
<div class="omfetrab _popup" :class="['w' + width, 'h' + height, { big }]">
|
||||||
<input ref="search" class="search" :class="{ filled: q != null && q != '' }" v-model.trim="q" :placeholder="$t('search')" @paste.stop="paste" @keyup.enter="done()">
|
<input ref="search" class="search" :class="{ filled: q != null && q != '' }" v-model.trim="q" :placeholder="$t('search')" @paste.stop="paste" @keyup.enter="done()">
|
||||||
<div class="emojis">
|
<div class="emojis">
|
||||||
<section class="result">
|
<section class="result">
|
||||||
|
@ -99,6 +99,7 @@ import { faHeart, faFlag, faLaugh } from '@fortawesome/free-regular-svg-icons';
|
||||||
import MkModal from '@/components/ui/modal.vue';
|
import MkModal from '@/components/ui/modal.vue';
|
||||||
import Particle from '@/components/particle.vue';
|
import Particle from '@/components/particle.vue';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
|
import { isDeviceTouch } from '../scripts/is-device-touch';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
|
@ -113,7 +114,7 @@ export default defineComponent({
|
||||||
required: false,
|
required: false,
|
||||||
default: true
|
default: true
|
||||||
},
|
},
|
||||||
compact: {
|
asReactionPicker: {
|
||||||
required: false
|
required: false
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -125,6 +126,9 @@ export default defineComponent({
|
||||||
emojilist: markRaw(emojilist),
|
emojilist: markRaw(emojilist),
|
||||||
getStaticImageUrl,
|
getStaticImageUrl,
|
||||||
pinned: this.$store.state.settings.reactions,
|
pinned: this.$store.state.settings.reactions,
|
||||||
|
width: this.asReactionPicker ? this.$store.state.device.reactionPickerWidth : 3,
|
||||||
|
height: this.asReactionPicker ? this.$store.state.device.reactionPickerHeight : 2,
|
||||||
|
big: this.asReactionPicker ? isDeviceTouch : false,
|
||||||
customEmojiCategories: this.$store.getters['instance/emojiCategories'],
|
customEmojiCategories: this.$store.getters['instance/emojiCategories'],
|
||||||
customEmojis: this.$store.state.instance.meta.emojis,
|
customEmojis: this.$store.state.instance.meta.emojis,
|
||||||
visibleCategories: {},
|
visibleCategories: {},
|
||||||
|
@ -385,18 +389,39 @@ export default defineComponent({
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.omfetrab {
|
.omfetrab {
|
||||||
$eachSize: 40px;
|
|
||||||
$pad: 8px;
|
$pad: 8px;
|
||||||
|
--eachSize: 40px;
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
width: ($eachSize * 7) + ($pad * 2);
|
|
||||||
contain: content;
|
contain: content;
|
||||||
--height: 300px;
|
|
||||||
|
|
||||||
&.compact {
|
&.big {
|
||||||
width: ($eachSize * 5) + ($pad * 2);
|
--eachSize: 44px;
|
||||||
--height: 210px;
|
}
|
||||||
|
|
||||||
|
&.w1 {
|
||||||
|
width: calc((var(--eachSize) * 5) + (#{$pad} * 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
&.w2 {
|
||||||
|
width: calc((var(--eachSize) * 6) + (#{$pad} * 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
&.w3 {
|
||||||
|
width: calc((var(--eachSize) * 7) + (#{$pad} * 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
&.h1 {
|
||||||
|
--height: calc((var(--eachSize) * 4) + (#{$pad} * 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
&.h2 {
|
||||||
|
--height: calc((var(--eachSize) * 6) + (#{$pad} * 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
&.h3 {
|
||||||
|
--height: calc((var(--eachSize) * 8) + (#{$pad} * 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
> .search {
|
> .search {
|
||||||
|
@ -460,8 +485,8 @@ export default defineComponent({
|
||||||
> button {
|
> button {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
width: $eachSize;
|
width: var(--eachSize);
|
||||||
height: $eachSize;
|
height: var(--eachSize);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
|
||||||
&:focus {
|
&:focus {
|
||||||
|
|
|
@ -500,7 +500,7 @@ export default defineComponent({
|
||||||
this.blur();
|
this.blur();
|
||||||
os.popup(import('@/components/emoji-picker.vue'), {
|
os.popup(import('@/components/emoji-picker.vue'), {
|
||||||
src: this.$refs.reactButton,
|
src: this.$refs.reactButton,
|
||||||
compact: !this.$store.state.device.useFullReactionPicker
|
asReactionPicker: true
|
||||||
}, {
|
}, {
|
||||||
done: reaction => {
|
done: reaction => {
|
||||||
if (reaction) {
|
if (reaction) {
|
||||||
|
|
|
@ -43,7 +43,7 @@ export default defineComponent({
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss">
|
||||||
.novjtcto {
|
.novjtcto {
|
||||||
margin: 32px 0;
|
margin: 32px 0;
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,18 @@
|
||||||
</template>
|
</template>
|
||||||
</XDraggable>
|
</XDraggable>
|
||||||
<div class="_caption" style="padding: 8px;">{{ $t('reactionSettingDescription2') }} <button class="_textButton" @click="chooseEmoji">{{ $t('chooseEmoji') }}</button></div>
|
<div class="_caption" style="padding: 8px;">{{ $t('reactionSettingDescription2') }} <button class="_textButton" @click="chooseEmoji">{{ $t('chooseEmoji') }}</button></div>
|
||||||
<MkSwitch v-model:value="useFullReactionPicker">{{ $t('useFullReactionPicker') }}</MkSwitch>
|
<MkRadios v-model="reactionPickerWidth">
|
||||||
|
<template #desc>{{ $t('width') }}</template>
|
||||||
|
<option :value="1">{{ $t('small') }}</option>
|
||||||
|
<option :value="2">{{ $t('medium') }}</option>
|
||||||
|
<option :value="3">{{ $t('large') }}</option>
|
||||||
|
</MkRadios>
|
||||||
|
<MkRadios v-model="reactionPickerHeight">
|
||||||
|
<template #desc>{{ $t('height') }}</template>
|
||||||
|
<option :value="1">{{ $t('small') }}</option>
|
||||||
|
<option :value="2">{{ $t('medium') }}</option>
|
||||||
|
<option :value="3">{{ $t('large') }}</option>
|
||||||
|
</MkRadios>
|
||||||
</div>
|
</div>
|
||||||
<div class="_footer">
|
<div class="_footer">
|
||||||
<MkButton inline @click="preview"><Fa :icon="faEye"/> {{ $t('preview') }}</MkButton>
|
<MkButton inline @click="preview"><Fa :icon="faEye"/> {{ $t('preview') }}</MkButton>
|
||||||
|
@ -31,6 +42,7 @@ import { VueDraggableNext } from 'vue-draggable-next';
|
||||||
import MkInput from '@/components/ui/input.vue';
|
import MkInput from '@/components/ui/input.vue';
|
||||||
import MkButton from '@/components/ui/button.vue';
|
import MkButton from '@/components/ui/button.vue';
|
||||||
import MkSwitch from '@/components/ui/switch.vue';
|
import MkSwitch from '@/components/ui/switch.vue';
|
||||||
|
import MkRadios from '@/components/ui/radios.vue';
|
||||||
import { emojiRegexWithCustom } from '../../../misc/emoji-regex';
|
import { emojiRegexWithCustom } from '../../../misc/emoji-regex';
|
||||||
import { defaultSettings } from '@/store';
|
import { defaultSettings } from '@/store';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
|
@ -40,6 +52,7 @@ export default defineComponent({
|
||||||
MkInput,
|
MkInput,
|
||||||
MkButton,
|
MkButton,
|
||||||
MkSwitch,
|
MkSwitch,
|
||||||
|
MkRadios,
|
||||||
XDraggable: VueDraggableNext,
|
XDraggable: VueDraggableNext,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -61,6 +74,14 @@ export default defineComponent({
|
||||||
get() { return this.$store.state.device.useFullReactionPicker; },
|
get() { return this.$store.state.device.useFullReactionPicker; },
|
||||||
set(value) { this.$store.commit('device/set', { key: 'useFullReactionPicker', value: value }); }
|
set(value) { this.$store.commit('device/set', { key: 'useFullReactionPicker', value: value }); }
|
||||||
},
|
},
|
||||||
|
reactionPickerWidth: {
|
||||||
|
get() { return this.$store.state.device.reactionPickerWidth; },
|
||||||
|
set(value) { this.$store.commit('device/set', { key: 'reactionPickerWidth', value: value }); }
|
||||||
|
},
|
||||||
|
reactionPickerHeight: {
|
||||||
|
get() { return this.$store.state.device.reactionPickerHeight; },
|
||||||
|
set(value) { this.$store.commit('device/set', { key: 'reactionPickerHeight', value: value }); }
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
watch: {
|
watch: {
|
||||||
|
@ -92,7 +113,7 @@ export default defineComponent({
|
||||||
|
|
||||||
preview(ev) {
|
preview(ev) {
|
||||||
os.popup(import('@/components/emoji-picker.vue'), {
|
os.popup(import('@/components/emoji-picker.vue'), {
|
||||||
compact: !this.$store.state.device.useFullReactionPicker,
|
asReactionPicker: true,
|
||||||
src: ev.currentTarget || ev.target,
|
src: ev.currentTarget || ev.target,
|
||||||
}, {}, 'closed');
|
}, {}, 'closed');
|
||||||
},
|
},
|
||||||
|
|
|
@ -78,6 +78,8 @@ export const defaultDeviceSettings = {
|
||||||
enableInfiniteScroll: true,
|
enableInfiniteScroll: true,
|
||||||
useBlurEffectForModal: true,
|
useBlurEffectForModal: true,
|
||||||
useFullReactionPicker: false,
|
useFullReactionPicker: false,
|
||||||
|
reactionPickerWidth: 1,
|
||||||
|
reactionPickerHeight: 1,
|
||||||
sidebarDisplay: 'full', // full, icon, hide
|
sidebarDisplay: 'full', // full, icon, hide
|
||||||
instanceTicker: 'remote', // none, remote, always
|
instanceTicker: 'remote', // none, remote, always
|
||||||
roomGraphicsQuality: 'medium',
|
roomGraphicsQuality: 'medium',
|
||||||
|
|
Loading…
Reference in a new issue