embedページの判定をconfig.tsに移行

This commit is contained in:
kakkokari-gtyih 2024-06-29 17:18:32 +09:00
parent 1926fa304b
commit 237605d6b8
9 changed files with 24 additions and 26 deletions

View File

@ -7,11 +7,11 @@
// よって、devモードとして起動されるときはビルド時に組み込む形としておく。 // よって、devモードとして起動されるときはビルド時に組み込む形としておく。
// (pnpm start時はpugファイルの中で静的リソースとして読み込むようになっており、この問題は起こっていない) // (pnpm start時はpugファイルの中で静的リソースとして読み込むようになっており、この問題は起こっていない)
import '@tabler/icons-webfont/dist/tabler-icons.scss'; import '@tabler/icons-webfont/dist/tabler-icons.scss';
import { isEmbedPage } from '@/scripts/embed-page.js'; import { embedPage } from '@/config.js';
await main(); await main();
if (isEmbedPage()) { if (embedPage) {
import('@/_embed_boot_.js'); import('@/_embed_boot_.js');
} else { } else {
import('@/_boot_.js'); import('@/_boot_.js');

View File

@ -14,7 +14,7 @@ import { apiUrl } from '@/config.js';
import { waiting, popup, popupMenu, success, alert } from '@/os.js'; import { waiting, popup, popupMenu, success, alert } from '@/os.js';
import { misskeyApi } from '@/scripts/misskey-api.js'; import { misskeyApi } from '@/scripts/misskey-api.js';
import { unisonReload, reloadChannel } from '@/scripts/unison-reload.js'; import { unisonReload, reloadChannel } from '@/scripts/unison-reload.js';
import { isEmbedPage } from '@/scripts/embed-page.js'; import { embedPage } from '@/config.js';
// TODO: 他のタブと永続化されたstateを同期 // TODO: 他のタブと永続化されたstateを同期
@ -23,7 +23,7 @@ type Account = Misskey.entities.MeDetailed & { token: string };
const accountData = miLocalStorage.getItem('account'); const accountData = miLocalStorage.getItem('account');
function initAccount() { function initAccount() {
if (isEmbedPage()) return null; if (embedPage) return null;
if (accountData) return reactive(JSON.parse(accountData) as Account); if (accountData) return reactive(JSON.parse(accountData) as Account);
return null; return null;
} }
@ -85,13 +85,13 @@ export async function signout() {
} }
export async function getAccounts(): Promise<{ id: Account['id'], token: Account['token'] }[]> { export async function getAccounts(): Promise<{ id: Account['id'], token: Account['token'] }[]> {
if (isEmbedPage()) return []; if (embedPage) return [];
return (await get('accounts')) || []; return (await get('accounts')) || [];
} }
export async function addAccount(id: Account['id'], token: Account['token']) { export async function addAccount(id: Account['id'], token: Account['token']) {
if (isEmbedPage()) return; if (embedPage) return;
const accounts = await getAccounts(); const accounts = await getAccounts();
if (!accounts.some(x => x.id === id)) { if (!accounts.some(x => x.id === id)) {
@ -194,7 +194,7 @@ export async function refreshAccount() {
} }
export async function login(token: Account['token'], redirect?: string) { export async function login(token: Account['token'], redirect?: string) {
if (isEmbedPage()) return; if (embedPage) return;
const showing = ref(true); const showing = ref(true);
popup(defineAsyncComponent(() => import('@/components/MkWaitingDialog.vue')), { popup(defineAsyncComponent(() => import('@/components/MkWaitingDialog.vue')), {

View File

@ -21,6 +21,7 @@ export const version = _VERSION_;
export const instanceName = siteName === 'Misskey' || siteName == null ? host : siteName; export const instanceName = siteName === 'Misskey' || siteName == null ? host : siteName;
export const ui = miLocalStorage.getItem('ui'); export const ui = miLocalStorage.getItem('ui');
export const debug = miLocalStorage.getItem('debug') === 'true'; export const debug = miLocalStorage.getItem('debug') === 'true';
export const embedPage = location.pathname.startsWith('/embed');
export function updateLocale(newLocale): void { export function updateLocale(newLocale): void {
locale = newLocale; locale = newLocale;

View File

@ -47,20 +47,20 @@ const safeSessionStorage = new Map<Keys, string>();
export const miLocalStorage = { export const miLocalStorage = {
getItem: (key: Keys): string | null => { getItem: (key: Keys): string | null => {
if (isEmbedPage()) { if (embedPage) {
return safeSessionStorage.get(key) ?? null; return safeSessionStorage.get(key) ?? null;
} }
return window.localStorage.getItem(key); return window.localStorage.getItem(key);
}, },
setItem: (key: Keys, value: string): void => { setItem: (key: Keys, value: string): void => {
if (isEmbedPage()) { if (embedPage) {
safeSessionStorage.set(key, value); safeSessionStorage.set(key, value);
} else { } else {
window.localStorage.setItem(key, value); window.localStorage.setItem(key, value);
} }
}, },
removeItem: (key: Keys): void => { removeItem: (key: Keys): void => {
if (isEmbedPage()) { if (embedPage) {
safeSessionStorage.delete(key); safeSessionStorage.delete(key);
} else { } else {
window.localStorage.removeItem(key); window.localStorage.removeItem(key);
@ -78,7 +78,7 @@ export const miLocalStorage = {
}, },
}; };
if (isEmbedPage()) { if (embedPage) {
initEmbedPageLocalStorage(); initEmbedPageLocalStorage();
if (_DEV_) console.warn('Using safeSessionStorage as localStorage alternative'); if (_DEV_) console.warn('Using safeSessionStorage as localStorage alternative');
} }

View File

@ -24,7 +24,7 @@ import MkContextMenu from '@/components/MkContextMenu.vue';
import { MenuItem } from '@/types/menu.js'; import { MenuItem } from '@/types/menu.js';
import copyToClipboard from '@/scripts/copy-to-clipboard.js'; import copyToClipboard from '@/scripts/copy-to-clipboard.js';
import { showMovedDialog } from '@/scripts/show-moved-dialog.js'; import { showMovedDialog } from '@/scripts/show-moved-dialog.js';
import { isEmbedPage } from '@/scripts/embed-page.js'; import { embedPage } from '@/config.js';
export const openingWindowsCount = ref(0); export const openingWindowsCount = ref(0);
@ -173,7 +173,7 @@ export async function popup<T extends Component>(
events: ComponentEmit<T> = {} as ComponentEmit<T>, events: ComponentEmit<T> = {} as ComponentEmit<T>,
disposeEvent?: keyof ComponentEmit<T>, disposeEvent?: keyof ComponentEmit<T>,
): Promise<{ dispose: () => void }> { ): Promise<{ dispose: () => void }> {
if (isEmbedPage()) return { dispose: () => {} }; if (embedPage) return { dispose: () => {} };
markRaw(component); markRaw(component);
@ -633,8 +633,8 @@ export function popupMenu(items: MenuItem[], src?: HTMLElement | EventTarget | n
} }
export function contextMenu(items: MenuItem[], ev: MouseEvent): Promise<void> { export function contextMenu(items: MenuItem[], ev: MouseEvent): Promise<void> {
if (isEmbedPage()) return Promise.resolve(); if (embedPage) return Promise.resolve();
ev.preventDefault(); ev.preventDefault();
return new Promise(resolve => { return new Promise(resolve => {
let dispose; let dispose;

View File

@ -4,17 +4,14 @@
*/ */
import { miLocalStorage } from "@/local-storage.js"; import { miLocalStorage } from "@/local-storage.js";
import type { Keys } from "@/local-storage.js"; import type { Keys } from "@/local-storage.js";
import { embedPage } from "@/config.js";
export function isEmbedPage() {
return location.pathname.startsWith('/embed');
}
/** /**
* EmbedページではlocalStorageを使用できないようにしているが * EmbedページではlocalStorageを使用できないようにしているが
* safeSessionStoragemiLocalStorage内のやつ * safeSessionStoragemiLocalStorage内のやつ
*/ */
export function initEmbedPageLocalStorage() { export function initEmbedPageLocalStorage() {
if (!isEmbedPage()) { if (!embedPage) {
return; return;
} }

View File

@ -10,12 +10,12 @@ import {
set as iset, set as iset,
del as idel, del as idel,
} from 'idb-keyval'; } from 'idb-keyval';
import { isEmbedPage } from './embed-page.js'; import { embedPage } from '@/config.js';
import { miLocalStorage } from '@/local-storage.js'; import { miLocalStorage } from '@/local-storage.js';
const PREFIX = 'idbfallback::'; const PREFIX = 'idbfallback::';
let idbAvailable = typeof window !== 'undefined' ? !!(window.indexedDB && typeof window.indexedDB.open === 'function' && !isEmbedPage()) : true; let idbAvailable = typeof window !== 'undefined' ? !!(window.indexedDB && typeof window.indexedDB.open === 'function' && !embedPage) : true;
// iframe.contentWindow.indexedDB.deleteDatabase() がchromeのバグで使用できないため、indexedDBを無効化している。 // iframe.contentWindow.indexedDB.deleteDatabase() がchromeのバグで使用できないため、indexedDBを無効化している。
// バグが治って再度有効化するのであれば、cypressのコマンド内のコメントアウトを外すこと // バグが治って再度有効化するのであれば、cypressのコマンド内のコメントアウトを外すこと

View File

@ -11,7 +11,7 @@ import { globalEvents } from '@/events.js';
import lightTheme from '@/themes/_light.json5'; import lightTheme from '@/themes/_light.json5';
import darkTheme from '@/themes/_dark.json5'; import darkTheme from '@/themes/_dark.json5';
import { miLocalStorage } from '@/local-storage.js'; import { miLocalStorage } from '@/local-storage.js';
import { isEmbedPage } from '@/scripts/embed-page.js'; import { embedPage } from '@/config.js';
export type Theme = { export type Theme = {
id: string; id: string;
@ -96,7 +96,7 @@ export function applyTheme(theme: Theme, persist = true) {
document.documentElement.style.setProperty(`--${k}`, v.toString()); document.documentElement.style.setProperty(`--${k}`, v.toString());
} }
if (!isEmbedPage()) { if (!embedPage) {
document.documentElement.style.setProperty('color-scheme', colorScheme); document.documentElement.style.setProperty('color-scheme', colorScheme);
} }

View File

@ -8,7 +8,7 @@ import { markRaw } from 'vue';
import { $i } from '@/account.js'; import { $i } from '@/account.js';
import { wsOrigin } from '@/config.js'; import { wsOrigin } from '@/config.js';
import { StreamMock } from '@/scripts/stream-mock.js'; import { StreamMock } from '@/scripts/stream-mock.js';
import { isEmbedPage } from '@/scripts/embed-page.js'; import { embedPage } from '@/config.js';
// heart beat interval in ms // heart beat interval in ms
const HEART_BEAT_INTERVAL = 1000 * 60; const HEART_BEAT_INTERVAL = 1000 * 60;
@ -21,7 +21,7 @@ export function useStream(): Misskey.IStream {
if (stream) return stream; if (stream) return stream;
// TODO: No Websocketモードもここで判定 // TODO: No Websocketモードもここで判定
if (isEmbedPage()) { if (embedPage) {
stream = markRaw(new StreamMock(wsOrigin, null)); stream = markRaw(new StreamMock(wsOrigin, null));
return stream; return stream;
} else { } else {