fix lint
This commit is contained in:
parent
5ff28f08a9
commit
eba092e319
|
@ -51,24 +51,16 @@ export const meta = {
|
|||
export const paramDef = {
|
||||
type: 'object',
|
||||
properties: {
|
||||
userId: { type: 'string', format: 'misskey:id' },
|
||||
groupId: { type: 'string', format: 'misskey:id' },
|
||||
limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 },
|
||||
sinceId: { type: 'string', format: 'misskey:id' },
|
||||
untilId: { type: 'string', format: 'misskey:id' },
|
||||
markAsRead: { type: 'boolean', default: true },
|
||||
},
|
||||
anyOf: [
|
||||
{
|
||||
properties: {
|
||||
userId: { type: 'string', format: 'misskey:id' },
|
||||
},
|
||||
required: ['userId'],
|
||||
},
|
||||
{
|
||||
properties: {
|
||||
groupId: { type: 'string', format: 'misskey:id' },
|
||||
},
|
||||
required: ['groupId'],
|
||||
},
|
||||
{ required: ['userId'] },
|
||||
{ required: ['groupId'] },
|
||||
],
|
||||
} as const;
|
||||
|
||||
|
|
|
@ -75,22 +75,14 @@ export const meta = {
|
|||
export const paramDef = {
|
||||
type: 'object',
|
||||
properties: {
|
||||
userId: { type: 'string', format: 'misskey:id' },
|
||||
groupId: { type: 'string', format: 'misskey:id' },
|
||||
text: { type: 'string', nullable: true, maxLength: 3000 },
|
||||
fileId: { type: 'string', format: 'misskey:id' },
|
||||
},
|
||||
anyOf: [
|
||||
{
|
||||
properties: {
|
||||
userId: { type: 'string', format: 'misskey:id' },
|
||||
},
|
||||
required: ['userId'],
|
||||
},
|
||||
{
|
||||
properties: {
|
||||
groupId: { type: 'string', format: 'misskey:id' },
|
||||
},
|
||||
required: ['groupId'],
|
||||
},
|
||||
{ required: ['userId'] },
|
||||
{ required: ['groupId'] },
|
||||
],
|
||||
} as const;
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ class MediaTimelineChannel extends Channel {
|
|||
public readonly chName = 'mediaTimeline';
|
||||
public static shouldShare = true;
|
||||
public static requireCredential = false;
|
||||
private withReplies: boolean;
|
||||
|
||||
constructor(
|
||||
private metaService: MetaService,
|
||||
|
@ -30,6 +31,8 @@ class MediaTimelineChannel extends Channel {
|
|||
const policies = await this.roleService.getUserPolicies(this.user ? this.user.id : null);
|
||||
if (!policies.ltlAvailable) return;
|
||||
|
||||
this.withReplies = params.withReplies as boolean;
|
||||
|
||||
// Subscribe events
|
||||
this.subscriber.on('notesStream', this.onNote);
|
||||
}
|
||||
|
@ -54,7 +57,7 @@ class MediaTimelineChannel extends Channel {
|
|||
}
|
||||
|
||||
// 関係ない返信は除外
|
||||
if (note.reply && this.user && !this.user.showTimelineReplies) {
|
||||
if (note.reply && this.user && !this.withReplies) {
|
||||
const reply = note.reply;
|
||||
// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
|
||||
if (reply.userId !== this.user.id && note.userId !== this.user.id && reply.userId !== note.userId) return;
|
||||
|
|
|
@ -1,104 +0,0 @@
|
|||
<template>
|
||||
<MkPagination ref="pagingComponent" :pagination="pagination">
|
||||
<template #empty>
|
||||
<div class="_fullinfo">
|
||||
<img src="https://xn--931a.moe/assets/info.jpg" class="_ghost"/>
|
||||
<div>{{ i18n.ts.noNotifications }}</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template #default="{ items: notifications }">
|
||||
<XList v-slot="{ item: notification }" class="elsfgstc" :items="notifications" :no-gap="false">
|
||||
<XNote v-if="['reply', 'quote', 'mention'].includes(notification.type)" :key="notification.id" :note="notification.note" class="_panel"/>
|
||||
<XNotification v-else :key="notification.id" :notification="notification" :with-time="true" :full="true" class="_panel notification"/>
|
||||
</XList>
|
||||
</template>
|
||||
</MkPagination>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { defineComponent, markRaw, onUnmounted, onMounted, computed, ref } from 'vue';
|
||||
import { notificationTypes } from 'cherrypick-js';
|
||||
import MkPagination, { Paging } from '@/components/MkPagination.vue';
|
||||
import XNotification from '@/components/MkNotification.vue';
|
||||
import XList from '@/components/MkDateSeparatedList.vue';
|
||||
import XNote from '@/components/MkNote.vue';
|
||||
import * as os from '@/os';
|
||||
import { stream } from '@/stream';
|
||||
import { $i } from '@/account';
|
||||
import { i18n } from '@/i18n';
|
||||
|
||||
const props = defineProps<{
|
||||
includeTypes?: typeof notificationTypes[number][];
|
||||
unreadOnly?: boolean;
|
||||
}>();
|
||||
|
||||
const pagingComponent = ref<InstanceType<typeof MkPagination>>();
|
||||
|
||||
const pagination: Paging = {
|
||||
endpoint: 'i/notifications' as const,
|
||||
limit: 10,
|
||||
params: computed(() => ({
|
||||
includeTypes: props.includeTypes ?? undefined,
|
||||
excludeTypes: props.includeTypes ? undefined : $i.mutingNotificationTypes,
|
||||
unreadOnly: props.unreadOnly,
|
||||
})),
|
||||
};
|
||||
|
||||
const onNotification = (notification) => {
|
||||
const isMuted = props.includeTypes ? !props.includeTypes.includes(notification.type) : $i.mutingNotificationTypes.includes(notification.type);
|
||||
if (isMuted || document.visibilityState === 'visible') {
|
||||
stream.send('readNotification', {
|
||||
id: notification.id,
|
||||
});
|
||||
}
|
||||
|
||||
if (!isMuted) {
|
||||
pagingComponent.value.prepend({
|
||||
...notification,
|
||||
isRead: document.visibilityState === 'visible',
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
let connection;
|
||||
|
||||
onMounted(() => {
|
||||
connection = stream.useChannel('main');
|
||||
connection.on('notification', onNotification);
|
||||
connection.on('readAllNotifications', () => {
|
||||
if (pagingComponent.value) {
|
||||
for (const item of pagingComponent.value.queue) {
|
||||
item.isRead = true;
|
||||
}
|
||||
for (const item of pagingComponent.value.items) {
|
||||
item.isRead = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
connection.on('readNotifications', notificationIds => {
|
||||
if (pagingComponent.value) {
|
||||
for (let i = 0; i < pagingComponent.value.queue.length; i++) {
|
||||
if (notificationIds.includes(pagingComponent.value.queue[i].id)) {
|
||||
pagingComponent.value.queue[i].isRead = true;
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < (pagingComponent.value.items || []).length; i++) {
|
||||
if (notificationIds.includes(pagingComponent.value.items[i].id)) {
|
||||
pagingComponent.value.items[i].isRead = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
onUnmounted(() => {
|
||||
if (connection) connection.dispose();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.elsfgstc {
|
||||
//background: var(--panel);
|
||||
}
|
||||
</style>
|
|
@ -218,9 +218,9 @@ export default function(props: {
|
|||
}
|
||||
case 'ruby': {
|
||||
let rb, rt, tokens;
|
||||
token.children.forEach((t) => { if (t.type == 'text') { t.props.text = t.props.text.trim(); } });
|
||||
const children = token.children.filter((t) => t.type != 'text' || t.props.text != '');
|
||||
if (children.length == 1 && children[0].type == 'text') {
|
||||
token.children.forEach((t) => { if (t.type === 'text') { t.props.text = t.props.text.trim(); } });
|
||||
const children = token.children.filter((t) => t.type !== 'text' || t.props.text !== '');
|
||||
if (children.length === 1 && children[0].type === 'text') {
|
||||
tokens = children[0].props.text.split(' ');
|
||||
rb = [tokens[0]];
|
||||
rt = [tokens.slice(1).join(' ')];
|
||||
|
|
|
@ -206,6 +206,7 @@ import * as os from '@/os';
|
|||
import { definePageMetadata } from '@/scripts/page-metadata';
|
||||
import { claimAchievement, claimedAchievements } from '@/scripts/achievements';
|
||||
import { $i } from '@/account';
|
||||
import { instance } from '@/instance';
|
||||
|
||||
const patronsWithIconWithCherryPick = [{
|
||||
name: 'Inger 잉어',
|
||||
|
@ -353,6 +354,12 @@ const patronsWithMisskey = [
|
|||
];
|
||||
|
||||
let isKokonect = false;
|
||||
const instanceList = [
|
||||
'http://localhost:3000',
|
||||
'https://kokonect.link',
|
||||
'https://beta.kokonect.link',
|
||||
'https://universe.noridev.moe',
|
||||
];
|
||||
|
||||
let thereIsTreasure = $ref($i && !claimedAchievements.includes('foundTreasure'));
|
||||
|
||||
|
@ -361,8 +368,7 @@ let easterEggEmojis = $ref([]);
|
|||
let easterEggEngine = $ref(null);
|
||||
const containerEl = $shallowRef<HTMLElement>();
|
||||
|
||||
const meta = await os.api('meta', { detail: true });
|
||||
if (meta.uri == 'https://kokonect.link' || 'http://localhost:3000') isKokonect = true;
|
||||
if (instanceList.includes(<string>instance.uri)) isKokonect = true;
|
||||
|
||||
function iconLoaded() {
|
||||
const emojis = defaultStore.state.reactions;
|
||||
|
|
|
@ -198,7 +198,7 @@ function clear() {
|
|||
}
|
||||
|
||||
function saveDraft() {
|
||||
const drafts = JSON.parse(miLocalStorage.getItem('message_drafts') || '{}');
|
||||
const drafts = JSON.parse(miLocalStorage.getItem('message_drafts') ?? '{}');
|
||||
|
||||
drafts[draftKey] = {
|
||||
updatedAt: new Date(),
|
||||
|
@ -213,7 +213,7 @@ function saveDraft() {
|
|||
}
|
||||
|
||||
function deleteDraft() {
|
||||
const drafts = JSON.parse(miLocalStorage.getItem('message_drafts') || '{}');
|
||||
const drafts = JSON.parse(miLocalStorage.getItem('message_drafts') ?? '{}');
|
||||
|
||||
delete drafts[draftKey];
|
||||
|
||||
|
@ -221,7 +221,7 @@ function deleteDraft() {
|
|||
}
|
||||
|
||||
async function insertEmoji(ev: MouseEvent) {
|
||||
os.openEmojiPicker(ev.currentTarget ?? ev.target, {}, textEl);
|
||||
await os.openEmojiPicker(ev.currentTarget ?? ev.target, {}, textEl);
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
|
@ -232,7 +232,7 @@ onMounted(() => {
|
|||
//new Autocomplete(textEl, this, { model: 'text' });
|
||||
|
||||
// 書きかけの投稿を復元
|
||||
const draft = JSON.parse(miLocalStorage.getItem('message_drafts') || '{}')[draftKey];
|
||||
const draft = JSON.parse(miLocalStorage.getItem('message_drafts') ?? '{}')[draftKey];
|
||||
if (draft) {
|
||||
text = draft.data.text;
|
||||
file = draft.data.file;
|
||||
|
|
|
@ -112,7 +112,7 @@ async function addItem(ev: MouseEvent) {
|
|||
}];
|
||||
},
|
||||
},
|
||||
], ev.target || ev.currentTarget);
|
||||
], ev.currentTarget ?? ev.target );
|
||||
}
|
||||
|
||||
function removeItem(index: number) {
|
||||
|
|
|
@ -10,8 +10,8 @@ export async function editNickname(user: User) {
|
|||
placeholder: user.name || user.username,
|
||||
default: defaultStore.state.nicknameMap[user.id] ?? null,
|
||||
});
|
||||
if (canceled) return
|
||||
const newMap = {...defaultStore.state.nicknameMap};
|
||||
if (canceled) return;
|
||||
const newMap = { ...defaultStore.state.nicknameMap };
|
||||
if (result) {
|
||||
newMap[user.id] = result;
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue