From 587ab8500abb2d8b0a494dc05952c9919cc7f66f Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Mon, 2 Mar 2026 16:05:12 -0500 Subject: split url into webUrl and localUrl (like mastodon) --- packages/frontend/src/accounts.ts | 20 ++++++++-------- packages/frontend/src/aiscript/api.ts | 4 ++-- .../frontend/src/components/MkAccountMoved.vue | 2 +- packages/frontend/src/components/MkDonation.vue | 14 +++++++++-- .../src/components/MkEmbedCodeGenDialog.vue | 4 ++-- .../frontend/src/components/MkFollowButton.vue | 4 ++-- packages/frontend/src/components/MkLink.vue | 4 ++-- packages/frontend/src/components/MkMention.vue | 2 +- packages/frontend/src/components/MkNote.vue | 4 ++-- .../frontend/src/components/MkNoteDetailed.vue | 4 ++-- packages/frontend/src/components/MkPageWindow.vue | 6 ++--- packages/frontend/src/components/MkPoll.vue | 4 ++-- packages/frontend/src/components/MkPostForm.vue | 10 ++++---- packages/frontend/src/components/MkPreview.vue | 2 +- .../frontend/src/components/MkSignin.input.vue | 2 +- .../src/components/MkSignupDialog.form.vue | 2 +- .../src/components/MkSourceCodeAvailablePopup.vue | 6 ++--- .../frontend/src/components/MkTutorialDialog.vue | 4 ++-- packages/frontend/src/components/MkUrlPreview.vue | 4 ++-- .../frontend/src/components/MkUserSelectDialog.vue | 4 ++-- .../frontend/src/components/MkUserSetupDialog.vue | 6 ++--- packages/frontend/src/components/global/MkA.vue | 4 ++-- packages/frontend/src/components/global/MkAcct.vue | 4 ++-- packages/frontend/src/components/global/MkAd.vue | 4 ++-- packages/frontend/src/components/global/MkMfm.ts | 4 ++-- packages/frontend/src/components/global/MkUrl.vue | 4 ++-- packages/frontend/src/filters/user.ts | 4 ++-- packages/frontend/src/pages/about-misskey.vue | 4 ++-- packages/frontend/src/pages/about.overview.vue | 6 ++--- packages/frontend/src/pages/admin-user.vue | 4 ++-- packages/frontend/src/pages/admin/branding.vue | 6 ++--- packages/frontend/src/pages/channel.vue | 6 ++--- packages/frontend/src/pages/chat/XMessage.vue | 4 ++-- packages/frontend/src/pages/clip.vue | 6 ++--- packages/frontend/src/pages/flash/flash.vue | 12 +++++----- packages/frontend/src/pages/gallery/post.vue | 10 ++++---- packages/frontend/src/pages/note.vue | 4 ++-- .../frontend/src/pages/page-editor/page-editor.vue | 4 ++-- packages/frontend/src/pages/page.vue | 10 ++++---- packages/frontend/src/pages/qr.show.vue | 6 ++--- packages/frontend/src/pages/reversi/game.board.vue | 4 ++-- packages/frontend/src/pages/reversi/game.vue | 4 ++-- packages/frontend/src/pages/search.note.vue | 4 ++-- .../frontend/src/pages/settings/2fa.qrdialog.vue | 4 ++-- packages/frontend/src/pages/theme-editor.vue | 2 +- packages/frontend/src/pages/welcome.setup.vue | 4 ++-- packages/frontend/src/preferences/manager.ts | 28 +++++++++++----------- packages/frontend/src/ui/_common_/common.ts | 4 ++-- packages/frontend/src/ui/_common_/titlebar.vue | 4 ++-- packages/frontend/src/utility/get-embed-code.ts | 6 ++--- packages/frontend/src/utility/get-note-menu.ts | 8 +++---- packages/frontend/src/utility/get-user-menu.ts | 8 +++---- .../image-frame-renderer/ImageFrameRenderer.ts | 4 ++-- packages/frontend/src/utility/media-proxy.ts | 8 +++---- packages/frontend/src/utility/popout.ts | 2 +- packages/frontend/src/utility/url-preview.ts | 4 ++-- .../src/utility/watermark/WatermarkRenderer.ts | 4 ++-- .../frontend/src/widgets/WidgetInstanceInfo.vue | 4 ++-- packages/frontend/src/widgets/WidgetRss.vue | 2 +- packages/frontend/src/widgets/WidgetRssTicker.vue | 2 +- 60 files changed, 169 insertions(+), 159 deletions(-) (limited to 'packages/frontend/src') diff --git a/packages/frontend/src/accounts.ts b/packages/frontend/src/accounts.ts index 862ef4e113..849b90efaa 100644 --- a/packages/frontend/src/accounts.ts +++ b/packages/frontend/src/accounts.ts @@ -5,7 +5,7 @@ import { defineAsyncComponent, ref } from 'vue'; import * as Misskey from 'misskey-js'; -import { apiUrl, host } from '@@/js/config.js'; +import { apiUrl, localHost } from '@@/js/config.js'; import type { MenuItem } from '@/types/menu.js'; import { showSuspendedDialog } from '@/utility/show-suspended-dialog.js'; import { i18n } from '@/i18n.js'; @@ -131,7 +131,7 @@ export function updateCurrentAccount(accountData: Misskey.entities.MeDetailed) { for (const [key, value] of Object.entries(accountData)) { ($i[key as keyof typeof accountData] as any) = value; } - store.set('accountInfos', { ...store.s.accountInfos, [host + '/' + $i.id]: $i }); + store.set('accountInfos', { ...store.s.accountInfos, [localHost + '/' + $i.id]: $i }); $i.token = token; miLocalStorage.setItem('account', JSON.stringify($i)); } @@ -142,7 +142,7 @@ export function updateCurrentAccountPartial(accountData: Partial { if (reason === isAccountDeleted) { - removeAccount(host, me.id); + removeAccount(localHost, me.id); if (Object.keys(store.s.accountTokens).length > 0) { login(Object.values(store.s.accountTokens)[0]); } else { @@ -181,7 +181,7 @@ export async function login(token: AccountWithToken['token'], redirect?: string) token, })); - await addAccount(host, me, token); + await addAccount(localHost, me, token); if (redirect) { // 他のタブは再読み込みするだけ @@ -296,7 +296,7 @@ export async function getAccountMenu(opts: { }); if (opts.includeCurrentAccount) { - menuItems.push(createItem(host, $i.id, $i.username, $i, $i.token)); + menuItems.push(createItem(localHost, $i.id, $i.username, $i, $i.token)); } menuItems.push(...accountItems); @@ -319,7 +319,7 @@ export async function getAccountMenu(opts: { action: () => { getAccountWithSignupDialog().then(res => { if (res != null) { - switchAccount(host, res.id); + switchAccount(localHost, res.id); } }); }, @@ -332,7 +332,7 @@ export async function getAccountMenu(opts: { }); } else { if (opts.includeCurrentAccount) { - menuItems.push(createItem(host, $i.id, $i.username, $i, $i.token)); + menuItems.push(createItem(localHost, $i.id, $i.username, $i, $i.token)); } menuItems.push(...accountItems); @@ -346,7 +346,7 @@ export function getAccountWithSigninDialog(): Promise<{ id: string, token: strin const { dispose } = popup(defineAsyncComponent(() => import('@/components/MkSigninDialog.vue')), {}, { done: async (res: Misskey.entities.SigninFlowResponse & { finished: true }) => { const user = await fetchAccount(res.i, res.id, true); - await addAccount(host, user, res.i); + await addAccount(localHost, user, res.i); resolve({ id: res.id, token: res.i }); }, cancelled: () => { @@ -365,7 +365,7 @@ export function getAccountWithSignupDialog(): Promise<{ id: string, token: strin done: async (res: Misskey.entities.SignupResponse) => { const user = JSON.parse(JSON.stringify(res)); delete user.token; - await addAccount(host, user, res.token); + await addAccount(localHost, user, res.token); resolve({ id: res.id, token: res.token }); }, cancelled: () => { diff --git a/packages/frontend/src/aiscript/api.ts b/packages/frontend/src/aiscript/api.ts index 3a476787fe..4cc7c88963 100644 --- a/packages/frontend/src/aiscript/api.ts +++ b/packages/frontend/src/aiscript/api.ts @@ -5,7 +5,7 @@ import { errors, utils, values } from '@syuilo/aiscript'; import * as Misskey from 'misskey-js'; -import { url, lang } from '@@/js/config.js'; +import { webUrl, lang } from '@@/js/config.js'; import { assertStringAndIsIn } from './common.js'; import * as os from '@/os.js'; import { misskeyApi } from '@/utility/misskey-api.js'; @@ -39,7 +39,7 @@ export function createAiScriptEnv(opts: { storageKey: string, token?: string }) USER_USERNAME: $i ? values.STR($i.username) : values.NULL, CUSTOM_EMOJIS: utils.jsToVal(customEmojis.value), LOCALE: values.STR(lang), - SERVER_URL: values.STR(url), + SERVER_URL: values.STR(webUrl), 'Mk:dialog': values.FN_NATIVE(async ([_title, _text, _type]) => { let title: string | undefined = undefined; let text: string | undefined = undefined; diff --git a/packages/frontend/src/components/MkAccountMoved.vue b/packages/frontend/src/components/MkAccountMoved.vue index cb8032c019..e101c04793 100644 --- a/packages/frontend/src/components/MkAccountMoved.vue +++ b/packages/frontend/src/components/MkAccountMoved.vue @@ -16,7 +16,7 @@ import { ref } from 'vue'; import * as Misskey from 'misskey-js'; import MkMention from './MkMention.vue'; import { i18n } from '@/i18n.js'; -import { host as localHost } from '@@/js/config.js'; +import { localHost } from '@@/js/config.js'; import { misskeyApi } from '@/utility/misskey-api.js'; const user = ref(); diff --git a/packages/frontend/src/components/MkDonation.vue b/packages/frontend/src/components/MkDonation.vue index 0e0da64750..b7ee704b47 100644 --- a/packages/frontend/src/components/MkDonation.vue +++ b/packages/frontend/src/components/MkDonation.vue @@ -19,13 +19,23 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.learnMore }}
+
+ + + +
+ {{ i18n.ts.learnMore }} +
+
{{ i18n.ts.remindMeLater }} {{ i18n.ts.neverShow }} @@ -38,7 +48,7 @@ SPDX-License-Identifier: AGPL-3.0-only diff --git a/packages/frontend/src/components/global/MkAd.vue b/packages/frontend/src/components/global/MkAd.vue index c592079f03..14a1c71e10 100644 --- a/packages/frontend/src/components/global/MkAd.vue +++ b/packages/frontend/src/components/global/MkAd.vue @@ -30,7 +30,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
Ads by {{ host }}
+
Ads by {{ webHost }}
{{ i18n.ts._ad.reduceFrequencyOfThisAd }} @@ -40,7 +40,7 @@ SPDX-License-Identifier: AGPL-3.0-only `, + ``, + ``, ]; return iframeCode.join('\n'); } diff --git a/packages/frontend/src/utility/get-note-menu.ts b/packages/frontend/src/utility/get-note-menu.ts index 78176970f1..a630d3405a 100644 --- a/packages/frontend/src/utility/get-note-menu.ts +++ b/packages/frontend/src/utility/get-note-menu.ts @@ -4,7 +4,7 @@ */ import * as Misskey from 'misskey-js'; -import { url } from '@@/js/config.js'; +import { webUrl } from '@@/js/config.js'; import { claimAchievement } from './achievements.js'; import type { Ref, ShallowRef } from 'vue'; import type { MenuItem } from '@/types/menu.js'; @@ -140,7 +140,7 @@ export function getAbuseNoteMenu(note: Misskey.entities.Note, text: string): Men icon: 'ti ti-exclamation-circle', text, action: async (): Promise => { - const localUrl = `${url}/notes/${note.id}`; + const localUrl = `${webUrl}/notes/${note.id}`; let noteInfo = ''; if (note.url ?? note.uri != null) noteInfo = `Note: ${note.url ?? note.uri}\n`; noteInfo += `Local Note: ${localUrl}\n`; @@ -159,7 +159,7 @@ export function getCopyNoteLinkMenu(note: Misskey.entities.Note, text: string): icon: 'ti ti-link', text, action: (): void => { - copyToClipboard(`${url}/notes/${note.id}`); + copyToClipboard(`${webUrl}/notes/${note.id}`); }, }; } @@ -279,7 +279,7 @@ export function getNoteMenu(props: { navigator.share({ title: i18n.tsx.noteOf({ user: appearNote.user.name ?? appearNote.user.username }), text: appearNote.text ?? '', - url: `${url}/notes/${appearNote.id}`, + url: `${webUrl}/notes/${appearNote.id}`, }); } diff --git a/packages/frontend/src/utility/get-user-menu.ts b/packages/frontend/src/utility/get-user-menu.ts index 9b2c53360c..fc77ec8e54 100644 --- a/packages/frontend/src/utility/get-user-menu.ts +++ b/packages/frontend/src/utility/get-user-menu.ts @@ -6,7 +6,7 @@ import { toUnicode } from 'punycode.js'; import { defineAsyncComponent, ref, watch } from 'vue'; import * as Misskey from 'misskey-js'; -import { host, url } from '@@/js/config.js'; +import { localHost, webUrl } from '@@/js/config.js'; import type { Router } from '@/router.js'; import type { MenuItem } from '@/types/menu.js'; import { i18n } from '@/i18n.js'; @@ -171,7 +171,7 @@ export function getUserMenu(user: Misskey.entities.UserDetailed, router: Router icon: 'ti ti-at', text: i18n.ts.copyUsername, action: () => { - copyToClipboard(`@${user.username}@${user.host ?? host}`); + copyToClipboard(`@${user.username}@${user.host ?? localHost}`); }, }); @@ -180,7 +180,7 @@ export function getUserMenu(user: Misskey.entities.UserDetailed, router: Router text: i18n.ts.copyProfileUrl, action: () => { const canonical = user.host === null ? `@${user.username}` : `@${user.username}@${toUnicode(user.host)}`; - copyToClipboard(`${url}/${canonical}`); + copyToClipboard(`${webUrl}/${canonical}`); }, }); @@ -188,7 +188,7 @@ export function getUserMenu(user: Misskey.entities.UserDetailed, router: Router icon: 'ti ti-rss', text: i18n.ts.copyRSS, action: () => { - copyToClipboard(`${user.host ?? host}/@${user.username}.atom`); + copyToClipboard(`${user.host ?? localHost}/@${user.username}.atom`); }, }); diff --git a/packages/frontend/src/utility/image-frame-renderer/ImageFrameRenderer.ts b/packages/frontend/src/utility/image-frame-renderer/ImageFrameRenderer.ts index 591a94b855..0a33caf238 100644 --- a/packages/frontend/src/utility/image-frame-renderer/ImageFrameRenderer.ts +++ b/packages/frontend/src/utility/image-frame-renderer/ImageFrameRenderer.ts @@ -4,7 +4,7 @@ */ import QRCodeStyling from 'qr-code-styling'; -import { url } from '@@/js/config.js'; +import { webUrl } from '@@/js/config.js'; import ExifReader from 'exifreader'; import { FN_frame } from './frame.js'; import { ImageCompositor } from '@/lib/ImageCompositor.js'; @@ -159,7 +159,7 @@ export class ImageFrameRenderer { height: labelCanvasCtx.canvas.height, margin: 0, type: 'canvas', - data: `${url}/users/${$i.id}`, + data: `${webUrl}/users/${$i.id}`, //image: $i.avatarUrl, qrOptions: { typeNumber: 0, diff --git a/packages/frontend/src/utility/media-proxy.ts b/packages/frontend/src/utility/media-proxy.ts index 78eba35ead..d93c0448d1 100644 --- a/packages/frontend/src/utility/media-proxy.ts +++ b/packages/frontend/src/utility/media-proxy.ts @@ -4,14 +4,14 @@ */ import { MediaProxy } from '@@/js/media-proxy.js'; -import { url } from '@@/js/config.js'; +import { webUrl } from '@@/js/config.js'; import { instance } from '@/instance.js'; let _mediaProxy: MediaProxy | null = null; export function getProxiedImageUrl(...args: Parameters): string { if (_mediaProxy == null) { - _mediaProxy = new MediaProxy(instance, url); + _mediaProxy = new MediaProxy(instance, webUrl); } return _mediaProxy.getProxiedImageUrl(...args); @@ -19,7 +19,7 @@ export function getProxiedImageUrl(...args: Parameters): string | null { if (_mediaProxy == null) { - _mediaProxy = new MediaProxy(instance, url); + _mediaProxy = new MediaProxy(instance, webUrl); } return _mediaProxy.getProxiedImageUrlNullable(...args); @@ -27,7 +27,7 @@ export function getProxiedImageUrlNullable(...args: Parameters): string { if (_mediaProxy == null) { - _mediaProxy = new MediaProxy(instance, url); + _mediaProxy = new MediaProxy(instance, webUrl); } return _mediaProxy.getStaticImageUrl(...args); diff --git a/packages/frontend/src/utility/popout.ts b/packages/frontend/src/utility/popout.ts index 7e0222c459..cf5de9e22f 100644 --- a/packages/frontend/src/utility/popout.ts +++ b/packages/frontend/src/utility/popout.ts @@ -7,7 +7,7 @@ import { appendQuery } from '@@/js/url.js'; import * as config from '@@/js/config.js'; export function popout(path: string, w?: HTMLElement) { - let url = path.startsWith('http://') || path.startsWith('https://') ? path : config.url + path; + let url = path.startsWith('http://') || path.startsWith('https://') ? path : config.webUrl + path; url = appendQuery(url, 'zen'); if (w) { const position = w.getBoundingClientRect(); diff --git a/packages/frontend/src/utility/url-preview.ts b/packages/frontend/src/utility/url-preview.ts index 5ed809a5af..11936f7ae6 100644 --- a/packages/frontend/src/utility/url-preview.ts +++ b/packages/frontend/src/utility/url-preview.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ import { computed } from 'vue'; -import { hostname } from '@@/js/config.js'; +import { webHost } from '@@/js/config.js'; import { instance } from '@/instance.js'; import { prefer } from '@/preferences.js'; @@ -18,7 +18,7 @@ export function transformPlayerUrl(url: string): string { if (urlObj.hostname === 'player.twitch.tv' || urlObj.hostname === 'clips.twitch.tv') { // TwitchはCSPの制約あり // https://dev.twitch.tv/docs/embed/video-and-clips/ - urlParams.set('parent', hostname); + urlParams.set('parent', webHost); urlParams.set('allowfullscreen', ''); urlParams.set('autoplay', 'true'); } else { diff --git a/packages/frontend/src/utility/watermark/WatermarkRenderer.ts b/packages/frontend/src/utility/watermark/WatermarkRenderer.ts index 32341a9e10..52460f0d58 100644 --- a/packages/frontend/src/utility/watermark/WatermarkRenderer.ts +++ b/packages/frontend/src/utility/watermark/WatermarkRenderer.ts @@ -4,7 +4,7 @@ */ import QRCodeStyling from 'qr-code-styling'; -import { url, host } from '@@/js/config.js'; +import { webUrl } from '@@/js/config.js'; import { getProxiedImageUrl } from '../media-proxy.js'; import { fn as fn_watermark } from './watermark.js'; import { fn as fn_stripe } from '@/utility/image-compositor-functions/stripe.js'; @@ -300,7 +300,7 @@ async function createTextureFromQr(options: { data: string | null }, resolution height: resolution, margin: 42, type: 'canvas', - data: options.data == null || options.data === '' ? `${url}/users/${$i.id}` : options.data, + data: options.data == null || options.data === '' ? `${webUrl}/users/${$i.id}` : options.data, image: $i.avatarUrl, qrOptions: { typeNumber: 0, diff --git a/packages/frontend/src/widgets/WidgetInstanceInfo.vue b/packages/frontend/src/widgets/WidgetInstanceInfo.vue index 7e6a779cf0..18a50ff97a 100644 --- a/packages/frontend/src/widgets/WidgetInstanceInfo.vue +++ b/packages/frontend/src/widgets/WidgetInstanceInfo.vue @@ -12,7 +12,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ instance.name }} -
{{ host }}
+
{{ webHost }}
@@ -20,7 +20,7 @@ SPDX-License-Identifier: AGPL-3.0-only