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

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 };