From 0472d43ee97f1ac0fd13969b2111d67b322a947f Mon Sep 17 00:00:00 2001 From: Pinapelz Date: Mon, 28 Oct 2024 05:04:46 -0700 Subject: fix: encode RSS uris with escape sequences before fetching (#14826) Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com> --- packages/frontend/src/widgets/WidgetRss.vue | 2 +- packages/frontend/src/widgets/WidgetRssTicker.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'packages/frontend/src/widgets') diff --git a/packages/frontend/src/widgets/WidgetRss.vue b/packages/frontend/src/widgets/WidgetRss.vue index 3e43687709..92dc6d148e 100644 --- a/packages/frontend/src/widgets/WidgetRss.vue +++ b/packages/frontend/src/widgets/WidgetRss.vue @@ -70,7 +70,7 @@ const items = computed(() => rawItems.value.slice(0, widgetProps.maxEntries)); const fetching = ref(true); const fetchEndpoint = computed(() => { const url = new URL('/api/fetch-rss', base); - url.searchParams.set('url', widgetProps.url); + url.searchParams.set('url', encodeURIComponent(widgetProps.url)); return url; }); const intervalClear = ref<(() => void) | undefined>(); diff --git a/packages/frontend/src/widgets/WidgetRssTicker.vue b/packages/frontend/src/widgets/WidgetRssTicker.vue index 4f594b720f..6957878572 100644 --- a/packages/frontend/src/widgets/WidgetRssTicker.vue +++ b/packages/frontend/src/widgets/WidgetRssTicker.vue @@ -99,7 +99,7 @@ const items = computed(() => { const fetching = ref(true); const fetchEndpoint = computed(() => { const url = new URL('/api/fetch-rss', base); - url.searchParams.set('url', widgetProps.url); + url.searchParams.set('url', encodeURIComponent(widgetProps.url)); return url; }); const intervalClear = ref<(() => void) | undefined>(); -- cgit v1.2.3-freya From 17d9aca5a7ec6149a8dbf0c1607c81ab188e7015 Mon Sep 17 00:00:00 2001 From: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Thu, 31 Oct 2024 13:46:42 +0900 Subject: refactor(frontend): asとanyをすぐなおせる範囲で除去 (#14848) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor(frontend): できるだけanyを除去 * refactor * lint * fix * remove unused * Update packages/frontend/src/components/MkReactionsViewer.details.vue * Update packages/frontend/src/components/MkUsersTooltip.vue --------- Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com> --- .../frontend/src/components/MkAntennaEditor.vue | 2 +- .../frontend/src/components/MkChannelPreview.vue | 3 +- packages/frontend/src/components/MkDialog.vue | 4 +-- packages/frontend/src/components/MkDrive.vue | 8 +++--- .../src/components/MkEmojiPicker.section.vue | 2 +- packages/frontend/src/components/MkEmojiPicker.vue | 4 +-- .../src/components/MkExtensionInstaller.vue | 2 +- packages/frontend/src/components/MkInput.vue | 8 +++--- .../src/components/MkNotificationSelectWindow.vue | 2 +- .../frontend/src/components/MkObjectView.value.vue | 10 +++---- packages/frontend/src/components/MkPageWindow.vue | 2 +- packages/frontend/src/components/MkPopupMenu.vue | 2 +- packages/frontend/src/components/MkPostForm.vue | 20 +++---------- .../frontend/src/components/MkPostFormAttaches.vue | 8 +++--- .../frontend/src/components/MkPostFormDialog.vue | 16 ++--------- packages/frontend/src/components/MkRadio.vue | 8 +++--- .../src/components/MkReactionsViewer.details.vue | 3 +- packages/frontend/src/components/MkSuperMenu.vue | 33 ++++++++++++++++++++-- packages/frontend/src/components/MkUrlPreview.vue | 10 ++++--- .../components/MkUserAnnouncementEditDialog.vue | 8 ++++-- .../frontend/src/components/MkUsersTooltip.vue | 4 +-- packages/frontend/src/components/MkWindow.vue | 11 ++++++-- packages/frontend/src/components/form/suspense.vue | 6 ++-- packages/frontend/src/components/global/MkMfm.ts | 4 +-- packages/frontend/src/nirax.ts | 12 ++++---- packages/frontend/src/os.ts | 23 +++++++-------- packages/frontend/src/pages/admin/users.vue | 6 ++-- .../frontend/src/pages/custom-emojis-manager.vue | 26 ++++++++--------- packages/frontend/src/pages/emoji-edit-dialog.vue | 19 +++++++------ packages/frontend/src/pages/follow-requests.vue | 4 +-- packages/frontend/src/pages/lookup.vue | 2 +- packages/frontend/src/pages/my-clips/index.vue | 6 ++-- packages/frontend/src/pages/my-lists/list.vue | 4 +-- .../pages/page-editor/els/page-editor.el.image.vue | 5 ++-- .../pages/page-editor/els/page-editor.el.note.vue | 13 ++++++--- .../page-editor/els/page-editor.el.section.vue | 12 ++++---- .../pages/page-editor/els/page-editor.el.text.vue | 5 ++-- packages/frontend/src/pages/registry.keys.vue | 2 +- .../frontend/src/pages/reversi/game.setting.vue | 6 ++-- packages/frontend/src/pages/scratchpad.vue | 6 +++- .../frontend/src/pages/settings/2fa.qrdialog.vue | 7 +++-- packages/frontend/src/pages/settings/accounts.vue | 2 +- packages/frontend/src/pages/settings/apps.vue | 3 +- .../pages/settings/avatar-decoration.dialog.vue | 8 +++--- packages/frontend/src/pages/user/home.vue | 2 +- packages/frontend/src/router/definition.ts | 2 +- packages/frontend/src/router/main.ts | 8 +++--- packages/frontend/src/scripts/check-word-mute.ts | 3 +- packages/frontend/src/scripts/form.ts | 16 +++++------ packages/frontend/src/scripts/misskey-api.ts | 6 ++-- packages/frontend/src/scripts/select-file.ts | 6 ++-- packages/frontend/src/scripts/shuffle.ts | 5 ++-- packages/frontend/src/scripts/upload.ts | 8 +++--- packages/frontend/src/store.ts | 9 +++--- packages/frontend/src/types/post-form.ts | 22 +++++++++++++++ packages/frontend/src/widgets/WidgetPhotos.vue | 4 +-- 56 files changed, 250 insertions(+), 192 deletions(-) create mode 100644 packages/frontend/src/types/post-form.ts (limited to 'packages/frontend/src/widgets') diff --git a/packages/frontend/src/components/MkAntennaEditor.vue b/packages/frontend/src/components/MkAntennaEditor.vue index 2386ba6fa7..e622d57f1e 100644 --- a/packages/frontend/src/components/MkAntennaEditor.vue +++ b/packages/frontend/src/components/MkAntennaEditor.vue @@ -160,7 +160,7 @@ async function deleteAntenna() { function addUser() { os.selectUser({ includeSelf: true }).then(user => { users.value = users.value.trim(); - users.value += '\n@' + Misskey.acct.toString(user as any); + users.value += '\n@' + Misskey.acct.toString(user); users.value = users.value.trim(); }); } diff --git a/packages/frontend/src/components/MkChannelPreview.vue b/packages/frontend/src/components/MkChannelPreview.vue index 99580df5e2..c470042b79 100644 --- a/packages/frontend/src/components/MkChannelPreview.vue +++ b/packages/frontend/src/components/MkChannelPreview.vue @@ -47,11 +47,12 @@ SPDX-License-Identifier: AGPL-3.0-only diff --git a/packages/frontend/src/components/MkEmojiPicker.vue b/packages/frontend/src/components/MkEmojiPicker.vue index 219950f135..8187d991e7 100644 --- a/packages/frontend/src/components/MkEmojiPicker.vue +++ b/packages/frontend/src/components/MkEmojiPicker.vue @@ -409,7 +409,7 @@ function computeButtonTitle(ev: MouseEvent): void { elm.title = getEmojiName(emoji); } -function chosen(emoji: any, ev?: MouseEvent) { +function chosen(emoji: string | Misskey.entities.EmojiSimple | UnicodeEmojiDef, ev?: MouseEvent) { const el = ev && (ev.currentTarget ?? ev.target) as HTMLElement | null | undefined; if (el) { const rect = el.getBoundingClientRect(); @@ -426,7 +426,7 @@ function chosen(emoji: any, ev?: MouseEvent) { // 最近使った絵文字更新 if (!pinned.value?.includes(key)) { let recents = defaultStore.state.recentlyUsedEmojis; - recents = recents.filter((emoji: any) => emoji !== key); + recents = recents.filter((emoji) => emoji !== key); recents.unshift(key); defaultStore.set('recentlyUsedEmojis', recents.splice(0, 32)); } diff --git a/packages/frontend/src/components/MkExtensionInstaller.vue b/packages/frontend/src/components/MkExtensionInstaller.vue index b41604b2c3..d59b20435e 100644 --- a/packages/frontend/src/components/MkExtensionInstaller.vue +++ b/packages/frontend/src/components/MkExtensionInstaller.vue @@ -73,7 +73,7 @@ export type Extension = { author: string; description?: string; permissions?: string[]; - config?: Record; + config?: Record; }; } | { type: 'theme'; diff --git a/packages/frontend/src/components/MkInput.vue b/packages/frontend/src/components/MkInput.vue index e01ff86c5a..08817fd6a8 100644 --- a/packages/frontend/src/components/MkInput.vue +++ b/packages/frontend/src/components/MkInput.vue @@ -44,7 +44,7 @@ SPDX-License-Identifier: AGPL-3.0-only diff --git a/packages/frontend/src/components/MkPageWindow.vue b/packages/frontend/src/components/MkPageWindow.vue index 4777da2848..02c84df447 100644 --- a/packages/frontend/src/components/MkPageWindow.vue +++ b/packages/frontend/src/components/MkPageWindow.vue @@ -58,7 +58,7 @@ const windowRouter = routerFactory(props.initialPath); const contents = shallowRef(null); const pageMetadata = ref(null); const windowEl = shallowRef>(); -const history = ref<{ path: string; key: any; }[]>([{ +const history = ref<{ path: string; key: string; }[]>([{ path: windowRouter.getCurrentPath(), key: windowRouter.getCurrentKey(), }]); diff --git a/packages/frontend/src/components/MkPopupMenu.vue b/packages/frontend/src/components/MkPopupMenu.vue index 26c251a8d2..df664e49f7 100644 --- a/packages/frontend/src/components/MkPopupMenu.vue +++ b/packages/frontend/src/components/MkPopupMenu.vue @@ -19,7 +19,7 @@ defineProps<{ items: MenuItem[]; align?: 'center' | string; width?: number; - src?: any; + src?: HTMLElement | null; returnFocusTo?: HTMLElement | null; }>(); diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index b6b80082d3..f2fe048449 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -129,25 +129,13 @@ import { miLocalStorage } from '@/local-storage.js'; import { claimAchievement } from '@/scripts/achievements.js'; import { emojiPicker } from '@/scripts/emoji-picker.js'; import { mfmFunctionPicker } from '@/scripts/mfm-function-picker.js'; +import type { PostFormProps } from '@/types/post-form.js'; const $i = signinRequired(); const modal = inject('modal'); -const props = withDefaults(defineProps<{ - reply?: Misskey.entities.Note; - renote?: Misskey.entities.Note; - channel?: Misskey.entities.Channel; // TODO - mention?: Misskey.entities.User; - specified?: Misskey.entities.UserDetailed; - initialText?: string; - initialCw?: string; - initialVisibility?: (typeof Misskey.noteVisibilities)[number]; - initialFiles?: Misskey.entities.DriveFile[]; - initialLocalOnly?: boolean; - initialVisibleUsers?: Misskey.entities.UserDetailed[]; - initialNote?: Misskey.entities.Note; - instant?: boolean; +const props = withDefaults(defineProps { - if (typeof key !== 'string') return; + }, (key, value) => { + if (typeof key !== 'string' || typeof value !== 'string') return; if (key === 'text') { text.value = value; } if (key === 'cw') { useCw.value = value !== null; cw.value = value; } }); diff --git a/packages/frontend/src/components/MkPostFormAttaches.vue b/packages/frontend/src/components/MkPostFormAttaches.vue index ee7038df64..56e026aa3c 100644 --- a/packages/frontend/src/components/MkPostFormAttaches.vue +++ b/packages/frontend/src/components/MkPostFormAttaches.vue @@ -6,7 +6,7 @@ SPDX-License-Identifier: AGPL-3.0-only