From ff334fe9d7a4dda82a53a5b831e22d7d9c147101 Mon Sep 17 00:00:00 2001
From: Souma <101255979+5ouma@users.noreply.github.com>
Date: Mon, 18 Aug 2025 14:11:48 +0900
Subject: [PATCH] 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.
---
CHANGELOG.md | 1 +
locales/index.d.ts | 8 ++
locales/ja-JP.yml | 2 +
.../frontend/src/pages/settings/privacy.vue | 102 +++++++++++++++---
4 files changed, 97 insertions(+), 16 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bf3f8027b0..a64ddd16c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -39,6 +39,7 @@
- Enhance: 不必要な翻訳データを読み込まなくなり、パフォーマンスが向上しました
- Enhance: 画像エフェクトのパラメータ名の多言語対応
- Enhance: 依存ソフトウェアの更新
+- Enhance: ノートを非表示にする相対期間を1ヶ月単位で自由に指定できるように
- Fix: 投稿フォームでファイルのアップロードが中止または失敗した際のハンドリングを修正
- Fix: 一部の設定検索結果が存在しないパスになる問題を修正
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1171)
diff --git a/locales/index.d.ts b/locales/index.d.ts
index 028db4043f..79aa665c06 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -4234,6 +4234,10 @@ export interface Locale extends ILocale {
* プリセットから選択
*/
"selectFromPresets": string;
+ /**
+ * カスタム
+ */
+ "custom": string;
/**
* 実績
*/
@@ -8836,6 +8840,10 @@ export interface Locale extends ILocale {
* 日
*/
"day": string;
+ /**
+ * ヶ月
+ */
+ "month": string;
};
"_2fa": {
/**
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 7aa88f399d..aa500c4f38 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1054,6 +1054,7 @@ permissionDeniedError: "操作が拒否されました"
permissionDeniedErrorDescription: "このアカウントにはこの操作を行うための権限がありません。"
preset: "プリセット"
selectFromPresets: "プリセットから選択"
+custom: "カスタム"
achievements: "実績"
gotInvalidResponseError: "サーバーの応答が無効です"
gotInvalidResponseErrorDescription: "サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから再度お試しください。"
@@ -2321,6 +2322,7 @@ _time:
minute: "分"
hour: "時間"
day: "日"
+ month: "ヶ月"
_2fa:
alreadyRegistered: "既に設定は完了しています。"
diff --git a/packages/frontend/src/pages/settings/privacy.vue b/packages/frontend/src/pages/settings/privacy.vue
index 3977359c54..ab012841dc 100644
--- a/packages/frontend/src/pages/settings/privacy.vue
+++ b/packages/frontend/src/pages/settings/privacy.vue
@@ -125,16 +125,20 @@ SPDX-License-Identifier: AGPL-3.0-only
-
-
-
-
-
-
-
-
+
+
+
+
+ {{ i18n.ts._time.month }}
+
+
{{ i18n.ts._accountSettings.notesOlderThanSpecifiedDateAndTime }}
-
-
-
-
-
-
-
-
+
+
+
+
+ {{ i18n.ts._time.month }}
+
+
{
}
});
+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(() => {
if (makeNotesHiddenBefore.value == 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], () => {
save();
});