diff --git a/CHANGELOG_CHERRYPICK.md b/CHANGELOG_CHERRYPICK.md index fdd744e141..3ed353851d 100644 --- a/CHANGELOG_CHERRYPICK.md +++ b/CHANGELOG_CHERRYPICK.md @@ -47,6 +47,8 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2024xx](CHANGE - Enhance: 로그인 알림 개선 - 로그인 알림에서 로그인 한 장치의 `IP`를 표시하고 승인되지 않은 기기에 대한 대응 방법이 표시됩니다. - Enhance: 노트 상세 페이지의 노트 헤더에서도 `편집됨`과 `노트 삭제 예약` 아이콘을 표시함 +- Enhance: 타임라인의 옵션 메뉴에서 타임라인 탭을 편집할 수 있음 (kokonect-link/cherrypick#528) +- Enhance: 타임라인을 모두 비활성화하면 타임라인이 비활성화되었다는 안내 문구 표시 - Fix: (Friendly) 알림 영역에 `새 노트` 탭이 누락됨 - Fix: 노트 삭제 예약 기한을 `기간 지정`으로 설정한 경우 노트가 즉시 삭제될 수 있음 - Fix: 이벤트가 포함된 노트를 `삭제 후 편집` 또는 `내용 복사 후 편집`할 때, 이벤트를 편집하지 않으면 노트를 게시할 수 없음 diff --git a/packages/frontend/src/pages/timeline.vue b/packages/frontend/src/pages/timeline.vue index 2eaa560819..ba17de77ab 100644 --- a/packages/frontend/src/pages/timeline.vue +++ b/packages/frontend/src/pages/timeline.vue @@ -37,7 +37,15 @@ SPDX-License-Identifier: AGPL-3.0-only
+
+

+ + {{ i18n.ts._disabledTimeline.title }} +

+

{{ i18n.ts._disabledTimeline.description }}

+
({ const enableWidgetsArea = ref(defaultStore.state.enableWidgetsArea); const friendlyUiEnableNotificationsArea = ref(defaultStore.state.friendlyUiEnableNotificationsArea); + +const enableHomeTimeline = ref(defaultStore.state.enableHomeTimeline); +const enableLocalTimeline = ref(defaultStore.state.enableLocalTimeline); +const enableSocialTimeline = ref(defaultStore.state.enableSocialTimeline); +const enableGlobalTimeline = ref(defaultStore.state.enableGlobalTimeline); +const enableListTimeline = ref(defaultStore.state.enableListTimeline); +const enableAntennaTimeline = ref(defaultStore.state.enableAntennaTimeline); +const enableChannelTimeline = ref(defaultStore.state.enableChannelTimeline); + const collapseRenotes = ref(defaultStore.state.collapseRenotes); const collapseReplies = ref(defaultStore.state.collapseReplies); const collapseLongNoteContent = ref(defaultStore.state.collapseLongNoteContent); @@ -187,6 +204,41 @@ watch(friendlyUiEnableNotificationsArea, (x) => { reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true }); }); +watch(enableHomeTimeline, (x) => { + defaultStore.set('enableHomeTimeline', x); + reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true }); +}); + +watch(enableLocalTimeline, (x) => { + defaultStore.set('enableLocalTimeline', x); + reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true }); +}); + +watch(enableSocialTimeline, (x) => { + defaultStore.set('enableSocialTimeline', x); + reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true }); +}); + +watch(enableGlobalTimeline, (x) => { + defaultStore.set('enableGlobalTimeline', x); + reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true }); +}); + +watch(enableListTimeline, (x) => { + defaultStore.set('enableListTimeline', x); + reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true }); +}); + +watch(enableAntennaTimeline, (x) => { + defaultStore.set('enableAntennaTimeline', x); + reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true }); +}); + +watch(enableChannelTimeline, (x) => { + defaultStore.set('enableChannelTimeline', x); + reloadAsk({ reason: i18n.ts.reloadToApplySetting, unison: true }); +}); + watch(collapseRenotes, (x) => { defaultStore.set('collapseRenotes', x); reloadTimeline(); @@ -297,7 +349,7 @@ async function chooseChannel(ev: MouseEvent): Promise { function saveSrc(newSrc: TimelinePageSrc): void { const out = deepMerge({ src: newSrc }, defaultStore.state.tl); - if (newSrc.startsWith('userList:')) { + if (defaultStore.state.enableListTimeline && newSrc.startsWith('userList:')) { const id = newSrc.substring('userList:'.length); out.userList = defaultStore.reactiveState.pinnedUserLists.value.find(l => l.id === id) ?? null; } @@ -393,6 +445,54 @@ const headerActions = computed(() => { menuItems.push({ type: 'divider' }); + menuItems.push({ + type: 'parent', + icon: 'ti ti-align-left', + text: i18n.ts.timeline, + children: async () => { + const displayOfTimelineChildMenu = [] as MenuItem[]; + + displayOfTimelineChildMenu.push({ + type: 'switch', + text: i18n.ts._timelines.home, + icon: 'ti ti-home', + ref: enableHomeTimeline, + }, { + type: 'switch', + text: i18n.ts._timelines.local, + icon: 'ti ti-planet', + ref: enableLocalTimeline, + }, { + type: 'switch', + text: i18n.ts._timelines.social, + icon: 'ti ti-universe', + ref: enableSocialTimeline, + }, { + type: 'switch', + text: i18n.ts._timelines.global, + icon: 'ti ti-world', + ref: enableGlobalTimeline, + }, { type: 'divider' }, { + type: 'switch', + text: i18n.ts.lists, + icon: 'ti ti-list', + ref: enableListTimeline, + }, { + type: 'switch', + text: i18n.ts.antennas, + icon: 'ti ti-antenna', + ref: enableAntennaTimeline, + }, { + type: 'switch', + text: i18n.ts.channel, + icon: 'ti ti-device-tv', + ref: enableChannelTimeline, + }); + + return displayOfTimelineChildMenu; + }, + }); + menuItems.push({ type: 'parent', icon: 'ti ti-note',