enhance(frontend): Add an option to customize Lockdown duration (#16405)
* chore(locales): Add "setManually" and "_time.month" Add Japanese locales to auto-generate other languages. * feat(frontend): Add text fields to set lockdown duration manually Choose from presets or set it manually. * refactor(frontend): Make objects contains option's values and labels When adding a new option, it needed to write two times. * docs(changelog): Add a description about this change Users can notice what's changed by this PR. * refactor(frontend): Manage state by MkSelect The functions only initialize the values. * refactor(frontend): Make the custom input as writable computed Clean up the MkInput components. * chore(locales): Switch to "custom" A single word is better than sentence on this situation. * refactor(frontend): Insert the custom button to presets Users don't need to click multiple times to use prests.
This commit is contained in:
parent
ba40cb750b
commit
ff334fe9d7
|
|
@ -39,6 +39,7 @@
|
||||||
- Enhance: 不必要な翻訳データを読み込まなくなり、パフォーマンスが向上しました
|
- Enhance: 不必要な翻訳データを読み込まなくなり、パフォーマンスが向上しました
|
||||||
- Enhance: 画像エフェクトのパラメータ名の多言語対応
|
- Enhance: 画像エフェクトのパラメータ名の多言語対応
|
||||||
- Enhance: 依存ソフトウェアの更新
|
- Enhance: 依存ソフトウェアの更新
|
||||||
|
- Enhance: ノートを非表示にする相対期間を1ヶ月単位で自由に指定できるように
|
||||||
- Fix: 投稿フォームでファイルのアップロードが中止または失敗した際のハンドリングを修正
|
- Fix: 投稿フォームでファイルのアップロードが中止または失敗した際のハンドリングを修正
|
||||||
- Fix: 一部の設定検索結果が存在しないパスになる問題を修正
|
- Fix: 一部の設定検索結果が存在しないパスになる問題を修正
|
||||||
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1171)
|
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1171)
|
||||||
|
|
|
||||||
|
|
@ -4234,6 +4234,10 @@ export interface Locale extends ILocale {
|
||||||
* プリセットから選択
|
* プリセットから選択
|
||||||
*/
|
*/
|
||||||
"selectFromPresets": string;
|
"selectFromPresets": string;
|
||||||
|
/**
|
||||||
|
* カスタム
|
||||||
|
*/
|
||||||
|
"custom": string;
|
||||||
/**
|
/**
|
||||||
* 実績
|
* 実績
|
||||||
*/
|
*/
|
||||||
|
|
@ -8836,6 +8840,10 @@ export interface Locale extends ILocale {
|
||||||
* 日
|
* 日
|
||||||
*/
|
*/
|
||||||
"day": string;
|
"day": string;
|
||||||
|
/**
|
||||||
|
* ヶ月
|
||||||
|
*/
|
||||||
|
"month": string;
|
||||||
};
|
};
|
||||||
"_2fa": {
|
"_2fa": {
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1054,6 +1054,7 @@ permissionDeniedError: "操作が拒否されました"
|
||||||
permissionDeniedErrorDescription: "このアカウントにはこの操作を行うための権限がありません。"
|
permissionDeniedErrorDescription: "このアカウントにはこの操作を行うための権限がありません。"
|
||||||
preset: "プリセット"
|
preset: "プリセット"
|
||||||
selectFromPresets: "プリセットから選択"
|
selectFromPresets: "プリセットから選択"
|
||||||
|
custom: "カスタム"
|
||||||
achievements: "実績"
|
achievements: "実績"
|
||||||
gotInvalidResponseError: "サーバーの応答が無効です"
|
gotInvalidResponseError: "サーバーの応答が無効です"
|
||||||
gotInvalidResponseErrorDescription: "サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから再度お試しください。"
|
gotInvalidResponseErrorDescription: "サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから再度お試しください。"
|
||||||
|
|
@ -2321,6 +2322,7 @@ _time:
|
||||||
minute: "分"
|
minute: "分"
|
||||||
hour: "時間"
|
hour: "時間"
|
||||||
day: "日"
|
day: "日"
|
||||||
|
month: "ヶ月"
|
||||||
|
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "既に設定は完了しています。"
|
alreadyRegistered: "既に設定は完了しています。"
|
||||||
|
|
|
||||||
|
|
@ -125,16 +125,20 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<option value="absolute">{{ i18n.ts._accountSettings.notesOlderThanSpecifiedDateAndTime }}</option>
|
<option value="absolute">{{ i18n.ts._accountSettings.notesOlderThanSpecifiedDateAndTime }}</option>
|
||||||
</MkSelect>
|
</MkSelect>
|
||||||
|
|
||||||
<MkSelect v-if="makeNotesFollowersOnlyBefore_type === 'relative'" v-model="makeNotesFollowersOnlyBefore">
|
<MkSelect v-if="makeNotesFollowersOnlyBefore_type === 'relative'" v-model="makeNotesFollowersOnlyBefore_selection">
|
||||||
<option :value="-3600">{{ i18n.ts.oneHour }}</option>
|
<option v-for="preset in makeNotesFollowersOnlyBefore_presets" :value="preset.value">{{ preset.label }}</option>
|
||||||
<option :value="-86400">{{ i18n.ts.oneDay }}</option>
|
<option value="custom">{{ i18n.ts.custom }}</option>
|
||||||
<option :value="-259200">{{ i18n.ts.threeDays }}</option>
|
|
||||||
<option :value="-604800">{{ i18n.ts.oneWeek }}</option>
|
|
||||||
<option :value="-2592000">{{ i18n.ts.oneMonth }}</option>
|
|
||||||
<option :value="-7776000">{{ i18n.ts.threeMonths }}</option>
|
|
||||||
<option :value="-31104000">{{ i18n.ts.oneYear }}</option>
|
|
||||||
</MkSelect>
|
</MkSelect>
|
||||||
|
|
||||||
|
<MkInput
|
||||||
|
v-if="makeNotesFollowersOnlyBefore_type === 'relative' && makeNotesFollowersOnlyBefore_isCustomMode"
|
||||||
|
v-model="makeNotesFollowersOnlyBefore_customMonths"
|
||||||
|
type="number"
|
||||||
|
:min="1"
|
||||||
|
>
|
||||||
|
<template #suffix>{{ i18n.ts._time.month }}</template>
|
||||||
|
</MkInput>
|
||||||
|
|
||||||
<MkInput
|
<MkInput
|
||||||
v-if="makeNotesFollowersOnlyBefore_type === 'absolute'"
|
v-if="makeNotesFollowersOnlyBefore_type === 'absolute'"
|
||||||
:modelValue="formatDateTimeString(new Date(makeNotesFollowersOnlyBefore * 1000), 'yyyy-MM-dd')"
|
:modelValue="formatDateTimeString(new Date(makeNotesFollowersOnlyBefore * 1000), 'yyyy-MM-dd')"
|
||||||
|
|
@ -162,16 +166,20 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<option value="absolute">{{ i18n.ts._accountSettings.notesOlderThanSpecifiedDateAndTime }}</option>
|
<option value="absolute">{{ i18n.ts._accountSettings.notesOlderThanSpecifiedDateAndTime }}</option>
|
||||||
</MkSelect>
|
</MkSelect>
|
||||||
|
|
||||||
<MkSelect v-if="makeNotesHiddenBefore_type === 'relative'" v-model="makeNotesHiddenBefore">
|
<MkSelect v-if="makeNotesHiddenBefore_type === 'relative'" v-model="makeNotesHiddenBefore_selection">
|
||||||
<option :value="-3600">{{ i18n.ts.oneHour }}</option>
|
<option v-for="preset in makeNotesHiddenBefore_presets" :value="preset.value">{{ preset.label }}</option>
|
||||||
<option :value="-86400">{{ i18n.ts.oneDay }}</option>
|
<option value="custom">{{ i18n.ts.custom }}</option>
|
||||||
<option :value="-259200">{{ i18n.ts.threeDays }}</option>
|
|
||||||
<option :value="-604800">{{ i18n.ts.oneWeek }}</option>
|
|
||||||
<option :value="-2592000">{{ i18n.ts.oneMonth }}</option>
|
|
||||||
<option :value="-7776000">{{ i18n.ts.threeMonths }}</option>
|
|
||||||
<option :value="-31104000">{{ i18n.ts.oneYear }}</option>
|
|
||||||
</MkSelect>
|
</MkSelect>
|
||||||
|
|
||||||
|
<MkInput
|
||||||
|
v-if="makeNotesHiddenBefore_type === 'relative' && makeNotesHiddenBefore_isCustomMode"
|
||||||
|
v-model="makeNotesHiddenBefore_customMonths"
|
||||||
|
type="number"
|
||||||
|
:min="1"
|
||||||
|
>
|
||||||
|
<template #suffix>{{ i18n.ts._time.month }}</template>
|
||||||
|
</MkInput>
|
||||||
|
|
||||||
<MkInput
|
<MkInput
|
||||||
v-if="makeNotesHiddenBefore_type === 'absolute'"
|
v-if="makeNotesHiddenBefore_type === 'absolute'"
|
||||||
:modelValue="formatDateTimeString(new Date(makeNotesHiddenBefore * 1000), 'yyyy-MM-dd')"
|
:modelValue="formatDateTimeString(new Date(makeNotesHiddenBefore * 1000), 'yyyy-MM-dd')"
|
||||||
|
|
@ -241,6 +249,37 @@ const makeNotesFollowersOnlyBefore_type = computed(() => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const makeNotesFollowersOnlyBefore_presets = [
|
||||||
|
{ label: i18n.ts.oneHour, value: -3600 },
|
||||||
|
{ label: i18n.ts.oneDay, value: -86400 },
|
||||||
|
{ label: i18n.ts.threeDays, value: -259200 },
|
||||||
|
{ label: i18n.ts.oneWeek, value: -604800 },
|
||||||
|
{ label: i18n.ts.oneMonth, value: -2592000 },
|
||||||
|
{ label: i18n.ts.threeMonths, value: -7776000 },
|
||||||
|
{ label: i18n.ts.oneYear, value: -31104000 },
|
||||||
|
];
|
||||||
|
|
||||||
|
const makeNotesFollowersOnlyBefore_isCustomMode = ref(
|
||||||
|
makeNotesFollowersOnlyBefore.value != null &&
|
||||||
|
makeNotesFollowersOnlyBefore.value < 0 &&
|
||||||
|
!makeNotesFollowersOnlyBefore_presets.some((preset) => preset.value === makeNotesFollowersOnlyBefore.value)
|
||||||
|
);
|
||||||
|
|
||||||
|
const makeNotesFollowersOnlyBefore_selection = computed({
|
||||||
|
get: () => makeNotesFollowersOnlyBefore_isCustomMode.value ? 'custom' : makeNotesFollowersOnlyBefore.value,
|
||||||
|
set(value) {
|
||||||
|
makeNotesFollowersOnlyBefore_isCustomMode.value = value === 'custom';
|
||||||
|
if (value !== 'custom') makeNotesFollowersOnlyBefore.value = value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const makeNotesFollowersOnlyBefore_customMonths = computed({
|
||||||
|
get: () => makeNotesFollowersOnlyBefore.value ? Math.abs(makeNotesFollowersOnlyBefore.value) / (30 * 24 * 60 * 60) : null,
|
||||||
|
set(value) {
|
||||||
|
if (value != null && value > 0) makeNotesFollowersOnlyBefore.value = -Math.abs(Math.floor(Number(value))) * 30 * 24 * 60 * 60;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const makeNotesHiddenBefore_type = computed(() => {
|
const makeNotesHiddenBefore_type = computed(() => {
|
||||||
if (makeNotesHiddenBefore.value == null) {
|
if (makeNotesHiddenBefore.value == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -251,6 +290,37 @@ const makeNotesHiddenBefore_type = computed(() => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const makeNotesHiddenBefore_presets = [
|
||||||
|
{ label: i18n.ts.oneHour, value: -3600 },
|
||||||
|
{ label: i18n.ts.oneDay, value: -86400 },
|
||||||
|
{ label: i18n.ts.threeDays, value: -259200 },
|
||||||
|
{ label: i18n.ts.oneWeek, value: -604800 },
|
||||||
|
{ label: i18n.ts.oneMonth, value: -2592000 },
|
||||||
|
{ label: i18n.ts.threeMonths, value: -7776000 },
|
||||||
|
{ label: i18n.ts.oneYear, value: -31104000 },
|
||||||
|
];
|
||||||
|
|
||||||
|
const makeNotesHiddenBefore_isCustomMode = ref(
|
||||||
|
makeNotesHiddenBefore.value != null &&
|
||||||
|
makeNotesHiddenBefore.value < 0 &&
|
||||||
|
!makeNotesHiddenBefore_presets.some((preset) => preset.value === makeNotesHiddenBefore.value)
|
||||||
|
);
|
||||||
|
|
||||||
|
const makeNotesHiddenBefore_selection = computed({
|
||||||
|
get: () => makeNotesHiddenBefore_isCustomMode.value ? 'custom' : makeNotesHiddenBefore.value,
|
||||||
|
set(value) {
|
||||||
|
makeNotesHiddenBefore_isCustomMode.value = value === 'custom';
|
||||||
|
if (value !== 'custom') makeNotesHiddenBefore.value = value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const makeNotesHiddenBefore_customMonths = computed({
|
||||||
|
get: () => makeNotesHiddenBefore.value ? Math.abs(makeNotesHiddenBefore.value) / (30 * 24 * 60 * 60) : null,
|
||||||
|
set(value) {
|
||||||
|
if (value != null && value > 0) makeNotesHiddenBefore.value = -Math.abs(Math.floor(Number(value))) * 30 * 24 * 60 * 60;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
watch([makeNotesFollowersOnlyBefore, makeNotesHiddenBefore], () => {
|
watch([makeNotesFollowersOnlyBefore, makeNotesHiddenBefore], () => {
|
||||||
save();
|
save();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue