parent
88ec15d4c7
commit
cc7fec4b9f
4 changed files with 32 additions and 26 deletions
|
@ -312,6 +312,7 @@ common:
|
||||||
sync: "同期"
|
sync: "同期"
|
||||||
save: "保存"
|
save: "保存"
|
||||||
saved: "保存しました"
|
saved: "保存しました"
|
||||||
|
preview: "プレビュー"
|
||||||
home-profile: "ホームのプロファイル"
|
home-profile: "ホームのプロファイル"
|
||||||
deck-profile: "デッキのプロファイル"
|
deck-profile: "デッキのプロファイル"
|
||||||
room: "ルーム"
|
room: "ルーム"
|
||||||
|
|
|
@ -145,13 +145,18 @@ export default (opts: Opts = {}) => ({
|
||||||
this.blur();
|
this.blur();
|
||||||
const w = this.$root.new(MkReactionPicker, {
|
const w = this.$root.new(MkReactionPicker, {
|
||||||
source: this.$refs.reactButton,
|
source: this.$refs.reactButton,
|
||||||
note: this.appearNote,
|
|
||||||
showFocus: viaKeyboard,
|
showFocus: viaKeyboard,
|
||||||
animation: !viaKeyboard
|
animation: !viaKeyboard
|
||||||
}).$once('closed', this.focus);
|
|
||||||
this.$once('hook:beforeDestroy', () => {
|
|
||||||
w.close();
|
|
||||||
});
|
});
|
||||||
|
w.$once('chosen', reaction => {
|
||||||
|
this.$root.api('notes/reactions/create', {
|
||||||
|
noteId: this.appearNote.id,
|
||||||
|
reaction: reaction
|
||||||
|
}).then(() => {
|
||||||
|
w.close();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
w.$once('closed', this.focus);
|
||||||
},
|
},
|
||||||
|
|
||||||
reactDirectly(reaction) {
|
reactDirectly(reaction) {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<div class="popover" :class="{ isMobile: $root.isMobile }" ref="popover">
|
<div class="popover" :class="{ isMobile: $root.isMobile }" ref="popover">
|
||||||
<p v-if="!$root.isMobile">{{ title }}</p>
|
<p v-if="!$root.isMobile">{{ title }}</p>
|
||||||
<div class="buttons" ref="buttons" :class="{ showFocus }">
|
<div class="buttons" ref="buttons" :class="{ showFocus }">
|
||||||
<button v-for="(reaction, i) in $store.state.settings.reactions" :key="reaction" @click="react(reaction)" @mouseover="onMouseover" @mouseout="onMouseout" :tabindex="i + 1" :title="/^[a-z]+$/.test(reaction) ? $t('@.reactions.' + reaction) : reaction" v-particle><mk-reaction-icon :reaction="reaction"/></button>
|
<button v-for="(reaction, i) in rs" :key="reaction" @click="react(reaction)" @mouseover="onMouseover" @mouseout="onMouseout" :tabindex="i + 1" :title="/^[a-z]+$/.test(reaction) ? $t('@.reactions.' + reaction) : reaction" v-particle><mk-reaction-icon :reaction="reaction"/></button>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="enableEmojiReaction" class="text">
|
<div v-if="enableEmojiReaction" class="text">
|
||||||
<input v-model="text" :placeholder="$t('input-reaction-placeholder')" @keyup.enter="reactText" @input="tryReactText" v-autocomplete="{ model: 'text' }">
|
<input v-model="text" :placeholder="$t('input-reaction-placeholder')" @keyup.enter="reactText" @input="tryReactText" v-autocomplete="{ model: 'text' }">
|
||||||
|
@ -22,16 +22,11 @@ import { emojiRegex } from '../../../../../misc/emoji-regex';
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
i18n: i18n('common/views/components/reaction-picker.vue'),
|
i18n: i18n('common/views/components/reaction-picker.vue'),
|
||||||
props: {
|
props: {
|
||||||
note: {
|
|
||||||
type: Object,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
|
|
||||||
source: {
|
source: {
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
|
|
||||||
cb: {
|
reactions: {
|
||||||
required: false
|
required: false
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -50,6 +45,7 @@ export default Vue.extend({
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
rs: this.reactions || this.$store.state.settings.reactions,
|
||||||
title: this.$t('choose-reaction'),
|
title: this.$t('choose-reaction'),
|
||||||
text: null,
|
text: null,
|
||||||
enableEmojiReaction: false,
|
enableEmojiReaction: false,
|
||||||
|
@ -134,14 +130,7 @@ export default Vue.extend({
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
react(reaction) {
|
react(reaction) {
|
||||||
this.$root.api('notes/reactions/create', {
|
this.$emit('chosen', reaction);
|
||||||
noteId: this.note.id,
|
|
||||||
reaction: reaction
|
|
||||||
}).then(() => {
|
|
||||||
if (this.cb) this.cb();
|
|
||||||
this.$emit('closed');
|
|
||||||
this.destroyDom();
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
reactText() {
|
reactText() {
|
||||||
|
|
|
@ -113,6 +113,10 @@
|
||||||
<ui-textarea v-model="reactions">
|
<ui-textarea v-model="reactions">
|
||||||
{{ $t('@._settings.reactions') }}<template #desc>{{ $t('@._settings.reactions-description') }}</template>
|
{{ $t('@._settings.reactions') }}<template #desc>{{ $t('@._settings.reactions-description') }}</template>
|
||||||
</ui-textarea>
|
</ui-textarea>
|
||||||
|
<ui-horizon-group>
|
||||||
|
<ui-button @click="save('reactions', reactions.trim().split('\n'))" primary><fa :icon="faSave"/> {{ $t('@._settings.save') }}</ui-button>
|
||||||
|
<ui-button @click="previewReaction()" ref="reactionsPreviewButton"><fa :icon="faEye"/> {{ $t('@._settings.preview') }}</ui-button>
|
||||||
|
</ui-horizon-group>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
|
@ -311,11 +315,12 @@ import XApi from './api.vue';
|
||||||
import XLanguage from './language.vue';
|
import XLanguage from './language.vue';
|
||||||
import XAppType from './app-type.vue';
|
import XAppType from './app-type.vue';
|
||||||
import XNotification from './notification.vue';
|
import XNotification from './notification.vue';
|
||||||
|
import MkReactionPicker from '../reaction-picker.vue';
|
||||||
|
|
||||||
import { url, version } from '../../../../config';
|
import { url, version } from '../../../../config';
|
||||||
import checkForUpdate from '../../../scripts/check-for-update';
|
import checkForUpdate from '../../../scripts/check-for-update';
|
||||||
import { formatTimeString } from '../../../../../../misc/format-time-string';
|
import { formatTimeString } from '../../../../../../misc/format-time-string';
|
||||||
import { faSave } from '@fortawesome/free-regular-svg-icons';
|
import { faSave, faEye } from '@fortawesome/free-regular-svg-icons';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
i18n: i18n(),
|
i18n: i18n(),
|
||||||
|
@ -346,11 +351,12 @@ export default Vue.extend({
|
||||||
return {
|
return {
|
||||||
meta: null,
|
meta: null,
|
||||||
version,
|
version,
|
||||||
|
reactions: this.$store.state.settings.reactions.join('\n'),
|
||||||
webSearchEngine: this.$store.state.settings.webSearchEngine,
|
webSearchEngine: this.$store.state.settings.webSearchEngine,
|
||||||
pastedFileName : this.$store.state.settings.pastedFileName,
|
pastedFileName : this.$store.state.settings.pastedFileName,
|
||||||
latestVersion: undefined,
|
latestVersion: undefined,
|
||||||
checkingForUpdate: false,
|
checkingForUpdate: false,
|
||||||
faSave
|
faSave, faEye
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
@ -414,11 +420,6 @@ export default Vue.extend({
|
||||||
set(value) { this.$store.dispatch('settings/set', { key: 'disableViaMobile', value }); }
|
set(value) { this.$store.dispatch('settings/set', { key: 'disableViaMobile', value }); }
|
||||||
},
|
},
|
||||||
|
|
||||||
reactions: {
|
|
||||||
get() { return this.$store.state.settings.reactions.join('\n'); },
|
|
||||||
set(value: string) { this.$store.dispatch('settings/set', { key: 'reactions', value: value.trim().split('\n') }); }
|
|
||||||
},
|
|
||||||
|
|
||||||
useShadow: {
|
useShadow: {
|
||||||
get() { return this.$store.state.device.useShadow; },
|
get() { return this.$store.state.device.useShadow; },
|
||||||
set(value) { this.$store.commit('device/set', { key: 'useShadow', value }); }
|
set(value) { this.$store.commit('device/set', { key: 'useShadow', value }); }
|
||||||
|
@ -655,6 +656,16 @@ export default Vue.extend({
|
||||||
pastedFileNamePreview() {
|
pastedFileNamePreview() {
|
||||||
return `${formatTimeString(new Date(), this.pastedFileName).replace(/{{number}}/g, `1`)}.png`
|
return `${formatTimeString(new Date(), this.pastedFileName).replace(/{{number}}/g, `1`)}.png`
|
||||||
},
|
},
|
||||||
|
previewReaction() {
|
||||||
|
const picker = this.$root.new(MkReactionPicker, {
|
||||||
|
source: this.$refs.reactionsPreviewButton.$el,
|
||||||
|
reactions: this.reactions.trim().split('\n'),
|
||||||
|
showFocus: false,
|
||||||
|
});
|
||||||
|
picker.$once('chosen', reaction => {
|
||||||
|
picker.close();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in a new issue