madstuff-website/js/window.js

54 lines
1.8 KiB
JavaScript

/**
* @file Move windows on mouse drag.
*
* @licstart The following is the entire license notice for the JavaScript code
* in this page.
*
* Copyright (C) 2026 Madison L.
*
* The JavaScript code in this page is free software: you can redistribute it
* and/or modify it under the terms of the GNU General Public License (GNU GPL)
* as published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version. The code is distributed
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
*
* As additional permission under GNU GPL version 3 section 7, you may
* distribute non-source (e.g., minimized or compacted) forms of that code
* without the copy of the GNU GPL normally required by section 4, provided you
* include this license notice and a URL through which recipients can access the
* Corresponding Source.
*
* @licend The above is the entire license notice for the JavaScript code in
* this page.
*/
// TODO: Rewrite to support more than one window per page.
const subwindow = document.getElementById("window");
const titlebar = document.getElementById("window-titlebar");
let dragging = false;
let prevPosX;
let prevPosY;
titlebar.addEventListener("mousedown", (event) => {
dragging = true;
prevPosX = event.clientX;
prevPosY = event.clientY;
});
window.addEventListener("mousemove", (event) => {
if (!dragging)
return;
const newPosX = subwindow.offsetLeft - (prevPosX - event.clientX);
const newPosY = subwindow.offsetTop - (prevPosY - event.clientY);
subwindow.style.left = newPosX + "px";
subwindow.style.top = newPosY + "px";
prevPosX = event.clientX;
prevPosY = event.clientY;
});
window.addEventListener("mouseup", (_event) => {
dragging = false;
});