41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import {BrowserView, BrowserWindow} from "electron";
|
|
import {AppsMain} from "../mapi/app/main";
|
|
|
|
type HookType = never | "Show" | "Hide" | "EnterFullScreen" | "LeaveFullScreen" | "ShowQuitConfirmDialog";
|
|
|
|
export const executeHooks = async (win: BrowserWindow, hook: HookType, data?: any) => {
|
|
const evalJs = `
|
|
if(window.__page && window.__page.hooks && typeof window.__page.hooks.on${hook} === 'function' ) {
|
|
try {
|
|
window.__page.hooks.on${hook}(${JSON.stringify(data)});
|
|
} catch(e) {
|
|
console.log('executeHooks.on${hook}.error', e);
|
|
}
|
|
}`;
|
|
return win.webContents?.executeJavaScript(evalJs);
|
|
};
|
|
|
|
export const executeDarkMode = async (
|
|
view: BrowserWindow | BrowserView,
|
|
data: {
|
|
isSystem: boolean;
|
|
}
|
|
) => {
|
|
data = Object.assign(
|
|
{
|
|
isSystem: false,
|
|
},
|
|
data
|
|
);
|
|
if (await AppsMain.shouldDarkMode()) {
|
|
// body and html
|
|
view.webContents.executeJavaScript(`
|
|
document.body.setAttribute('data-theme', 'dark');
|
|
document.documentElement.setAttribute('data-theme', 'dark');
|
|
`);
|
|
if (data.isSystem) {
|
|
view.webContents.executeJavaScript(`document.body.setAttribute('arco-theme', 'dark');`);
|
|
}
|
|
}
|
|
};
|