2024.5.0-mattyatea4
This commit is contained in:
parent
58ce5a5f79
commit
564f2e9127
21 changed files with 3579 additions and 263 deletions
|
|
@ -117,7 +117,7 @@ const menuDef = computed(() => [{
|
|||
}, {
|
||||
icon: 'ti ti-layout-navbar',
|
||||
text: i18n.ts.timelineHeader,
|
||||
to: '/settings/timelineheader',
|
||||
to: '/settings/timeline-header',
|
||||
active: currentPage.value?.route.name === 'timelineHeader',
|
||||
}, {
|
||||
icon: 'ti ti-equal-double',
|
||||
|
|
|
|||
|
|
@ -30,6 +30,21 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
</div>
|
||||
</MkContainer>
|
||||
</FormSlot>
|
||||
<MkFoldableSection>
|
||||
<template #header>リモートのローカルタイムライン</template>
|
||||
|
||||
<div v-if="remoteLocalTimeline.length < 3">
|
||||
<MkInput v-model="tmpName" placeholder="remoteLocalTimeline 1"/>
|
||||
<MkInput v-model="tmpServer" placeholder="https://prismisskey.space"/>
|
||||
<MkButton @click="addRemote"><i class="ti ti-plus"></i> {{ i18n.ts.addItem }}</MkButton>
|
||||
</div>
|
||||
|
||||
<div v-for="(a,i) in remoteLocalTimeline" :key="i">
|
||||
<MkInput v-model="remoteLocalTimeline[i]['name']" :placeholder="a"/>
|
||||
<MkInput v-model="remoteLocalTimeline[i]['host']" :placeholder="a"/>
|
||||
<MkButton danger @click="deleteRemote(i)"><i class="ti ti-trash"></i> {{ i18n.ts.delete }}</MkButton>
|
||||
</div>
|
||||
</MkFoldableSection>
|
||||
<div class="_buttons">
|
||||
<MkButton @click="addItem"><i class="ti ti-plus"></i> {{ i18n.ts.addItem }}</MkButton>
|
||||
<MkButton danger @click="reset"><i class="ti ti-reload"></i> {{ i18n.ts.default }}</MkButton>
|
||||
|
|
@ -39,25 +54,30 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, defineAsyncComponent, ref, watch } from 'vue';
|
||||
import MkRadios from '@/components/MkRadios.vue';
|
||||
import { computed, defineAsyncComponent, ref } from 'vue';
|
||||
import MkButton from '@/components/MkButton.vue';
|
||||
import FormSlot from '@/components/form/slot.vue';
|
||||
import MkContainer from '@/components/MkContainer.vue';
|
||||
import * as os from '@/os.js';
|
||||
import { navbarItemDef } from '@/navbar.js';
|
||||
import { defaultStore } from '@/store.js';
|
||||
import { unisonReload } from '@/scripts/unison-reload.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
import { timelineHeaderItemDef } from '@/timeline-header.js';
|
||||
import MkInput from '@/components/MkInput.vue';
|
||||
import MkFoldableSection from '@/components/MkFoldableSection.vue';
|
||||
import { $i } from '@/account.js';
|
||||
|
||||
const Sortable = defineAsyncComponent(() => import('vuedraggable').then(x => x.default));
|
||||
const tmpName = ref();
|
||||
const tmpServer = ref();
|
||||
|
||||
const items = ref(defaultStore.state.timelineHeader.map(x => ({
|
||||
id: Math.random().toString(),
|
||||
type: x,
|
||||
})));
|
||||
const remoteLocalTimeline = ref(defaultStore.state.remoteLocalTimeline);
|
||||
const maxLocalTimeline = $i.policies.localTimelineAnyLimit;
|
||||
|
||||
async function reloadAsk() {
|
||||
const { canceled } = await os.confirm({
|
||||
|
|
@ -69,11 +89,31 @@ async function reloadAsk() {
|
|||
unisonReload();
|
||||
}
|
||||
|
||||
async function addRemote() {
|
||||
if (!tmpName.value || !tmpServer.value) return;
|
||||
if (maxLocalTimeline <= remoteLocalTimeline.value.length) return;
|
||||
remoteLocalTimeline.value.push({
|
||||
id: Math.random().toString(),
|
||||
name: tmpName.value,
|
||||
host: tmpServer.value,
|
||||
});
|
||||
tmpName.value = '';
|
||||
tmpServer.value = '';
|
||||
await defaultStore.set('remoteLocalTimeline', remoteLocalTimeline.value);
|
||||
}
|
||||
|
||||
const menu = computed(() => {
|
||||
return Object.keys(timelineHeaderItemDef).filter(k => !items.value.map(item => item.type).includes(k));
|
||||
});
|
||||
|
||||
async function deleteRemote(index: number) {
|
||||
remoteLocalTimeline.value.splice(index, 1);
|
||||
}
|
||||
|
||||
async function addItem() {
|
||||
const menu = Object.keys(timelineHeaderItemDef).filter(k => !defaultStore.state.timelineHeader.includes(k));
|
||||
const { canceled, result: item } = await os.select({
|
||||
title: i18n.ts.addItem,
|
||||
items: [...menu.map(k => ({
|
||||
items: [...menu.value.map(k => ({
|
||||
value: k, text: timelineHeaderItemDef[k].title,
|
||||
}))],
|
||||
});
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
<MkInfo v-if="['home', 'local', 'social', 'global'].includes(src) && !defaultStore.reactiveState.timelineTutorials.value[src]" style="margin-bottom: var(--margin);" closable @close="closeTutorial()">
|
||||
{{ i18n.ts._timelineDescription[src] }}
|
||||
</MkInfo>
|
||||
<MkPostForm v-if="$i && defaultStore.reactiveState.showFixedPostForm.value" :channel="channelInfo" :autofocus="deviceKind === 'desktop'" :class="$style.postForm" class="post-form _panel" fixed style="margin-bottom: var(--margin);"/>
|
||||
<MkPostForm v-if="$i && defaultStore.reactiveState.showFixedPostForm.value && ui !== 'twilike'" :channel="channelInfo" :autofocus="deviceKind === 'desktop'" :class="$style.postForm" class="post-form _panel" fixed style="margin-bottom: var(--margin);"/>
|
||||
<XPostForm v-if="$i && ui === 'twilike' " :channel="channelInfo" :autofocus="deviceKind === 'desktop'" :class="$style.postForm" class="post-form _panel" fixed style="margin-bottom: var(--margin);"/>
|
||||
<div v-if="queue > 0" :class="$style.new"><button class="_buttonPrimary" :class="$style.newButton" @click="top()">{{ i18n.ts.newNoteRecived }}</button></div>
|
||||
<div :class="$style.tl">
|
||||
<MkTimeline
|
||||
|
|
@ -21,6 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
:src="src.split(':')[0]"
|
||||
:list="src.split(':')[1]"
|
||||
:channel="src.split(':')[1]"
|
||||
:antenna="src.split(':')[1]"
|
||||
:withRenotes="withRenotes"
|
||||
:withReplies="withReplies"
|
||||
:onlyFiles="onlyFiles"
|
||||
|
|
@ -47,7 +49,6 @@ import * as os from '@/os.js';
|
|||
import { misskeyApi } from '@/scripts/misskey-api.js';
|
||||
import { defaultStore } from '@/store.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import { instance } from '@/instance.js';
|
||||
import { $i } from '@/account.js';
|
||||
import { definePageMetadata } from '@/scripts/page-metadata.js';
|
||||
import { antennasCache, userFavoriteListsCache, userListsCache, favoritedChannelsCache } from '@/cache.js';
|
||||
|
|
@ -57,6 +58,8 @@ import { MenuItem } from '@/types/menu.js';
|
|||
import { miLocalStorage } from '@/local-storage.js';
|
||||
import { timelineHeaderItemDef } from '@/timeline-header.js';
|
||||
import { isLocalTimelineAvailable, isGlobalTimelineAvailable } from '@/scripts/get-timeline-available.js';
|
||||
import { ui } from '@/config.js';
|
||||
import XPostForm from '@/components/XPostForm.vue';
|
||||
|
||||
provide('shouldOmitHeaderTitle', true);
|
||||
|
||||
|
|
@ -121,14 +124,7 @@ const withSensitive = computed<boolean>({
|
|||
get: () => defaultStore.reactiveState.tl.value.filter.withSensitive,
|
||||
set: (x) => saveTlFilter('withSensitive', x),
|
||||
});
|
||||
const isShowMediaTimeline = ref(defaultStore.state.showMediaTimeline);
|
||||
const remoteLocalTimelineEnable1 = ref(defaultStore.state.remoteLocalTimelineEnable1);
|
||||
const remoteLocalTimelineEnable2 = ref(defaultStore.state.remoteLocalTimelineEnable2);
|
||||
const remoteLocalTimelineEnable3 = ref(defaultStore.state.remoteLocalTimelineEnable3);
|
||||
const remoteLocalTimelineEnable4 = ref(defaultStore.state.remoteLocalTimelineEnable4);
|
||||
const remoteLocalTimelineEnable5 = ref(defaultStore.state.remoteLocalTimelineEnable5);
|
||||
const showHomeTimeline = ref(defaultStore.state.showHomeTimeline);
|
||||
const showSocialTimeline = ref(defaultStore.state.showSocialTimeline);
|
||||
|
||||
const channelInfo = ref();
|
||||
if (src.value.split(':')[0] === 'channel') {
|
||||
const channelId = src.value.split(':')[1];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue