sanctum/avia_core/customFrameNativeMenu.js
2026-03-28 17:33:34 -07:00

57 lines
1.9 KiB
JavaScript

(function () {
if (window.__customFrameNativeMenu) return;
window.__customFrameNativeMenu = true;
function toggleCheckbox(newElem, toggle) {
const tmp = newElem.querySelector("mdui-checkbox");
if (tmp && tmp !== undefined) {
if (toggle) {
tmp.setAttribute('checked', '');
tmp.setAttribute('value', 'on');
} else {
tmp.removeAttribute('checked');
tmp.setAttribute('value', 'off');
}
}
}
function initCFNM() {
let elem = document.querySelector("#floating div:not(:empty) div.will-change_transform.flex_1_1_800px div:has(> a) > a:last-child");
if (!elem) { return; }
let title = elem.querySelector("div.flex-g_1 > div");
if (!title || title.textContent.trim() !== "Custom window frame") { return; }
let desc = elem.querySelector("div.flex-g_1 > span");
if (!desc || desc.textContent.trim() !== "Let Stoat use its own custom titlebar.") { return; }
var newElem = elem.cloneNode(true);
let nTitle = newElem.querySelector("div.flex-g_1 > div");
let nDesc = newElem.querySelector("div.flex-g_1 > span");
if (!nTitle || !nDesc) { newElem = null; return; }
nTitle.textContent = "Native menu on custom window frame";
nDesc.textContent = "Use the system's native menu on the custom window frame.";
let config = window.desktopConfig.get();
toggleCheckbox(newElem, config.customFrameNativeMenu);
newElem.addEventListener("click", e => {
e.preventDefault();
e.stopPropagation();
let config = window.desktopConfig.get();
config.customFrameNativeMenu = !config.customFrameNativeMenu;
window.desktopConfig.set(config);
toggleCheckbox(newElem, config.customFrameNativeMenu);
});
elem.parentNode.appendChild(newElem);
}
initCFNM();
const observer = new MutationObserver(() => initCFNM());
observer.observe(document.body, { childList: true, subtree: true });
})();