2025-07-05 19:42:44 +02:00
|
|
|
(async () => {
|
|
|
|
|
|
|
|
const uiResizer = document.getElementById('resizer');
|
|
|
|
const uiLeftColumn = uiResizer.previousElementSibling;
|
|
|
|
const uiRightColumn = uiResizer.nextElementSibling;
|
|
|
|
const uiParent = uiResizer.parentElement;
|
|
|
|
|
|
|
|
let isResizing = false;
|
|
|
|
let abortSignal = null;
|
|
|
|
|
|
|
|
function onMouseMove(e) {
|
|
|
|
// we resize the columns by applying felx: <ratio> to the columns
|
|
|
|
|
|
|
|
// compute the percentage the mouse is in the parent
|
|
|
|
const percentage = (e.clientX - uiParent.offsetLeft) / uiParent.clientWidth;
|
|
|
|
// clamp the percentage between 0.1 and 0.9
|
|
|
|
const clampedPercentage = Math.max(0.1, Math.min(0.9, percentage));
|
|
|
|
// set the flex property of the columns
|
|
|
|
uiLeftColumn.style.flex = `${clampedPercentage}`;
|
|
|
|
uiRightColumn.style.flex = `${1 - clampedPercentage}`;
|
2025-07-05 19:42:44 +02:00
|
|
|
}
|
2025-07-05 19:42:44 +02:00
|
|
|
|
|
|
|
function onMouseUp(e) {
|
|
|
|
// restore user selection
|
|
|
|
document.body.style.userSelect = '';
|
|
|
|
|
|
|
|
// remove the mousemove and mouseup events
|
|
|
|
if (abortSignal) {
|
|
|
|
abortSignal.abort();
|
|
|
|
abortSignal = null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
uiResizer.addEventListener('mousedown', e => {
|
|
|
|
e.preventDefault();
|
|
|
|
isResizing = true;
|
|
|
|
|
|
|
|
// prevent text selection
|
|
|
|
document.body.style.userSelect = 'none';
|
|
|
|
|
|
|
|
// register the mousemove and mouseup events
|
|
|
|
abortSignal = new AbortController();
|
|
|
|
document.addEventListener('mousemove', onMouseMove, { signal: abortSignal.signal });
|
|
|
|
document.addEventListener('mouseup', onMouseUp, { signal: abortSignal.signal });
|
|
|
|
});
|
|
|
|
|
|
|
|
})();
|