notion-enhancer/repo/integrated-titlebar/buttons.mjs

74 lines
2.7 KiB
JavaScript

/*
* notion-enhancer: integrated titlebar
* (c) 2021 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* (https://notion-enhancer.github.io/) under the MIT license
*/
'use strict';
export const createWindowButtons = async ({ electron, web, components }, db) => {
let minimizeIcon = (await db.get(['minimize_icon'])) || (await components.feather('minus')),
maximizeIcon = (await db.get(['maximize_icon'])) || (await components.feather('maximize')),
unmaximizeIcon =
(await db.get(['unmaximize_icon'])) || (await components.feather('minimize')),
closeIcon = (await db.get(['close_icon'])) || (await components.feather('x'));
minimizeIcon = minimizeIcon.trim();
maximizeIcon = maximizeIcon.trim();
unmaximizeIcon = unmaximizeIcon.trim();
closeIcon = closeIcon.trim();
minimizeIcon =
minimizeIcon.startsWith('<svg') && minimizeIcon.endsWith('</svg>')
? minimizeIcon
: web.escape(minimizeIcon);
maximizeIcon =
maximizeIcon.startsWith('<svg') && maximizeIcon.endsWith('</svg>')
? maximizeIcon
: web.escape(maximizeIcon);
unmaximizeIcon =
unmaximizeIcon.startsWith('<svg') && unmaximizeIcon.endsWith('</svg>')
? unmaximizeIcon
: web.escape(unmaximizeIcon);
closeIcon =
closeIcon.startsWith('<svg') && closeIcon.endsWith('</svg>')
? closeIcon
: web.escape(closeIcon);
const $windowButtons = web.html`<div class="integrated_titlebar--buttons"></div>`,
$minimize = web.html`<button id="integrated_titlebar--minimize">
${minimizeIcon}
</button>`,
$maximize = web.html`<button id="integrated_titlebar--maximize">
${maximizeIcon}
</button>`,
$unmaximize = web.html`<button id="integrated_titlebar--unmaximize">
${unmaximizeIcon}
</button>`,
$close = web.html`<button id="integrated_titlebar--close">
${closeIcon}
</button>`;
components.tooltip($minimize, '**Minimize window**');
components.tooltip($maximize, '**Maximize window**');
components.tooltip($unmaximize, '**Unmaximize window**');
components.tooltip($close, '**Close window**');
$minimize.addEventListener('click', () => electron.browser.minimize());
$maximize.addEventListener('click', () => electron.browser.maximize());
$unmaximize.addEventListener('click', () => electron.browser.unmaximize());
$close.addEventListener('click', () => electron.browser.close());
electron.browser.on('maximize', () => {
$maximize.replaceWith($unmaximize);
});
electron.browser.on('unmaximize', () => {
$unmaximize.replaceWith($maximize);
});
web.render(
$windowButtons,
$minimize,
electron.browser.isMaximized() ? $unmaximize : $maximize,
$close
);
return $windowButtons;
};