mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-02-02 02:51:53 +08:00
js cleanup
This commit is contained in:
@@ -42,96 +42,105 @@ function __WindowManager() {
|
||||
var __menu_buttons = [];
|
||||
|
||||
var __init__ = function() {
|
||||
for (let el_button of $$$("button")) {
|
||||
for (let el of $$$("button")) {
|
||||
// XXX: Workaround for iOS Safari:
|
||||
// https://stackoverflow.com/questions/3885018/active-pseudo-class-doesnt-work-in-mobile-safari
|
||||
el_button.ontouchstart = function() {};
|
||||
el.ontouchstart = function() {};
|
||||
}
|
||||
|
||||
for (let el_button of $$("menu-button")) {
|
||||
el_button.parentElement.querySelector(".menu").setAttribute("tabindex", "-1");
|
||||
tools.el.setOnDown(el_button, () => __toggleMenu(el_button));
|
||||
__menu_buttons.push(el_button);
|
||||
for (let el of $$("menu-button")) {
|
||||
el.parentElement.querySelector(".menu").setAttribute("tabindex", "-1");
|
||||
tools.el.setOnDown(el, () => __toggleMenu(el));
|
||||
__menu_buttons.push(el);
|
||||
}
|
||||
|
||||
if (!window.ResizeObserver) {
|
||||
tools.error("ResizeObserver not supported");
|
||||
}
|
||||
|
||||
for (let el_window of $$("window")) {
|
||||
el_window.setAttribute("tabindex", "-1");
|
||||
__makeWindowMovable(el_window);
|
||||
__windows.push(el_window);
|
||||
for (let el_win of $$("window")) {
|
||||
el_win.setAttribute("tabindex", "-1");
|
||||
__makeWindowMovable(el_win);
|
||||
__windows.push(el_win);
|
||||
|
||||
if (el_window.classList.contains("window-resizable") && window.ResizeObserver) {
|
||||
if (el_win.classList.contains("window-resizable") && window.ResizeObserver) {
|
||||
new ResizeObserver(function() {
|
||||
// При переполнении рабочей области сократить размер окна по высоте.
|
||||
// По ширине оно настраивается само в CSS.
|
||||
let view = self.getViewGeometry();
|
||||
let rect = el_window.getBoundingClientRect();
|
||||
let rect = el_win.getBoundingClientRect();
|
||||
if ((rect.bottom - rect.top) > (view.bottom - view.top)) {
|
||||
let ratio = (rect.bottom - rect.top) / (view.bottom - view.top);
|
||||
el_window.style.height = view.bottom - view.top + "px";
|
||||
el_window.style.width = Math.round((rect.right - rect.left) / ratio) + "px";
|
||||
el_win.style.height = view.bottom - view.top + "px";
|
||||
el_win.style.width = Math.round((rect.right - rect.left) / ratio) + "px";
|
||||
}
|
||||
|
||||
if (el_window.hasAttribute("data-centered")) {
|
||||
__centerWindow(el_window);
|
||||
if (el_win.hasAttribute("data-centered")) {
|
||||
__centerWindow(el_win);
|
||||
}
|
||||
}).observe(el_window);
|
||||
}).observe(el_win);
|
||||
}
|
||||
|
||||
let el_close_button = el_window.querySelector(".window-header .window-button-close");
|
||||
if (el_close_button) {
|
||||
el_close_button.title = "Close window";
|
||||
tools.el.setOnClick(el_close_button, () => self.closeWindow(el_window));
|
||||
{
|
||||
let el = el_win.querySelector(".window-header .window-button-close");
|
||||
if (el) {
|
||||
el.title = "Close window";
|
||||
tools.el.setOnClick(el, () => self.closeWindow(el_win));
|
||||
}
|
||||
}
|
||||
|
||||
let el_maximize_button = el_window.querySelector(".window-header .window-button-maximize");
|
||||
if (el_maximize_button) {
|
||||
el_maximize_button.title = "Maximize window";
|
||||
tools.el.setOnClick(el_maximize_button, function() {
|
||||
__maximizeWindow(el_window);
|
||||
__activateLastWindow(el_window);
|
||||
});
|
||||
{
|
||||
let el = el_win.querySelector(".window-header .window-button-maximize");
|
||||
if (el) {
|
||||
el.title = "Maximize window";
|
||||
tools.el.setOnClick(el, function() {
|
||||
__maximizeWindow(el_win);
|
||||
__activateLastWindow(el_win);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
let el_orig_button = el_window.querySelector(".window-header .window-button-original");
|
||||
if (el_orig_button) {
|
||||
el_orig_button.title = "Reduce window to its original size and center it";
|
||||
tools.el.setOnClick(el_orig_button, function() {
|
||||
el_window.style.width = "";
|
||||
el_window.style.height = "";
|
||||
__centerWindow(el_window);
|
||||
__activateLastWindow(el_window);
|
||||
});
|
||||
{
|
||||
let el = el_win.querySelector(".window-header .window-button-original");
|
||||
if (el) {
|
||||
el.title = "Reduce window to its original size and center it";
|
||||
tools.el.setOnClick(el, function() {
|
||||
el_win.style.width = "";
|
||||
el_win.style.height = "";
|
||||
__centerWindow(el_win);
|
||||
__activateLastWindow(el_win);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
let el_enter_full_tab_button = el_window.querySelector(".window-header .window-button-enter-full-tab");
|
||||
let el_exit_full_tab_button = el_window.querySelector(".window-button-exit-full-tab");
|
||||
if (el_enter_full_tab_button && el_exit_full_tab_button) {
|
||||
el_enter_full_tab_button.title = "Stretch to the entire tab";
|
||||
tools.el.setOnClick(el_enter_full_tab_button, () => self.setFullTabWindow(el_window, true));
|
||||
tools.el.setOnClick(el_exit_full_tab_button, () => self.setFullTabWindow(el_window, false));
|
||||
{
|
||||
let el_enter = el_win.querySelector(".window-header .window-button-enter-full-tab");
|
||||
let el_exit = el_win.querySelector(".window-button-exit-full-tab");
|
||||
if (el_enter && el_exit) {
|
||||
el_enter.title = "Stretch to the entire tab";
|
||||
tools.el.setOnClick(el_enter, () => self.setFullTabWindow(el_win, true));
|
||||
tools.el.setOnClick(el_exit, () => self.setFullTabWindow(el_win, false));
|
||||
}
|
||||
}
|
||||
|
||||
let el_full_screen_button = el_window.querySelector(".window-header .window-button-full-screen");
|
||||
if (el_full_screen_button && __getFullScreenFunction(el_window)) {
|
||||
el_full_screen_button.title = "Go to full-screen mode";
|
||||
tools.el.setOnClick(el_full_screen_button, function() {
|
||||
__fullScreenWindow(el_window);
|
||||
el_window.focus(el_window); // Почему-то теряется фокус
|
||||
__activateLastWindow(el_window);
|
||||
});
|
||||
{
|
||||
let el = el_win.querySelector(".window-header .window-button-full-screen");
|
||||
if (el && __getFullScreenFunction(el_win)) {
|
||||
el.title = "Go to full-screen mode";
|
||||
tools.el.setOnClick(el, function() {
|
||||
__fullScreenWindow(el_win);
|
||||
el_win.focus(el_win); // Почему-то теряется фокус
|
||||
__activateLastWindow(el_win);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (let el_button of $$$("button[data-show-window]")) {
|
||||
tools.el.setOnClick(el_button, () => self.showWindow($(el_button.getAttribute("data-show-window"))));
|
||||
for (let el of $$$("button[data-show-window]")) {
|
||||
tools.el.setOnClick(el, () => self.showWindow($(el.getAttribute("data-show-window"))));
|
||||
}
|
||||
|
||||
window.onmouseup = __globalMouseButtonHandler;
|
||||
window.ontouchend = __globalMouseButtonHandler;
|
||||
window.onmouseup = window.ontouchend = __globalMouseButtonHandler;
|
||||
|
||||
window.addEventListener("focusin", (event) => __focusInOut(event, true));
|
||||
window.addEventListener("focusout", (event) => __focusInOut(event, false));
|
||||
@@ -196,7 +205,12 @@ function __WindowManager() {
|
||||
var __modalCodeDialog = function(header, html, code, ok, cancel) {
|
||||
let create_content = function(el_content) {
|
||||
if (code) {
|
||||
html += `<br><br><div class="code"><pre style="margin:0px">${tools.escape(code)}</pre></div>`;
|
||||
html += `
|
||||
<br><br>
|
||||
<div class="code">
|
||||
<pre style="margin:0px">${tools.escape(code)}</pre>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
el_content.innerHTML = html;
|
||||
};
|
||||
@@ -210,49 +224,49 @@ function __WindowManager() {
|
||||
el_modal.className = "modal";
|
||||
el_modal.style.visibility = "visible";
|
||||
|
||||
let el_window = document.createElement("div");
|
||||
el_window.className = "modal-window";
|
||||
el_window.setAttribute("tabindex", "-1");
|
||||
el_modal.appendChild(el_window);
|
||||
let el_win = document.createElement("div");
|
||||
el_win.className = "modal-window";
|
||||
el_win.setAttribute("tabindex", "-1");
|
||||
el_modal.appendChild(el_win);
|
||||
|
||||
let el_header = document.createElement("div");
|
||||
el_header.className = "modal-header";
|
||||
el_header.innerText = header;
|
||||
el_window.appendChild(el_header);
|
||||
el_win.appendChild(el_header);
|
||||
|
||||
let el_content = document.createElement("div");
|
||||
el_content.className = "modal-content";
|
||||
el_window.appendChild(el_content);
|
||||
el_win.appendChild(el_content);
|
||||
|
||||
let el_buttons = document.createElement("div");
|
||||
el_buttons.classList.add("modal-buttons", "buttons-row");
|
||||
el_window.appendChild(el_buttons);
|
||||
el_win.appendChild(el_buttons);
|
||||
|
||||
let el_cancel_button = null;
|
||||
let el_ok_button = null;
|
||||
let el_cancel_bt = null;
|
||||
let el_ok_bt = null;
|
||||
if (cancel) {
|
||||
el_cancel_button = document.createElement("button");
|
||||
el_cancel_button.className = "row100";
|
||||
el_cancel_button.innerText = "Cancel";
|
||||
el_buttons.appendChild(el_cancel_button);
|
||||
el_cancel_bt = document.createElement("button");
|
||||
el_cancel_bt.className = "row100";
|
||||
el_cancel_bt.innerText = "Cancel";
|
||||
el_buttons.appendChild(el_cancel_bt);
|
||||
}
|
||||
if (ok) {
|
||||
el_ok_button = document.createElement("button");
|
||||
el_ok_button.className = "row100";
|
||||
el_ok_button.innerText = "OK";
|
||||
el_buttons.appendChild(el_ok_button);
|
||||
el_ok_bt = document.createElement("button");
|
||||
el_ok_bt.className = "row100";
|
||||
el_ok_bt.innerText = "OK";
|
||||
el_buttons.appendChild(el_ok_bt);
|
||||
}
|
||||
if (ok && cancel) {
|
||||
el_ok_button.className = "row50";
|
||||
el_cancel_button.className = "row50";
|
||||
el_ok_bt.className = "row50";
|
||||
el_cancel_bt.className = "row50";
|
||||
}
|
||||
|
||||
el_window.onkeyup = function(event) {
|
||||
el_win.onkeyup = function(event) {
|
||||
event.preventDefault();
|
||||
if (ok && event.code === "Enter") {
|
||||
el_ok_button.click();
|
||||
el_ok_bt.click();
|
||||
} else if (cancel && event.code === "Escape") {
|
||||
el_cancel_button.click();
|
||||
el_cancel_bt.click();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -260,7 +274,7 @@ function __WindowManager() {
|
||||
if (ok || cancel) {
|
||||
promise = new Promise(function(resolve) {
|
||||
function close(retval) {
|
||||
__closeWindow(el_window);
|
||||
__closeWindow(el_win);
|
||||
let index = __windows.indexOf(el_modal);
|
||||
if (index !== -1) {
|
||||
__windows.splice(index, 1);
|
||||
@@ -276,10 +290,10 @@ function __WindowManager() {
|
||||
}
|
||||
|
||||
if (cancel) {
|
||||
tools.el.setOnClick(el_cancel_button, () => close(false));
|
||||
tools.el.setOnClick(el_cancel_bt, () => close(false));
|
||||
}
|
||||
if (ok) {
|
||||
tools.el.setOnClick(el_ok_button, () => close(true));
|
||||
tools.el.setOnClick(el_ok_bt, () => close(true));
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -288,7 +302,7 @@ function __WindowManager() {
|
||||
(parent || document.fullscreenElement || document.body).appendChild(el_modal);
|
||||
if (typeof html === "function") {
|
||||
// Это должно быть здесь, потому что элемент должен иметь родителя чтобы существовать
|
||||
html(el_content, el_ok_button);
|
||||
html(el_content, el_ok_bt);
|
||||
} else {
|
||||
el_content.innerHTML = html;
|
||||
}
|
||||
@@ -297,26 +311,26 @@ function __WindowManager() {
|
||||
return promise;
|
||||
};
|
||||
|
||||
self.showWindow = function(el_window, activate=true, center=false) {
|
||||
self.showWindow = function(el_win, activate=true, center=false) {
|
||||
let showed = false;
|
||||
if (!self.isWindowVisible(el_window)) {
|
||||
if (!self.isWindowVisible(el_win)) {
|
||||
center = true;
|
||||
showed = true;
|
||||
}
|
||||
__organizeWindow(el_window, center);
|
||||
el_window.style.visibility = "visible";
|
||||
__organizeWindow(el_win, center);
|
||||
el_win.style.visibility = "visible";
|
||||
if (activate) {
|
||||
__activateWindow(el_window);
|
||||
__activateWindow(el_win);
|
||||
}
|
||||
if (el_window.show_hook) {
|
||||
if (el_win.show_hook) {
|
||||
if (showed) {
|
||||
el_window.show_hook();
|
||||
el_win.show_hook();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
self.isWindowVisible = function(el_window) {
|
||||
return (window.getComputedStyle(el_window, null).visibility !== "hidden");
|
||||
self.isWindowVisible = function(el_win) {
|
||||
return (window.getComputedStyle(el_win, null).visibility !== "hidden");
|
||||
};
|
||||
|
||||
self.getViewGeometry = function() {
|
||||
@@ -329,35 +343,35 @@ function __WindowManager() {
|
||||
};
|
||||
};
|
||||
|
||||
self.closeWindow = function(el_window) {
|
||||
__closeWindow(el_window);
|
||||
__activateLastWindow(el_window);
|
||||
self.closeWindow = function(el_win) {
|
||||
__closeWindow(el_win);
|
||||
__activateLastWindow(el_win);
|
||||
};
|
||||
|
||||
self.setFullTabWindow = function(el_window, enabled) {
|
||||
el_window.classList.toggle("window-full-tab", enabled);
|
||||
__activateLastWindow(el_window);
|
||||
self.setFullTabWindow = function(el_win, enabled) {
|
||||
el_win.classList.toggle("window-full-tab", enabled);
|
||||
__activateLastWindow(el_win);
|
||||
let el_navbar = $("navbar");
|
||||
if (el_navbar) {
|
||||
tools.hidden.setVisible(el_navbar, !enabled);
|
||||
}
|
||||
};
|
||||
|
||||
var __closeWindow = function(el_window) {
|
||||
el_window.focus();
|
||||
el_window.blur();
|
||||
el_window.style.visibility = "hidden";
|
||||
if (el_window.close_hook) {
|
||||
el_window.close_hook();
|
||||
var __closeWindow = function(el_win) {
|
||||
el_win.focus();
|
||||
el_win.blur();
|
||||
el_win.style.visibility = "hidden";
|
||||
if (el_win.close_hook) {
|
||||
el_win.close_hook();
|
||||
}
|
||||
};
|
||||
|
||||
var __toggleMenu = function(el_a) {
|
||||
let all_hidden = true;
|
||||
|
||||
for (let el_button of __menu_buttons) {
|
||||
let el_menu = el_button.parentElement.querySelector(".menu");
|
||||
if (el_button === el_a && window.getComputedStyle(el_menu, null).visibility === "hidden") {
|
||||
for (let el_bt of __menu_buttons) {
|
||||
let el_menu = el_bt.parentElement.querySelector(".menu");
|
||||
if (el_bt === el_a && window.getComputedStyle(el_menu, null).visibility === "hidden") {
|
||||
let rect = el_menu.getBoundingClientRect();
|
||||
let offset = self.getViewGeometry().right - (rect.left + el_menu.clientWidth + 2); // + 2 is ugly hack
|
||||
if (offset < 0) {
|
||||
@@ -366,13 +380,13 @@ function __WindowManager() {
|
||||
el_menu.style.removeProperty("right");
|
||||
}
|
||||
|
||||
el_button.classList.add("menu-button-pressed");
|
||||
el_bt.classList.add("menu-button-pressed");
|
||||
el_menu.style.visibility = "visible";
|
||||
let el_focus = el_menu.querySelector("[data-focus]");
|
||||
(el_focus !== null ? el_focus : el_menu).focus();
|
||||
all_hidden &= false;
|
||||
} else {
|
||||
el_button.classList.remove("menu-button-pressed");
|
||||
el_bt.classList.remove("menu-button-pressed");
|
||||
el_menu.style.visibility = "hidden";
|
||||
el_menu.style.removeProperty("right");
|
||||
}
|
||||
@@ -394,9 +408,9 @@ function __WindowManager() {
|
||||
|
||||
var __closeAllMenues = function() {
|
||||
document.onkeyup = null;
|
||||
for (let el_button of __menu_buttons) {
|
||||
let el_menu = el_button.parentElement.querySelector(".menu");
|
||||
el_button.classList.remove("menu-button-pressed");
|
||||
for (let el_bt of __menu_buttons) {
|
||||
let el_menu = el_bt.parentElement.querySelector(".menu");
|
||||
el_bt.classList.remove("menu-button-pressed");
|
||||
el_menu.style.visibility = "hidden";
|
||||
el_menu.style.removeProperty("right");
|
||||
}
|
||||
@@ -420,10 +434,10 @@ function __WindowManager() {
|
||||
&& !event.target.closest(".menu-button")
|
||||
&& !event.target.closest(".modal")
|
||||
) {
|
||||
for (let el_item = event.target; el_item && el_item !== document; el_item = el_item.parentNode) {
|
||||
if (el_item.classList.contains("menu")) {
|
||||
for (let el = event.target; el && el !== document; el = el.parentNode) {
|
||||
if (el.classList.contains("menu")) {
|
||||
return;
|
||||
} else if (el_item.hasAttribute("data-force-hide-menu")) {
|
||||
} else if (el.hasAttribute("data-force-hide-menu")) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -433,122 +447,122 @@ function __WindowManager() {
|
||||
};
|
||||
|
||||
var __organizeWindowsOnBrowserResize = function() {
|
||||
for (let el_window of $$("window")) {
|
||||
if (el_window.style.visibility === "visible") {
|
||||
if (tools.browser.is_mobile && el_window.classList.contains("window-resizable")) {
|
||||
for (let el_win of $$("window")) {
|
||||
if (el_win.style.visibility === "visible") {
|
||||
if (tools.browser.is_mobile && el_win.classList.contains("window-resizable")) {
|
||||
// FIXME: При смене ориентации на мобильном браузере надо сбрасывать
|
||||
// настройки окна стрима, поэтому тут стоит вот этот костыль
|
||||
el_window.style.width = "";
|
||||
el_window.style.height = "";
|
||||
el_win.style.width = "";
|
||||
el_win.style.height = "";
|
||||
}
|
||||
__organizeWindow(el_window);
|
||||
__organizeWindow(el_win);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var __organizeWindow = function(el_window, center=false) {
|
||||
var __organizeWindow = function(el_win, center=false) {
|
||||
let view = self.getViewGeometry();
|
||||
let rect = el_window.getBoundingClientRect();
|
||||
let rect = el_win.getBoundingClientRect();
|
||||
|
||||
if (el_window.classList.contains("window-resizable")) {
|
||||
if (el_win.classList.contains("window-resizable")) {
|
||||
// При переполнении рабочей области сократить размер окна
|
||||
if ((rect.bottom - rect.top) > (view.bottom - view.top)) {
|
||||
let ratio = (rect.bottom - rect.top) / (view.bottom - view.top);
|
||||
el_window.style.height = view.bottom - view.top + "px";
|
||||
el_window.style.width = Math.round((rect.right - rect.left) / ratio) + "px";
|
||||
el_win.style.height = view.bottom - view.top + "px";
|
||||
el_win.style.width = Math.round((rect.right - rect.left) / ratio) + "px";
|
||||
}
|
||||
if ((rect.right - rect.left) > (view.right - view.left)) {
|
||||
el_window.style.width = view.right - view.left + "px";
|
||||
el_win.style.width = view.right - view.left + "px";
|
||||
}
|
||||
rect = el_window.getBoundingClientRect();
|
||||
rect = el_win.getBoundingClientRect();
|
||||
}
|
||||
|
||||
if (el_window.hasAttribute("data-centered") || center) {
|
||||
__centerWindow(el_window);
|
||||
if (el_win.hasAttribute("data-centered") || center) {
|
||||
__centerWindow(el_win);
|
||||
} else {
|
||||
if (rect.top <= view.top) {
|
||||
el_window.style.top = view.top + "px";
|
||||
el_win.style.top = view.top + "px";
|
||||
} else if (rect.bottom > view.bottom) {
|
||||
el_window.style.top = view.bottom - rect.height + "px";
|
||||
el_win.style.top = view.bottom - rect.height + "px";
|
||||
}
|
||||
|
||||
if (rect.left <= view.left) {
|
||||
el_window.style.left = view.left + "px";
|
||||
el_win.style.left = view.left + "px";
|
||||
} else if (rect.right > view.right) {
|
||||
el_window.style.left = view.right - rect.width + "px";
|
||||
el_win.style.left = view.right - rect.width + "px";
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var __centerWindow = function(el_window) {
|
||||
var __centerWindow = function(el_win) {
|
||||
let view = self.getViewGeometry();
|
||||
let rect = el_window.getBoundingClientRect();
|
||||
el_window.style.top = Math.max(view.top, Math.round((view.bottom - rect.height) / 2)) + "px";
|
||||
el_window.style.left = Math.round((view.right - rect.width) / 2) + "px";
|
||||
el_window.setAttribute("data-centered", "");
|
||||
let rect = el_win.getBoundingClientRect();
|
||||
el_win.style.top = Math.max(view.top, Math.round((view.bottom - rect.height) / 2)) + "px";
|
||||
el_win.style.left = Math.round((view.right - rect.width) / 2) + "px";
|
||||
el_win.setAttribute("data-centered", "");
|
||||
};
|
||||
|
||||
var __activateLastWindow = function(el_except_window=null) {
|
||||
let el_last_window = null;
|
||||
var __activateLastWindow = function(el_except_win=null) {
|
||||
let el_last_win = null;
|
||||
|
||||
if (document.activeElement) {
|
||||
el_last_window = (document.activeElement.closest(".modal-window") || document.activeElement.closest(".window"));
|
||||
if (el_last_window && window.getComputedStyle(el_last_window, null).visibility === "hidden") {
|
||||
el_last_window = null;
|
||||
el_last_win = (document.activeElement.closest(".modal-window") || document.activeElement.closest(".window"));
|
||||
if (el_last_win && window.getComputedStyle(el_last_win, null).visibility === "hidden") {
|
||||
el_last_win = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (!el_last_window || el_last_window === el_except_window) {
|
||||
if (!el_last_win || el_last_win === el_except_win) {
|
||||
let max_z_index = 0;
|
||||
|
||||
for (let el_window of __windows) {
|
||||
let z_index = parseInt(window.getComputedStyle(el_window, null).zIndex) || 0;
|
||||
let visibility = window.getComputedStyle(el_window, null).visibility;
|
||||
for (let el_win of __windows) {
|
||||
let z_index = parseInt(window.getComputedStyle(el_win, null).zIndex) || 0;
|
||||
let visibility = window.getComputedStyle(el_win, null).visibility;
|
||||
|
||||
if (max_z_index < z_index && visibility !== "hidden" && el_window !== el_except_window) {
|
||||
el_last_window = el_window;
|
||||
if (max_z_index < z_index && visibility !== "hidden" && el_win !== el_except_win) {
|
||||
el_last_win = el_win;
|
||||
max_z_index = z_index;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (el_last_window) {
|
||||
tools.debug("UI: Activating last window:", el_last_window);
|
||||
__activateWindow(el_last_window);
|
||||
if (el_last_win) {
|
||||
tools.debug("UI: Activating last window:", el_last_win);
|
||||
__activateWindow(el_last_win);
|
||||
} else {
|
||||
tools.debug("UI: No last window to activation");
|
||||
}
|
||||
};
|
||||
|
||||
var __activateWindow = function(el_window) {
|
||||
if (window.getComputedStyle(el_window, null).visibility !== "hidden") {
|
||||
var __activateWindow = function(el_win) {
|
||||
if (window.getComputedStyle(el_win, null).visibility !== "hidden") {
|
||||
let el_to_focus;
|
||||
let el_window_contains_focus;
|
||||
let el_focused; // A window which contains a focus
|
||||
|
||||
if (el_window.className === "modal") {
|
||||
el_to_focus = el_window.querySelector(".modal-window");
|
||||
el_window_contains_focus = (document.activeElement && document.activeElement.closest(".modal-window"));
|
||||
if (el_win.className === "modal") {
|
||||
el_to_focus = el_win.querySelector(".modal-window");
|
||||
el_focused = (document.activeElement && document.activeElement.closest(".modal-window"));
|
||||
} else { // .window
|
||||
el_to_focus = el_window;
|
||||
el_window_contains_focus = (document.activeElement && document.activeElement.closest(".window"));
|
||||
el_to_focus = el_win;
|
||||
el_focused = (document.activeElement && document.activeElement.closest(".window"));
|
||||
}
|
||||
|
||||
if (el_window.className !== "modal" && parseInt(el_window.style.zIndex) !== __top_z_index) {
|
||||
if (el_win.className !== "modal" && parseInt(el_win.style.zIndex) !== __top_z_index) {
|
||||
__top_z_index += 1;
|
||||
el_window.style.zIndex = __top_z_index;
|
||||
tools.debug("UI: Activated window:", el_window);
|
||||
el_win.style.zIndex = __top_z_index;
|
||||
tools.debug("UI: Activated window:", el_win);
|
||||
}
|
||||
|
||||
if (el_window !== el_window_contains_focus) {
|
||||
if (el_win !== el_focused) {
|
||||
el_to_focus.focus();
|
||||
tools.debug("UI: Focused window:", el_window);
|
||||
tools.debug("UI: Focused window:", el_win);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var __makeWindowMovable = function(el_window) {
|
||||
let el_header = el_window.querySelector(".window-header");
|
||||
let el_grab = el_window.querySelector(".window-header .window-grab");
|
||||
var __makeWindowMovable = function(el_win) {
|
||||
let el_header = el_win.querySelector(".window-header");
|
||||
let el_grab = el_win.querySelector(".window-header .window-grab");
|
||||
if (el_header === null || el_grab === null) {
|
||||
// Для псевдоокна OCR
|
||||
return;
|
||||
@@ -559,10 +573,10 @@ function __WindowManager() {
|
||||
function startMoving(event) {
|
||||
// При перетаскивании resizable-окна за правый кран экрана оно ужимается.
|
||||
// Этот костыль фиксит это.
|
||||
el_window.style.width = el_window.offsetWidth + "px";
|
||||
el_win.style.width = el_win.offsetWidth + "px";
|
||||
|
||||
__closeAllMenues();
|
||||
__activateWindow(el_window);
|
||||
__activateWindow(el_win);
|
||||
event = (event || window.event);
|
||||
event.preventDefault();
|
||||
|
||||
@@ -580,7 +594,7 @@ function __WindowManager() {
|
||||
}
|
||||
|
||||
function doMoving(event) {
|
||||
el_window.removeAttribute("data-centered");
|
||||
el_win.removeAttribute("data-centered");
|
||||
|
||||
event = (event || window.event);
|
||||
event.preventDefault();
|
||||
@@ -589,8 +603,8 @@ function __WindowManager() {
|
||||
let x = prev_pos.x - event_pos.x;
|
||||
let y = prev_pos.y - event_pos.y;
|
||||
|
||||
el_window.style.top = (el_window.offsetTop - y) + "px";
|
||||
el_window.style.left = (el_window.offsetLeft - x) + "px";
|
||||
el_win.style.top = (el_win.offsetTop - y) + "px";
|
||||
el_win.style.left = (el_win.offsetLeft - x) + "px";
|
||||
|
||||
prev_pos = event_pos;
|
||||
}
|
||||
@@ -613,29 +627,29 @@ function __WindowManager() {
|
||||
}
|
||||
}
|
||||
|
||||
el_window.setAttribute("data-centered", "");
|
||||
el_window.onmousedown = el_window.ontouchstart = () => __activateWindow(el_window);
|
||||
el_win.setAttribute("data-centered", "");
|
||||
el_win.onmousedown = el_win.ontouchstart = () => __activateWindow(el_win);
|
||||
|
||||
el_grab.onmousedown = startMoving;
|
||||
el_grab.ontouchstart = startMoving;
|
||||
};
|
||||
|
||||
var __onFullScreenChange = function(event) {
|
||||
let el_window = event.target;
|
||||
let el_win = event.target;
|
||||
if (!document.fullscreenElement) {
|
||||
let rect = el_window.before_full_screen;
|
||||
let rect = el_win.before_full_screen;
|
||||
if (rect) {
|
||||
el_window.style.width = rect.width + "px";
|
||||
el_window.style.height = rect.height + "px";
|
||||
el_window.style.top = rect.top + "px";
|
||||
el_window.style.left = rect.left + "px";
|
||||
el_win.style.width = rect.width + "px";
|
||||
el_win.style.height = rect.height + "px";
|
||||
el_win.style.top = rect.top + "px";
|
||||
el_win.style.left = rect.left + "px";
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var __fullScreenWindow = function(el_window) {
|
||||
el_window.before_full_screen = el_window.getBoundingClientRect();
|
||||
__getFullScreenFunction(el_window).call(el_window);
|
||||
var __fullScreenWindow = function(el_win) {
|
||||
el_win.before_full_screen = el_win.getBoundingClientRect();
|
||||
__getFullScreenFunction(el_win).call(el_win);
|
||||
if (navigator.keyboard && navigator.keyboard.lock) {
|
||||
navigator.keyboard.lock();
|
||||
} else {
|
||||
@@ -647,26 +661,26 @@ function __WindowManager() {
|
||||
+ "In Chrome use HTTPS and enable <i>system-keyboard-lock</i><br>"
|
||||
+ "by putting at URL <i>chrome://flags/#system-keyboard-lock</i>"
|
||||
);
|
||||
__modalDialog("Keyboard lock is unsupported", msg, true, false, el_window);
|
||||
__modalDialog("Keyboard lock is unsupported", msg, true, false, el_win);
|
||||
}
|
||||
};
|
||||
|
||||
var __maximizeWindow = function(el_window) {
|
||||
var __maximizeWindow = function(el_win) {
|
||||
let el_navbar = $("navbar");
|
||||
let vertical_offset = (el_navbar ? el_navbar.offsetHeight : 0);
|
||||
el_window.style.left = "0px";
|
||||
el_window.style.top = vertical_offset + "px";
|
||||
el_window.style.width = window.innerWidth + "px";
|
||||
el_window.style.height = window.innerHeight - vertical_offset + "px";
|
||||
el_win.style.left = "0px";
|
||||
el_win.style.top = vertical_offset + "px";
|
||||
el_win.style.width = window.innerWidth + "px";
|
||||
el_win.style.height = window.innerHeight - vertical_offset + "px";
|
||||
};
|
||||
|
||||
var __getFullScreenFunction = function(el_window) {
|
||||
if (el_window.requestFullscreen) {
|
||||
return el_window.requestFullscreen;
|
||||
} else if (el_window.webkitRequestFullscreen) {
|
||||
return el_window.webkitRequestFullscreen;
|
||||
} else if (el_window.mozRequestFullscreen) {
|
||||
return el_window.mozRequestFullscreen;
|
||||
var __getFullScreenFunction = function(el_win) {
|
||||
if (el_win.requestFullscreen) {
|
||||
return el_win.requestFullscreen;
|
||||
} else if (el_win.webkitRequestFullscreen) {
|
||||
return el_win.webkitRequestFullscreen;
|
||||
} else if (el_win.mozRequestFullscreen) {
|
||||
return el_win.mozRequestFullscreen;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user