enhance(frontend): Enterでチャットのメッセージを送信できるように
This commit is contained in:
parent
8c1fc85d00
commit
2272eceffa
|
@ -5448,6 +5448,14 @@ export interface Locale extends ILocale {
|
||||||
* ホーム
|
* ホーム
|
||||||
*/
|
*/
|
||||||
"home": string;
|
"home": string;
|
||||||
|
/**
|
||||||
|
* 送信
|
||||||
|
*/
|
||||||
|
"send": string;
|
||||||
|
/**
|
||||||
|
* 改行
|
||||||
|
*/
|
||||||
|
"newline": string;
|
||||||
/**
|
/**
|
||||||
* このルームをミュート
|
* このルームをミュート
|
||||||
*/
|
*/
|
||||||
|
@ -5614,11 +5622,23 @@ export interface Locale extends ILocale {
|
||||||
* ナビゲーションバーに副ボタンを表示
|
* ナビゲーションバーに副ボタンを表示
|
||||||
*/
|
*/
|
||||||
"showNavbarSubButtons": string;
|
"showNavbarSubButtons": string;
|
||||||
|
/**
|
||||||
|
* オンのとき
|
||||||
|
*/
|
||||||
|
"ifOn": string;
|
||||||
|
/**
|
||||||
|
* オフのとき
|
||||||
|
*/
|
||||||
|
"ifOff": string;
|
||||||
"_chat": {
|
"_chat": {
|
||||||
/**
|
/**
|
||||||
* 送信者の名前を表示
|
* 送信者の名前を表示
|
||||||
*/
|
*/
|
||||||
"showSenderName": string;
|
"showSenderName": string;
|
||||||
|
/**
|
||||||
|
* Enterで送信
|
||||||
|
*/
|
||||||
|
"sendOnEnter": string;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
"_preferencesProfile": {
|
"_preferencesProfile": {
|
||||||
|
|
|
@ -1359,6 +1359,8 @@ _chat:
|
||||||
members: "メンバー"
|
members: "メンバー"
|
||||||
searchMessages: "メッセージを検索"
|
searchMessages: "メッセージを検索"
|
||||||
home: "ホーム"
|
home: "ホーム"
|
||||||
|
send: "送信"
|
||||||
|
newline: "改行"
|
||||||
muteThisRoom: "このルームをミュート"
|
muteThisRoom: "このルームをミュート"
|
||||||
deleteRoom: "ルームを削除"
|
deleteRoom: "ルームを削除"
|
||||||
cannotChatWithTheUser: "このユーザーとのチャットを開始できません"
|
cannotChatWithTheUser: "このユーザーとのチャットを開始できません"
|
||||||
|
@ -1404,9 +1406,12 @@ _settings:
|
||||||
makeEveryTextElementsSelectable: "全てのテキスト要素を選択可能にする"
|
makeEveryTextElementsSelectable: "全てのテキスト要素を選択可能にする"
|
||||||
makeEveryTextElementsSelectable_description: "有効にすると、一部のシチュエーションでのユーザビリティが低下する場合があります。"
|
makeEveryTextElementsSelectable_description: "有効にすると、一部のシチュエーションでのユーザビリティが低下する場合があります。"
|
||||||
showNavbarSubButtons: "ナビゲーションバーに副ボタンを表示"
|
showNavbarSubButtons: "ナビゲーションバーに副ボタンを表示"
|
||||||
|
ifOn: "オンのとき"
|
||||||
|
ifOff: "オフのとき"
|
||||||
|
|
||||||
_chat:
|
_chat:
|
||||||
showSenderName: "送信者の名前を表示"
|
showSenderName: "送信者の名前を表示"
|
||||||
|
sendOnEnter: "Enterで送信"
|
||||||
|
|
||||||
_preferencesProfile:
|
_preferencesProfile:
|
||||||
profileName: "プロファイル名"
|
profileName: "プロファイル名"
|
||||||
|
|
|
@ -151,8 +151,16 @@ function onDrop(ev: DragEvent): void {
|
||||||
}
|
}
|
||||||
|
|
||||||
function onKeydown(ev: KeyboardEvent) {
|
function onKeydown(ev: KeyboardEvent) {
|
||||||
if ((ev.key === 'Enter') && (ev.ctrlKey || ev.metaKey)) {
|
if (ev.key === 'Enter') {
|
||||||
send();
|
if (prefer.s['chat.sendOnEnter']) {
|
||||||
|
if (!(ev.ctrlKey || ev.metaKey || ev.shiftKey)) {
|
||||||
|
send();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ((ev.ctrlKey || ev.metaKey)) {
|
||||||
|
send();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -434,7 +434,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<template #label><SearchLabel>{{ i18n.ts.chat }}</SearchLabel></template>
|
<template #label><SearchLabel>{{ i18n.ts.chat }}</SearchLabel></template>
|
||||||
<template #icon><i class="ti ti-messages"></i></template>
|
<template #icon><i class="ti ti-messages"></i></template>
|
||||||
|
|
||||||
<div class="_gaps_m">
|
<div class="_gaps_s">
|
||||||
<SearchMarker :keywords="['show', 'sender', 'name']">
|
<SearchMarker :keywords="['show', 'sender', 'name']">
|
||||||
<MkPreferenceContainer k="chat.showSenderName">
|
<MkPreferenceContainer k="chat.showSenderName">
|
||||||
<MkSwitch v-model="chatShowSenderName">
|
<MkSwitch v-model="chatShowSenderName">
|
||||||
|
@ -442,6 +442,28 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
</MkSwitch>
|
</MkSwitch>
|
||||||
</MkPreferenceContainer>
|
</MkPreferenceContainer>
|
||||||
</SearchMarker>
|
</SearchMarker>
|
||||||
|
|
||||||
|
<SearchMarker :keywords="['send', 'enter', 'newline']">
|
||||||
|
<MkPreferenceContainer k="chat.sendOnEnter">
|
||||||
|
<MkSwitch v-model="chatSendOnEnter">
|
||||||
|
<template #label><SearchLabel>{{ i18n.ts._settings._chat.sendOnEnter }}</SearchLabel></template>
|
||||||
|
<template #caption>
|
||||||
|
<div class="_gaps_s">
|
||||||
|
<div>
|
||||||
|
<b>{{ i18n.ts._settings.ifOn }}:</b>
|
||||||
|
<div>{{ i18n.ts._chat.send }}: Enter</div>
|
||||||
|
<div>{{ i18n.ts._chat.newline }}: Shift + Enter</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<b>{{ i18n.ts._settings.ifOff }}:</b>
|
||||||
|
<div>{{ i18n.ts._chat.send }}: Ctrl + Enter</div>
|
||||||
|
<div>{{ i18n.ts._chat.newline }}: Enter</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</MkSwitch>
|
||||||
|
</MkPreferenceContainer>
|
||||||
|
</SearchMarker>
|
||||||
</div>
|
</div>
|
||||||
</MkFolder>
|
</MkFolder>
|
||||||
</SearchMarker>
|
</SearchMarker>
|
||||||
|
@ -627,6 +649,7 @@ const useBlurEffectForModal = prefer.model('useBlurEffectForModal');
|
||||||
const useBlurEffect = prefer.model('useBlurEffect');
|
const useBlurEffect = prefer.model('useBlurEffect');
|
||||||
const defaultFollowWithReplies = prefer.model('defaultFollowWithReplies');
|
const defaultFollowWithReplies = prefer.model('defaultFollowWithReplies');
|
||||||
const chatShowSenderName = prefer.model('chat.showSenderName');
|
const chatShowSenderName = prefer.model('chat.showSenderName');
|
||||||
|
const chatSendOnEnter = prefer.model('chat.sendOnEnter');
|
||||||
|
|
||||||
watch(lang, () => {
|
watch(lang, () => {
|
||||||
miLocalStorage.setItem('lang', lang.value as string);
|
miLocalStorage.setItem('lang', lang.value as string);
|
||||||
|
@ -654,6 +677,7 @@ watch([
|
||||||
squareAvatars,
|
squareAvatars,
|
||||||
highlightSensitiveMedia,
|
highlightSensitiveMedia,
|
||||||
enableSeasonalScreenEffect,
|
enableSeasonalScreenEffect,
|
||||||
|
chatShowSenderName,
|
||||||
], async () => {
|
], async () => {
|
||||||
await reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true });
|
await reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true });
|
||||||
});
|
});
|
||||||
|
|
|
@ -377,6 +377,9 @@ export const PREF_DEF = {
|
||||||
'chat.showSenderName': {
|
'chat.showSenderName': {
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
'chat.sendOnEnter': {
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
|
||||||
'game.dropAndFusion': {
|
'game.dropAndFusion': {
|
||||||
default: {
|
default: {
|
||||||
|
|
|
@ -491,55 +491,60 @@ export const searchIndexes: SearchIndexItem[] = [
|
||||||
label: i18n.ts._settings._chat.showSenderName,
|
label: i18n.ts._settings._chat.showSenderName,
|
||||||
keywords: ['show', 'sender', 'name'],
|
keywords: ['show', 'sender', 'name'],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'omEy5Q3Ev',
|
||||||
|
label: i18n.ts._settings._chat.sendOnEnter,
|
||||||
|
keywords: ['send', 'enter', 'newline'],
|
||||||
|
},
|
||||||
],
|
],
|
||||||
label: i18n.ts.chat,
|
label: i18n.ts.chat,
|
||||||
keywords: ['chat', 'messaging'],
|
keywords: ['chat', 'messaging'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'sCscGhMmH',
|
id: '5fy7VEy6i',
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
id: 'dLkRNHn3k',
|
id: 'EosiWZvak',
|
||||||
label: i18n.ts.squareAvatars,
|
label: i18n.ts.squareAvatars,
|
||||||
keywords: ['avatar', 'icon', 'square'],
|
keywords: ['avatar', 'icon', 'square'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'BvooTWFW5',
|
id: 'qY5xTzl35',
|
||||||
label: i18n.ts.seasonalScreenEffect,
|
label: i18n.ts.seasonalScreenEffect,
|
||||||
keywords: ['effect', 'show'],
|
keywords: ['effect', 'show'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'yzbghkAq0',
|
id: '2VSnj81vC',
|
||||||
label: i18n.ts.openImageInNewTab,
|
label: i18n.ts.openImageInNewTab,
|
||||||
keywords: ['image', 'photo', 'picture', 'media', 'thumbnail', 'new', 'tab'],
|
keywords: ['image', 'photo', 'picture', 'media', 'thumbnail', 'new', 'tab'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'aSbKFHbOy',
|
id: 'hdQa7W2H1',
|
||||||
label: i18n.ts.withRepliesByDefaultForNewlyFollowed,
|
label: i18n.ts.withRepliesByDefaultForNewlyFollowed,
|
||||||
keywords: ['follow', 'replies'],
|
keywords: ['follow', 'replies'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '89bn97UgY',
|
id: 'nnj4DkjhP',
|
||||||
label: i18n.ts.whenServerDisconnected,
|
label: i18n.ts.whenServerDisconnected,
|
||||||
keywords: ['server', 'disconnect', 'reconnect', 'reload', 'streaming'],
|
keywords: ['server', 'disconnect', 'reconnect', 'reload', 'streaming'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'hgf3rgdA6',
|
id: 'Eh7vTluDO',
|
||||||
label: i18n.ts.numberOfPageCache,
|
label: i18n.ts.numberOfPageCache,
|
||||||
keywords: ['cache', 'page'],
|
keywords: ['cache', 'page'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '6FVdHPhhv',
|
id: 'vTRSKf1JA',
|
||||||
label: i18n.ts.forceShowAds,
|
label: i18n.ts.forceShowAds,
|
||||||
keywords: ['ad', 'show'],
|
keywords: ['ad', 'show'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '5Bx5DAST1',
|
id: 'dwhQfcLGt',
|
||||||
label: i18n.ts.hemisphere,
|
label: i18n.ts.hemisphere,
|
||||||
keywords: [],
|
keywords: [],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'wv7Cwiwb1',
|
id: 'Ar1lj7f7U',
|
||||||
label: i18n.ts.additionalEmojiDictionary,
|
label: i18n.ts.additionalEmojiDictionary,
|
||||||
keywords: ['emoji', 'dictionary', 'additional', 'extra'],
|
keywords: ['emoji', 'dictionary', 'additional', 'extra'],
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue