diff --git a/src/client/components/ui/a.vue b/src/client/components/ui/a.vue index 516cf02bd..384ee0259 100644 --- a/src/client/components/ui/a.vue +++ b/src/client/components/ui/a.vue @@ -10,7 +10,7 @@ import { faExpandAlt, faColumns, faExternalLinkAlt, faLink, faWindowMaximize } f import * as os from '@/os'; import copyToClipboard from '@/scripts/copy-to-clipboard'; import { router } from '@/router'; -import { deckmode, url } from '@/config'; +import { ui, url } from '@/config'; import { popout } from '@/scripts/popout'; export default defineComponent({ @@ -114,7 +114,10 @@ export default defineComponent({ if (this.$store.state.device.defaultSideView && this.sideViewHook && this.to !== '/') { return this.sideViewHook(this.to); } - if (this.$store.state.device.deckNavWindow && deckmode && this.to !== '/') { + if (this.$store.state.device.deckNavWindow && (ui === 'deck') && this.to !== '/') { + return this.window(); + } + if (ui === 'desktop') { return this.window(); } diff --git a/src/client/config.ts b/src/client/config.ts index 9c5e0f765..d0b74be04 100644 --- a/src/client/config.ts +++ b/src/client/config.ts @@ -13,5 +13,5 @@ export const langs = _LANGS_; export const getLocale = async () => Object.fromEntries((await entries(clientDb.i18n)) as [string, string][]); export const version = _VERSION_; export const instanceName = siteName === 'Misskey' ? host : siteName; -export const deckmode = localStorage.getItem('deckmode') === 'true'; +export const ui = localStorage.getItem('ui'); export const debug = localStorage.getItem('debug') === 'true'; diff --git a/src/client/init.ts b/src/client/init.ts index f93252e79..cc97947c0 100644 --- a/src/client/init.ts +++ b/src/client/init.ts @@ -4,13 +4,13 @@ import '@/style.scss'; -import { createApp, defineAsyncComponent } from 'vue'; +import { createApp } from 'vue'; import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'; import widgets from './widgets'; import directives from './directives'; import components from '@/components'; -import { version, apiUrl, deckmode } from '@/config'; +import { version, apiUrl, ui } from '@/config'; import { store } from './store'; import { router } from './router'; import { applyTheme } from '@/scripts/theme'; @@ -154,7 +154,8 @@ stream.init(store.state.i); const app = createApp(await ( window.location.search === '?zen' ? import('@/ui/zen.vue') : !store.getters.isSignedIn ? import('@/ui/visitor.vue') : - deckmode ? import('@/ui/deck.vue') : + ui === 'deck' ? import('@/ui/deck.vue') : + ui === 'desktop' ? import('@/ui/desktop.vue') : import('@/ui/default.vue') ).then(x => x.default)); diff --git a/src/client/sidebar.ts b/src/client/sidebar.ts index 4b7acb0a6..1132431e1 100644 --- a/src/client/sidebar.ts +++ b/src/client/sidebar.ts @@ -2,8 +2,8 @@ import { faBell, faComments, faEnvelope } from '@fortawesome/free-regular-svg-ic import { faAt, faBroadcastTower, faCloud, faColumns, faDoorClosed, faFileAlt, faFireAlt, faGamepad, faHashtag, faListUl, faSatellite, faSatelliteDish, faSearch, faStar, faTerminal, faUserClock, faUsers } from '@fortawesome/free-solid-svg-icons'; import { computed } from 'vue'; import { store } from '@/store'; -import { deckmode } from '@/config'; import { search } from '@/scripts/search'; +import * as os from '@/os'; export const sidebarDef = { notifications: { @@ -119,12 +119,29 @@ export const sidebarDef = { show: computed(() => store.getters.isSignedIn), to: computed(() => `/@${store.state.i.username}/room`), }, - deck: { - title: deckmode ? 'undeck' : 'deck', + ui: { + title: 'switchUi', icon: faColumns, - action: () => { - localStorage.setItem('deckmode', (!deckmode).toString()); - location.reload(); + action: (ev) => { + os.modalMenu([{ + text: 'Default', + action: () => { + localStorage.setItem('ui', 'default'); + location.reload(); + } + }, { + text: 'Deck', + action: () => { + localStorage.setItem('ui', 'deck'); + location.reload(); + } + }, { + text: 'Desktop', + action: () => { + localStorage.setItem('ui', 'desktop'); + location.reload(); + } + }], ev.currentTarget || ev.target); }, }, }; diff --git a/src/client/store.ts b/src/client/store.ts index 5c6c71d4f..8b78824f7 100644 --- a/src/client/store.ts +++ b/src/client/store.ts @@ -36,7 +36,7 @@ export const defaultDeviceUserSettings = { 'announcements', 'search', '-', - 'deck', + 'ui', ], deck: { columns: [], diff --git a/src/client/ui/desktop.vue b/src/client/ui/desktop.vue new file mode 100644 index 000000000..0d266ae01 --- /dev/null +++ b/src/client/ui/desktop.vue @@ -0,0 +1,66 @@ + + + + + + +