mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-13 01:30:31 +08:00
windows control
This commit is contained in:
parent
34d3e9d637
commit
57ea0c285c
@ -110,10 +110,10 @@ div.ctl-dropdown-content button.row50:not(:first-child), button.row25:not(:first
|
|||||||
div.ctl-dropdown-content hr {
|
div.ctl-dropdown-content hr {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
display: block;
|
display: block;
|
||||||
height: 1px;
|
height: 0px;
|
||||||
border: 0;
|
|
||||||
padding: 0;
|
padding: 0;
|
||||||
background-color: var(--bg-color-dark);
|
border: none;
|
||||||
|
border-top: var(--dark-border);
|
||||||
}
|
}
|
||||||
div.ctl-dropdown-content-text {
|
div.ctl-dropdown-content-text {
|
||||||
margin: 10px 15px 10px 15px;
|
margin: 10px 15px 10px 15px;
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
:root {
|
:root {
|
||||||
--dark-border: 1px solid #17191d;
|
--dark-border: thin solid #17191d;
|
||||||
--grey-border: 1px solid #202225;
|
--grey-border: thin solid #202225;
|
||||||
--black-border: 1px solid black;
|
--normal-border: thin solid #36393f;
|
||||||
|
--black-border: thin solid black;
|
||||||
|
|
||||||
--micro-shadow: 1px 2px 4px 0 rgba(0, 0, 0, 0.4);
|
--micro-shadow: 1px 2px 4px 0 rgba(0, 0, 0, 0.4);
|
||||||
--small-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2);
|
--small-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2);
|
||||||
|
|||||||
@ -2,6 +2,7 @@ div.window {
|
|||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
-moz-user-select: none;
|
-moz-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
overflow: hidden;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
border: var(--dark-border);
|
border: var(--dark-border);
|
||||||
-webkit-border-radius: 8px;
|
-webkit-border-radius: 8px;
|
||||||
@ -11,23 +12,60 @@ div.window {
|
|||||||
box-shadow: var(--big-shadow);
|
box-shadow: var(--big-shadow);
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
background-color: var(--bg-color-light);
|
background-color: var(--bg-color-light);
|
||||||
padding: 3px 10px 10px 10px;
|
padding: 30px 9px 9px 9px;
|
||||||
-webkit-transform: translate(-50%);
|
-webkit-transform: translate(-50%, -50%);
|
||||||
-moz-transform: translate(-50%);
|
-moz-transform: translate(-50%, -50%);
|
||||||
transform: translate(-50%);
|
transform: translate(-50%, -50%);
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.window-header {
|
div.window-header {
|
||||||
color: var(--fg-color-dark);
|
overflow: hidden;
|
||||||
font-size: 0.8em;
|
top: 0;
|
||||||
cursor: move;
|
left: 0;
|
||||||
padding-left: 6px;
|
position: absolute;
|
||||||
padding-bottom: 4px;
|
width: 100%;
|
||||||
|
padding: 0;
|
||||||
|
height: 20px;
|
||||||
|
border-bottom: var(--normal-border);
|
||||||
}
|
}
|
||||||
|
|
||||||
div.window hr.window-sep {
|
div.window-grab {
|
||||||
margin: 0 0 6px 0;
|
overflow: hidden;
|
||||||
display: block;
|
font-size: 0.8em;
|
||||||
border: none;
|
top: 0;
|
||||||
border-top: 1px solid var(--bg-color-normal);
|
left: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 20px;
|
||||||
|
cursor: move;
|
||||||
|
padding: 3px 0 2px 20px;
|
||||||
|
color: var(--fg-color-dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
button.window-button-close {
|
||||||
|
outline: none;
|
||||||
|
position: absolute;
|
||||||
|
top: -2px;
|
||||||
|
right: -6px;
|
||||||
|
width: 44px;
|
||||||
|
height: 24px;
|
||||||
|
padding-left: 0;
|
||||||
|
color: var(--fg-color-inactive);
|
||||||
|
background-color: var(--bg-color-normal);
|
||||||
|
display: inline-block;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
button.window-button-close:hover {
|
||||||
|
color: var(--fg-color-intensive);
|
||||||
|
background-color: var(--bg-color-dark) !important;
|
||||||
|
}
|
||||||
|
button.window-button-close:disabled {
|
||||||
|
color: var(--fg-color-inactive);
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
button.window-button-close:active {
|
||||||
|
color: var(--fg-color-selected) !important;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,6 +44,9 @@
|
|||||||
System ↴
|
System ↴
|
||||||
</a>
|
</a>
|
||||||
<div class="ctl-dropdown-content" style="display:none">
|
<div class="ctl-dropdown-content" style="display:none">
|
||||||
|
<button onclick="ui.showWindow('stream-window')">• Show stream</button>
|
||||||
|
<button onclick="ui.showWindow('keyboard-window')">• Show keyboard</button>
|
||||||
|
<hr>
|
||||||
<button disabled id="stream-reset-button" onclick="stream.clickResetButton();">• Reset stream</button>
|
<button disabled id="stream-reset-button" onclick="stream.clickResetButton();">• Reset stream</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -196,15 +199,16 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="window" style="left:50%; top:70px">
|
<div id="stream-window" class="window">
|
||||||
<div class="window-header">Stream</div>
|
<div class="window-header"><div class="window-grab">Stream</div></div>
|
||||||
<!-- <hr class="window-sep"> -->
|
|
||||||
<img id="stream-image" class="stream-image-inactive" alt="Loading..." src="/streamer/?action=stream"/>
|
<img id="stream-image" class="stream-image-inactive" alt="Loading..." src="/streamer/?action=stream"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="window" style="left:75%; top:60%">
|
<div id="keyboard-window" class="window">
|
||||||
<div class="window-header">Virtual Keyboard</div>
|
<div class="window-header">
|
||||||
<hr class="window-sep">
|
<div class="window-grab">Virtual Keyboard</div>
|
||||||
|
<button class="window-button-close">×</button>
|
||||||
|
</div>
|
||||||
<div id="keyboard">
|
<div id="keyboard">
|
||||||
<div class="keyboard-block">
|
<div class="keyboard-block">
|
||||||
<div class="keyboard-row">
|
<div class="keyboard-row">
|
||||||
|
|||||||
@ -7,10 +7,16 @@ var ui = new function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
window.onclick = __windowClickHandler;
|
window.onclick = __windowClickHandler;
|
||||||
|
|
||||||
Array.prototype.forEach.call(document.getElementsByClassName("window"), function(el_window) {
|
Array.prototype.forEach.call(document.getElementsByClassName("window"), function(el_window) {
|
||||||
var el_header = el_window.querySelector(".window-header");
|
var el_grab = el_window.querySelector(".window-header .window-grab");
|
||||||
__makeWindowMovable(el_header, el_window);
|
__makeWindowMovable(el_grab, el_window);
|
||||||
|
|
||||||
|
var el_button = el_window.querySelector(".window-header .window-button-close");
|
||||||
|
if (el_button) {
|
||||||
|
el_button.onclick = function() {
|
||||||
|
el_window.style.display = "none";
|
||||||
|
};
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (typeof document.hidden !== "undefined") {
|
if (typeof document.hidden !== "undefined") {
|
||||||
@ -40,6 +46,32 @@ var ui = new function() {
|
|||||||
window.onblur = hid.releaseAll;
|
window.onblur = hid.releaseAll;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.showWindow = function(id) {
|
||||||
|
var el_window = $(id);
|
||||||
|
if (!__isWindowOnPage(el_window)) {
|
||||||
|
el_window.style.top = "50%";
|
||||||
|
el_window.style.left = "50%";
|
||||||
|
}
|
||||||
|
el_window.style.display = "block";
|
||||||
|
__raiseWindow(el_window);
|
||||||
|
};
|
||||||
|
|
||||||
|
var __isWindowOnPage = function(el_window) {
|
||||||
|
var view_top = $("ctl").clientHeight;
|
||||||
|
var view_bottom = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
|
||||||
|
var view_left = 0;
|
||||||
|
var view_right = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
|
||||||
|
|
||||||
|
var rect = el_window.getBoundingClientRect();
|
||||||
|
|
||||||
|
return (
|
||||||
|
(rect.bottom - el_window.clientHeight / 1.5) <= view_bottom
|
||||||
|
&& rect.top >= view_top
|
||||||
|
&& (rect.left + el_window.clientWidth / 1.5) >= view_left
|
||||||
|
&& (rect.right - el_window.clientWidth / 1.5) <= view_right
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
var __toggleMenu = function(el_a) {
|
var __toggleMenu = function(el_a) {
|
||||||
Array.prototype.forEach.call(document.getElementsByClassName("ctl-item"), function(el_item) {
|
Array.prototype.forEach.call(document.getElementsByClassName("ctl-item"), function(el_item) {
|
||||||
var el_menu = el_item.parentElement.querySelector(".ctl-dropdown-content");
|
var el_menu = el_item.parentElement.querySelector(".ctl-dropdown-content");
|
||||||
@ -67,12 +99,12 @@ var ui = new function() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var __makeWindowMovable = function(el_header, el_body) {
|
var __makeWindowMovable = function(el_grab, el_window) {
|
||||||
var prev_x = 0;
|
var prev_x = 0;
|
||||||
var prev_y = 0;
|
var prev_y = 0;
|
||||||
|
|
||||||
function startMoving(event) {
|
function startMoving(event) {
|
||||||
__raiseWindow(el_body);
|
__raiseWindow(el_window);
|
||||||
event = (event || window.event);
|
event = (event || window.event);
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
prev_x = event.clientX;
|
prev_x = event.clientX;
|
||||||
@ -88,8 +120,8 @@ var ui = new function() {
|
|||||||
y = prev_y - event.clientY;
|
y = prev_y - event.clientY;
|
||||||
prev_x = event.clientX;
|
prev_x = event.clientX;
|
||||||
prev_y = event.clientY;
|
prev_y = event.clientY;
|
||||||
el_body.style.top = (el_body.offsetTop - y) + "px";
|
el_window.style.top = (el_window.offsetTop - y) + "px";
|
||||||
el_body.style.left = (el_body.offsetLeft - x) + "px";
|
el_window.style.left = (el_window.offsetLeft - x) + "px";
|
||||||
}
|
}
|
||||||
|
|
||||||
function stopMoving() {
|
function stopMoving() {
|
||||||
@ -97,12 +129,12 @@ var ui = new function() {
|
|||||||
document.onmouseup = null;
|
document.onmouseup = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
el_header.onmousedown = startMoving;
|
el_grab.onmousedown = startMoving;
|
||||||
el_body.onclick = function () { __raiseWindow(el_body) };
|
el_window.onclick = function () { __raiseWindow(el_window) };
|
||||||
};
|
};
|
||||||
|
|
||||||
var __raiseWindow = function(el_body) {
|
var __raiseWindow = function(el_window) {
|
||||||
__top_z_index += 1;
|
__top_z_index += 1;
|
||||||
el_body.style.zIndex = __top_z_index;
|
el_window.style.zIndex = __top_z_index;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user