Files
akartonplanning/app/config/menu.js
Daan Selen 93f67bc9ae
Some checks failed
Build/release / action-release (push) Has been cancelled
chore: cleanup code and remove bloat
2025-10-03 10:20:22 +02:00

470 lines
14 KiB
JavaScript

import { dialog, BrowserWindow } from "electron";
import { getValue, setValue } from "./store.js";
import { ElectronBlocker } from "@ghostery/adblocker-electron";
import prompt from "electron-prompt";
import { setUserAgent } from "./utils.js";
import { appUrl } from "../main.js";
import useragents from "../useragents.json" with { type: "json" };
const commonPreferencesSubmenu = [
{
label: "Open Websites in New Windows",
type: "radio",
click: () => {
setValue("websites-in-new-window", "true");
dialog.showMessageBoxSync({
type: "info",
title: "Websites in New Windows",
message: "Websites which are targeted to open in new tabs will now open in new windows.",
buttons: ["OK"],
});
},
checked: getValue("websites-in-new-window") === "true",
},
{
label: "Open Websites in the Same Window",
type: "radio",
click: () => {
setValue("websites-in-new-window", "false");
dialog.showMessageBoxSync({
type: "info",
title: "Websites in New Windows",
message:
"Websites which are targeted to open in new tabs will now open in the same window.",
buttons: ["OK"],
});
},
checked: getValue("websites-in-new-window") === "false",
},
{ type: "separator" },
{
label: "Custom Main Window Size",
submenu: [
{
label: "Default",
type: "radio",
click: () => {
setValue("customWindowSize", false);
setValue("windowWidth", 0.71);
setValue("windowHeight", 0.74);
dialog.showMessageBoxSync({
type: "info",
title: "Custom Main Window Size",
message:
"You have set the main window size to the default size.\n\nPlease restart the app to apply the changes.",
buttons: ["OK"],
});
},
checked:
getValue("windowWidth") === 0.71 &&
getValue("windowHeight") === 0.74 &&
getValue("customWindowSize") === false,
},
{
label: "60%",
type: "radio",
click: () => {
setValue("customWindowSize", false);
setValue("windowWidth", 0.6);
setValue("windowHeight", 0.6);
dialog.showMessageBoxSync({
type: "info",
title: "Custom Main Window Size",
message:
"You have set the main window size to 60% of your screen size.\n\nPlease restart the app to apply the changes.",
buttons: ["OK"],
});
},
checked:
getValue("windowWidth") === 0.6 &&
getValue("windowHeight") === 0.6 &&
getValue("customWindowSize") === false,
},
{
label: "70%",
type: "radio",
click: () => {
setValue("windowWidth", 0.7);
setValue("windowHeight", 0.7);
dialog.showMessageBoxSync({
type: "info",
title: "Custom Main Window Size",
message:
"You have set the main window size to 70% of your screen size.\n\nPlease restart the app to apply the changes.",
buttons: ["OK"],
});
},
checked:
getValue("windowWidth") === 0.7 &&
getValue("windowHeight") === 0.7 &&
getValue("customWindowSize") === false,
},
{
label: "80%",
type: "radio",
click: () => {
setValue("customWindowSize", false);
setValue("windowWidth", 0.8);
setValue("windowHeight", 0.8);
dialog.showMessageBoxSync({
type: "info",
title: "Custom Main Window Size",
message:
"You have set the main window size to 80% of your screen size.\n\nPlease restart the app to apply the changes.",
buttons: ["OK"],
});
},
checked:
getValue("windowWidth") === 0.8 &&
getValue("windowHeight") === 0.8 &&
getValue("customWindowSize") === false,
},
{
label: "90%",
type: "radio",
click: () => {
setValue("customWindowSize", false);
setValue("windowWidth", 0.9);
setValue("windowHeight", 0.9);
dialog.showMessageBoxSync({
type: "info",
title: "Custom Main Window Size",
message:
"You have set the main window size to 90% of your screen size.\n\nPlease restart the app to apply the changes.",
buttons: ["OK"],
});
},
checked:
getValue("windowWidth") === 0.9 &&
getValue("windowHeight") === 0.9 &&
getValue("customWindowSize") === false,
},
{
label: "100% (Maximize)",
type: "radio",
click: () => {
setValue("customWindowSize", false);
setValue("windowWidth", 1);
setValue("windowHeight", 1);
dialog.showMessageBoxSync({
type: "info",
title: "Custom Main Window Size",
message:
"You have set the main window size to 100% of your screen size, which will maximise the window.\n\nPlease restart the app to apply the changes.",
buttons: ["OK"],
});
},
checked:
getValue("windowWidth") === 1 &&
getValue("windowHeight") === 1 &&
getValue("customWindowSize") === false,
},
{
label: "Custom",
type: "radio",
click: () => {
prompt({
title: "Custom Main Window Size",
label: "Enter size in percentage (without % sign)",
value: "10",
inputAttrs: {
type: "number",
required: true,
min: 10,
max: 100,
},
type: "input",
})
.then((r) => {
if (r === null) {
return;
}
const size = r / 100;
setValue("customWindowSize", true);
setValue("windowWidth", size);
setValue("windowHeight", size);
dialog.showMessageBoxSync({
type: "info",
title: "Custom Main Window Size",
message: `You have set the main window size to ${r}% of your screen size.\n\nPlease restart the app to apply the changes.`,
buttons: ["OK"],
});
})
.catch(console.error);
},
checked: getValue("customWindowSize") === true,
},
],
},
{ type: "separator" },
{
label: "Enable Dynamic Icons",
type: "checkbox",
click: () => {
if (getValue("dynamicicons") === "true") {
setValue("dynamicicons", "false");
dialog.showMessageBoxSync({
type: "info",
title: "Dynamic Icons",
message: "Dynamic icons have been disabled.",
buttons: ["OK"],
});
return;
} else if (getValue("dynamicicons") === "false" || getValue("dynamicicons") === undefined) {
setValue("dynamicicons", "true");
dialog.showMessageBoxSync({
type: "info",
title: "Dynamic Icons",
message: "Dynamic icons have been enabled.",
buttons: ["OK"],
});
return;
}
},
checked: getValue("dynamicicons") === "true",
},
{
label: "Block Ads and Trackers",
type: "checkbox",
click: () => {
if (getValue("blockadsandtrackers") === "true") {
setValue("blockadsandtrackers", "false");
dialog.showMessageBoxSync({
type: "info",
title: "Block Ads and Trackers",
message: "Ads and trackers will no longer be blocked.",
buttons: ["OK"],
});
ElectronBlocker.fromPrebuiltAdsAndTracking(fetch)
.then((blocker) => {
BrowserWindow.getAllWindows().forEach((window) => {
blocker.disableBlockingInSession(window.webContents.session);
});
})
.catch((error) => {
if (error.message !== "Trying to disable blocking which was not enabled") {
console.error(error);
}
});
return;
}
if (
getValue("blockadsandtrackers") === "false" ||
getValue("blockadsandtrackers") === undefined
) {
setValue("blockadsandtrackers", "true");
ElectronBlocker.fromPrebuiltAdsAndTracking(fetch).then((blocker) => {
BrowserWindow.getAllWindows().forEach((window) => {
blocker.enableBlockingInSession(window.webContents.session);
});
dialog.showMessageBoxSync({
type: "info",
title: "Block Ads and Trackers",
message: "Ads and trackers will now be blocked.",
buttons: ["OK"],
});
});
return;
}
},
checked: getValue("blockadsandtrackers") === "true",
},
{ type: "separator" },
{
label: "Windows Chrome User-Agent String",
type: "radio",
click: () => {
setUserAgent(useragents.WindowsChrome);
},
checked: getValue("useragentstring") === useragents.WindowsChrome,
},
{
label: "Windows Firefox User-Agent String",
type: "radio",
click: () => {
setUserAgent(useragents.WindowsFirefox);
},
checked: getValue("useragentstring") === useragents.WindowsFirefox,
},
{
label: "macOS User-Agent String",
type: "radio",
click: () => {
setUserAgent(useragents.macOS);
},
checked: getValue("useragentstring") === useragents.macOS,
},
{
label: "Linux User-Agent String",
type: "radio",
click: () => {
setUserAgent(useragents.Linux);
dialog.showMessageBoxSync({
type: "info",
title: "User agent switcher",
message:
"You have switched to Linux Useragent.\n\nPlease restart the app to apply the changes.",
buttons: ["OK"],
});
},
checked: getValue("useragentstring") === useragents.Linux,
},
{ type: "separator" },
...(process.platform === "win32" || process.platform === "linux"
? [
{
role: "quit",
accelerator: "Ctrl+Q",
},
]
: []),
];
const menulayout = [
{
label: "MS365-Electron",
submenu: [
...(process.platform === "darwin"
? [
{ type: "separator" },
{
label: "Preferences",
submenu: commonPreferencesSubmenu,
},
{ role: "services" },
{ type: "separator" },
{ label: "Hide MS365-Electron", role: "hide" },
{ role: "hideOthers" },
{ role: "unhide" },
{ type: "separator" },
{ label: "Quit MS365-Electron", role: "quit" },
]
: [
{ type: "separator" },
...commonPreferencesSubmenu,
]),
],
},
{
label: "Edit",
submenu: [
{ role: "undo" },
{ role: "redo" },
{ type: "separator" },
{ role: "cut" },
{ role: "copy" },
{ role: "paste" },
...(process.platform === "darwin"
? [
{ role: "pasteAndMatchStyle" },
{ role: "delete" },
{ role: "selectAll" },
{ type: "separator" },
{
label: "Speech",
submenu: [{ role: "startSpeaking" }, { role: "stopSpeaking" }],
},
]
: [{ role: "delete" }, { type: "separator" }, { role: "selectAll" }]),
],
},
{
label: "Navigation",
submenu: [
{
label: "Back",
click: () => {
BrowserWindow.getFocusedWindow().webContents.goBack();
},
accelerator: "Alt+Left",
},
{
label: "Forward",
click: () => {
BrowserWindow.getFocusedWindow().webContents.goForward();
},
accelerator: "Alt+Right",
},
{
label: "Reload",
click: () => {
BrowserWindow.getFocusedWindow().webContents.reload();
},
accelerator: "CmdOrCtrl+R",
},
{
label: "Home",
click: () => {
BrowserWindow.getFocusedWindow().loadURL(
appUrl
);
},
},
],
},
{
label: "View",
submenu: [
{ role: "reload" },
{ role: "forceReload" },
{ type: "separator" },
{ role: "resetZoom" },
{
role: "zoomIn",
accelerator: process.platform === "darwin" ? "Control+=" : "Control+=",
},
{ role: "zoomOut" },
{ type: "separator" },
{ role: "togglefullscreen" },
],
},
{
label: "Window",
submenu: [
{ role: "minimize" },
{ role: "zoom" },
...(process.platform === "darwin"
? [{ type: "separator" }, { role: "front" }, { type: "separator" }]
: [{ role: "close" }]),
...(process.platform === "win32" || process.platform === "linux"
? [
{ type: "separator" },
{
label: "Show Menu Bar",
type: "radio",
click: () => {
setValue("autohide-menubar", "false");
dialog.showMessageBoxSync({
type: "info",
title: "Menu Bar Settings",
message:
"Menu will be visible now. Please restart the app for changes to take effect.",
buttons: ["OK"],
});
},
checked: getValue("autohide-menubar") === "false",
},
{
label: "Hide Menu Bar (ALT to show)",
type: "radio",
click: () => {
setValue("autohide-menubar", "true");
dialog.showMessageBoxSync({
type: "info",
title: "Menu Bar Settings",
message:
"Menu bar will be automatically hidden now. Please restart the app for changes to take effect.",
buttons: ["OK"],
});
},
checked: getValue("autohide-menubar") === "true",
},
]
: []),
],
},
];
export default menulayout;