You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
3.9 KiB
JavaScript
156 lines
3.9 KiB
JavaScript
class MovableView {
|
|
mouseDown = false;
|
|
mouseDownPos = null;
|
|
|
|
// move starts in dragableUi,
|
|
// movable in movableUi,
|
|
// the pos of posUi is set.
|
|
constructor(dragableUi, posUi, funcOnMove) {
|
|
let movableUi = document.getElementById("move-handle-wrapper");
|
|
|
|
dragableUi.addEventListener("mousedown", (event) => {
|
|
if (event.which == 1 && event.currentTarget == event.target) {
|
|
this.mouseDown = true;
|
|
this.mouseDownPos = { x: event.clientX, y: event.clientY };
|
|
|
|
movableUi.style.display = "inherit";
|
|
}
|
|
});
|
|
|
|
movableUi.addEventListener("mouseup", (event) => {
|
|
if (this.mouseDown) {
|
|
dragableUi.style.cursor = "";
|
|
event.stopPropagation();
|
|
event.preventDefault();
|
|
this.mouseDown = false;
|
|
|
|
movableUi.style.display = "none";
|
|
}
|
|
});
|
|
|
|
movableUi.addEventListener("mousemove", (event) => {
|
|
if (this.mouseDown) {
|
|
let posDelta = {
|
|
x: event.clientX - this.mouseDownPos.x,
|
|
y: event.clientY - this.mouseDownPos.y,
|
|
};
|
|
|
|
dragableUi.style.cursor = "move";
|
|
|
|
this.mouseDownPos = { x: event.clientX, y: event.clientY };
|
|
|
|
let left = posUi.offsetLeft;
|
|
let top = posUi.offsetTop;
|
|
|
|
posUi.style.left = Math.max(0, left + posDelta.x) + "px";
|
|
posUi.style.top = Math.max(0, top + posDelta.y) + "px";
|
|
|
|
if (funcOnMove) funcOnMove();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
class PopupDialog extends MovableView {
|
|
constructor(ui) {
|
|
super(ui.querySelector("#header"), ui.querySelector("#view"));
|
|
|
|
this.ui = ui; //wrapper
|
|
this.viewUi = this.ui.querySelector("#view");
|
|
this.headerUi = this.ui.querySelector("#header");
|
|
this.titleUi = this.ui.querySelector("#title");
|
|
|
|
this.ui.onclick = () => {
|
|
this.hide();
|
|
};
|
|
|
|
this.ui.addEventListener("keydown", (event) => {
|
|
if (event.key == "Escape") {
|
|
this.hide();
|
|
|
|
event.preventDefault();
|
|
}
|
|
event.stopPropagation();
|
|
});
|
|
|
|
this.viewUi.onclick = function (event) {
|
|
//event.preventDefault();
|
|
event.stopPropagation();
|
|
};
|
|
|
|
this.titleUi.onclick = function (event) {
|
|
//event.preventDefault();
|
|
event.stopPropagation();
|
|
};
|
|
|
|
this.titleUi.addEventListener("mousedown", (event) => {
|
|
//event.preventDefault();
|
|
event.stopPropagation();
|
|
});
|
|
|
|
this.titleUi.addEventListener("contextmenu", (event) => {
|
|
event.stopPropagation();
|
|
});
|
|
|
|
// this.viewUi.addEventListener("contextmenu", (e)=>{
|
|
// e.stopPropagation();
|
|
// e.preventDefault();
|
|
// });
|
|
|
|
// this.ui.querySelector("#info-view").onclick = function(event){
|
|
// event.preventDefault();
|
|
// event.stopPropagation();
|
|
// };
|
|
|
|
this.ui.querySelector("#btn-exit").onclick = (event) => {
|
|
this.hide();
|
|
};
|
|
|
|
this.maximizeButton = this.ui.querySelector("#btn-maximize");
|
|
|
|
if (this.maximizeButton) {
|
|
this.maximizeButton.onclick = (event) => {
|
|
let v = this.viewUi;
|
|
v.style.top = "0%";
|
|
v.style.left = "0%";
|
|
v.style.width = "100%";
|
|
v.style.height = "100%";
|
|
v.style["z-index"] = 5;
|
|
|
|
event.currentTarget.style.display = "none";
|
|
this.ui.querySelector("#btn-restore").style.display = "inherit";
|
|
};
|
|
}
|
|
|
|
this.restoreButton = this.ui.querySelector("#btn-restore");
|
|
|
|
if (this.restoreButton) {
|
|
this.restoreButton.onclick = (event) => {
|
|
let v = this.viewUi;
|
|
v.style.top = "20%";
|
|
v.style.left = "20%";
|
|
v.style.width = "60%";
|
|
v.style.height = "60%";
|
|
event.currentTarget.style.display = "none";
|
|
this.ui.querySelector("#btn-maximize").style.display = "inherit";
|
|
};
|
|
}
|
|
}
|
|
|
|
hide(msg) {
|
|
this.ui.style.display = "none";
|
|
|
|
if (this.onExit) {
|
|
this.onExit(msg);
|
|
}
|
|
}
|
|
|
|
show(onexit) {
|
|
this.ui.style.display = "inherit";
|
|
this.onExit = onexit;
|
|
//this.ui.focus();
|
|
}
|
|
}
|
|
|
|
export { PopupDialog, MovableView };
|