summaryrefslogtreecommitdiff
path: root/wwwroot
diff options
context:
space:
mode:
authorJake Mannens <jake@asger.xyz>2023-09-07 09:34:07 +1000
committerJake Mannens <jake@asger.xyz>2023-09-07 09:34:07 +1000
commit85e718f94d4dd9ed539de82971710f117566b740 (patch)
tree267b2487439e974f2ec2d9c74efa377d0ae26450 /wwwroot
parent013c841bf30771b04173cfeefe4e1d16d1127dea (diff)
Improved dialog styling and made dialogs draggable
Diffstat (limited to 'wwwroot')
-rw-r--r--wwwroot/js/dialog.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/wwwroot/js/dialog.js b/wwwroot/js/dialog.js
new file mode 100644
index 0000000..7ea141e
--- /dev/null
+++ b/wwwroot/js/dialog.js
@@ -0,0 +1,63 @@
+function dialogMouseDown(e) {
+ bumpDialog(e.currentTarget);
+}
+
+function dialogTitleMouseDown(e) {
+ e = e || window.event;
+ e.preventDefault();
+ var element = e.currentTarget.parentElement;
+ var ds = element.dataset;
+ ds.lastX = e.clientX;
+ ds.lastY = e.clientY;
+
+ window.dragDialog = element;
+ document.onmouseup = dragMouseUp;
+ document.onmousemove = dragMouseMove;
+}
+
+function dragMouseUp() {
+ window.dragDialog = null;
+ document.onmouseup = null;
+ document.onmousemove = null;
+}
+
+function dragMouseMove(e) {
+ e = e || window.event;
+ e.preventDefault();
+ var element = window.dragDialog;
+ var ds = element.dataset;
+ deltaX = ds.lastX - e.clientX;
+ deltaY = ds.lastY - e.clientY;
+ ds.lastX = e.clientX;
+ ds.lastY = e.clientY;
+ element.style.left = (element.offsetLeft - deltaX) + 'px';
+ element.style.top = (element.offsetTop - deltaY) + 'px';
+}
+
+function setDialogVisibility(element, visible) {
+ if(visible) {
+ element.style.left = null;
+ element.style.top = null;
+ element.style.opacity = 1;
+ element.style.visibility = 'visible';
+ bumpDialog(element);
+ } else {
+ element.style.opacity = 0;
+ element.style.visibility = 'hidden';
+ }
+}
+
+function bumpDialog(element) {
+ var dialogs = Array
+ .from(document.querySelectorAll('div.dialog'))
+ .map(e => ({ zIndex: parseInt(e.style.zIndex), element: e }))
+ .sort((a, b) => a.zIndex - b.zIndex)
+ .map(d => d.element)
+ .filter(e => e != element);
+
+ dialogs.push(element);
+
+ var z = 900;
+ for(var d of dialogs)
+ d.style.zIndex = z++;
+}