summaryrefslogtreecommitdiff
path: root/packages/frontend
diff options
context:
space:
mode:
authorHazelnoot <acomputerdog@gmail.com>2025-06-04 19:48:00 +0000
committerHazelnoot <acomputerdog@gmail.com>2025-06-04 19:48:00 +0000
commitdc357315897ffc6d9fad58f6c366e8bae5176e9f (patch)
tree7cc2d17fde2f6f36edcf024fb3ad41b88dbda1bb /packages/frontend
parentmerge: Fix performance regression in notes/mentions endpoint (!1092) (diff)
parentclarify option wording (diff)
downloadsharkey-dc357315897ffc6d9fad58f6c366e8bae5176e9f.tar.gz
sharkey-dc357315897ffc6d9fad58f6c366e8bae5176e9f.tar.bz2
sharkey-dc357315897ffc6d9fad58f6c366e8bae5176e9f.zip
merge: Add option to keep CWs with "RE:" prefix (!1093)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1093 Approved-by: dakkar <dakkar@thenautilus.net> Approved-by: Marie <github@yuugi.dev>
Diffstat (limited to 'packages/frontend')
-rw-r--r--packages/frontend/src/components/MkPostForm.vue4
-rw-r--r--packages/frontend/src/components/MkSelect.vue32
-rw-r--r--packages/frontend/src/pages/settings/preferences.vue8
-rw-r--r--packages/frontend/src/preferences/def.ts2
4 files changed, 27 insertions, 19 deletions
diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue
index c1d78301de..bbacdfda4d 100644
--- a/packages/frontend/src/components/MkPostForm.vue
+++ b/packages/frontend/src/components/MkPostForm.vue
@@ -373,7 +373,9 @@ if (props.specified) {
// keep cw when reply
if (prefer.s.keepCw && props.reply && props.reply.cw) {
useCw.value = true;
- cw.value = props.reply.cw;
+ cw.value = prefer.s.keepCw === 'prepend-re'
+ ? `RE: ${props.reply.cw}`
+ : props.reply.cw;
}
// apply default CW
diff --git a/packages/frontend/src/components/MkSelect.vue b/packages/frontend/src/components/MkSelect.vue
index cf4e4eda74..511a45c165 100644
--- a/packages/frontend/src/components/MkSelect.vue
+++ b/packages/frontend/src/components/MkSelect.vue
@@ -39,32 +39,34 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
</template>
-<script lang="ts" setup>
-import { onMounted, nextTick, ref, watch, computed, toRefs, useSlots } from 'vue';
-import { useInterval } from '@@/js/use-interval.js';
-import type { VNode, VNodeChild } from 'vue';
-import type { MenuItem } from '@/types/menu.js';
-import * as os from '@/os.js';
-
-type ItemOption = {
+<script lang="ts">
+type ItemOption<T extends string | number | null | boolean = string | number | null> = {
type?: 'option';
- value: string | number | null;
+ value: T;
label: string;
};
-type ItemGroup = {
+type ItemGroup<T extends string | number | null | boolean = string | number | null> = {
type: 'group';
label: string;
- items: ItemOption[];
+ items: ItemOption<T>[];
};
-export type MkSelectItem = ItemOption | ItemGroup;
+export type MkSelectItem<T extends string | number | null | boolean = string | number | null> = ItemOption<T> | ItemGroup<T>;
+</script>
+
+<script lang="ts" setup generic="T extends string | number | null | boolean = string | number | null">
+import { onMounted, nextTick, ref, watch, computed, toRefs, useSlots } from 'vue';
+import { useInterval } from '@@/js/use-interval.js';
+import type { VNode, VNodeChild } from 'vue';
+import type { MenuItem } from '@/types/menu.js';
+import * as os from '@/os.js';
// TODO: itemsをslot内のoptionで指定する用法は廃止する(props.itemsを必須化する)
// see: https://github.com/misskey-dev/misskey/issues/15558
const props = defineProps<{
- modelValue: string | number | null;
+ modelValue: T;
required?: boolean;
readonly?: boolean;
disabled?: boolean;
@@ -73,11 +75,11 @@ const props = defineProps<{
inline?: boolean;
small?: boolean;
large?: boolean;
- items?: MkSelectItem[];
+ items?: MkSelectItem<T>[];
}>();
const emit = defineEmits<{
- (ev: 'update:modelValue', value: string | number | null): void;
+ (ev: 'update:modelValue', value: T): void;
}>();
const slots = useSlots();
diff --git a/packages/frontend/src/pages/settings/preferences.vue b/packages/frontend/src/pages/settings/preferences.vue
index 4e7568561b..ed0e3689a5 100644
--- a/packages/frontend/src/pages/settings/preferences.vue
+++ b/packages/frontend/src/pages/settings/preferences.vue
@@ -403,9 +403,13 @@ SPDX-License-Identifier: AGPL-3.0-only
<div class="_gaps_s">
<SearchMarker :keywords="['remember', 'keep', 'note', 'cw']">
<MkPreferenceContainer k="keepCw">
- <MkSwitch v-model="keepCw">
+ <MkSelect v-model="keepCw">
<template #label><SearchLabel>{{ i18n.ts.keepCw }}</SearchLabel></template>
- </MkSwitch>
+ <template #caption><SearchKeyword>{{ i18n.ts.keepCwDescription }}</SearchKeyword></template>
+ <option :value="false">{{ i18n.ts.keepCwDisabled }}</option>>
+ <option :value="true">{{ i18n.ts.keepCwEnabled }}</option>>
+ <option value="prepend-re">{{ i18n.ts.keepCwPrependRe }}</option>
+ </MkSelect>
</MkPreferenceContainer>
</SearchMarker>
diff --git a/packages/frontend/src/preferences/def.ts b/packages/frontend/src/preferences/def.ts
index 22059041d1..fb795b1b7a 100644
--- a/packages/frontend/src/preferences/def.ts
+++ b/packages/frontend/src/preferences/def.ts
@@ -120,7 +120,7 @@ export const PREF_DEF = {
default: false,
},
keepCw: {
- default: true,
+ default: true as boolean | 'prepend-re',
},
rememberNoteVisibility: {
default: false,