From d45ca960b4de8d5b685462c96105b5cca29bf3d4 Mon Sep 17 00:00:00 2001 From: JellyBrick Date: Sat, 7 Oct 2023 22:16:54 +0900 Subject: [PATCH] feat(in-app-menu): add toggle-menu --- assets/menu.svg | 3 +++ assets/youtube-music.svg | 19 ++++++------------- plugins/in-app-menu/front.ts | 23 ++++++++++++++++++++++- plugins/in-app-menu/menu/panel.ts | 8 ++++---- 4 files changed, 35 insertions(+), 18 deletions(-) create mode 100644 assets/menu.svg diff --git a/assets/menu.svg b/assets/menu.svg new file mode 100644 index 00000000..49e40477 --- /dev/null +++ b/assets/menu.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/youtube-music.svg b/assets/youtube-music.svg index ae721786..ea40b336 100644 --- a/assets/youtube-music.svg +++ b/assets/youtube-music.svg @@ -1,13 +1,6 @@ - - - - - - - - - - - - - \ No newline at end of file + + + + + diff --git a/plugins/in-app-menu/front.ts b/plugins/in-app-menu/front.ts index 84f02d8e..2be654a9 100644 --- a/plugins/in-app-menu/front.ts +++ b/plugins/in-app-menu/front.ts @@ -2,8 +2,9 @@ import { ipcRenderer, Menu } from 'electron'; import { createPanel } from './menu/panel'; -import logo from '../../assets/youtube-music.svg'; +import logo from '../../assets/menu.svg'; import { isEnabled } from '../../config/plugins'; +import config from '../../config'; function $(selector: string) { return document.querySelector(selector); @@ -12,11 +13,28 @@ function $(selector: string) { const isMacOS = navigator.userAgent.includes('Macintosh'); export default () => { + let hideMenu = config.get('options.hideMenu'); const titleBar = document.createElement('title-bar'); const navBar = document.querySelector('#nav-bar-background'); if (isMacOS) titleBar.style.setProperty('--offset-left', '70px'); logo.classList.add('title-bar-icon'); + const logoClick = () => { + hideMenu = !hideMenu; + let visibilityStyle: string; + if (hideMenu) { + visibilityStyle = 'hidden'; + } else { + visibilityStyle = 'visible'; + } + const menus = document.querySelectorAll('menu-button'); + menus.forEach((menu) => { + menu.style.visibility = visibilityStyle; + }); + }; + logo.onclick = logoClick; + + ipcRenderer.on('toggleMenu', logoClick); if (!isMacOS) titleBar.appendChild(logo); document.body.appendChild(titleBar); @@ -47,6 +65,9 @@ export default () => { menu.append(menuItem.label); titleBar.appendChild(menu); + if (hideMenu) { + menu.style.visibility = 'hidden'; + } }); }; updateMenu(); diff --git a/plugins/in-app-menu/menu/panel.ts b/plugins/in-app-menu/menu/panel.ts index feffb33b..1dd2ea16 100644 --- a/plugins/in-app-menu/menu/panel.ts +++ b/plugins/in-app-menu/menu/panel.ts @@ -29,7 +29,7 @@ export const createPanel = ( } else { const nativeImageIcon = typeof item.icon === 'string' ? nativeImage.createFromPath(item.icon) : item.icon; const iconURL = nativeImageIcon?.toDataURL(); - + if (iconURL) iconWrapper.style.background = `url(${iconURL})`; } }; @@ -37,7 +37,7 @@ export const createPanel = ( const radioGroups: [MenuItem, HTMLElement][] = []; items.map((item) => { if (item.type === 'separator') return panel.appendChild(document.createElement('menu-separator')); - + const menu = document.createElement('menu-item'); const iconWrapper = document.createElement('menu-icon'); @@ -48,7 +48,7 @@ export const createPanel = ( menu.addEventListener('click', async () => { await ipcRenderer.invoke('menu-event', item.commandId); const menuItem = await ipcRenderer.invoke('get-menu-by-id', item.commandId) as MenuItem | null; - + if (menuItem) { updateIconState(iconWrapper, menuItem); @@ -64,7 +64,7 @@ export const createPanel = ( } } }); - + if (item.type === 'radio') { radioGroups.push([item, iconWrapper]); }