Allow dragging the message box (#1274)
* Allow dragging the message box - Allows the message box to be dragged to any position on the screen, so the user can set it to their wishes. - Something as discussed in #1270. * Use CSS to prevent user select * Remove whitespace * Imagine wasted new lines * Make it more niece * Remove unnecessary check * Fix calculation code * cursor: move; * fixup * Don't declare variable here * Cap the move to 30px in each side * I should pay attention to my english lessons Co-authored-by: tophf <tophf@gmx.com>
This commit is contained in:
parent
a2c8953e63
commit
264544dfa9
|
@ -72,6 +72,9 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
min-height: 42px;
|
min-height: 42px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
cursor: move;
|
||||||
|
user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#message-box-title::before {
|
#message-box-title::before {
|
||||||
|
|
|
@ -43,6 +43,7 @@ messageBox.show = async ({
|
||||||
bindGlobalListeners();
|
bindGlobalListeners();
|
||||||
createElement();
|
createElement();
|
||||||
document.body.appendChild(messageBox.element);
|
document.body.appendChild(messageBox.element);
|
||||||
|
bindElementLiseners();
|
||||||
|
|
||||||
messageBox._originalFocus = document.activeElement;
|
messageBox._originalFocus = document.activeElement;
|
||||||
// focus the first focusable child but skip the first external link which is usually `feedback`
|
// focus the first focusable child but skip the first external link which is usually `feedback`
|
||||||
|
@ -67,7 +68,15 @@ messageBox.show = async ({
|
||||||
messageBox._resolve = resolve;
|
messageBox._resolve = resolve;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function clamp(value, min, max) {
|
||||||
|
return Math.min(Math.max(value, min), max);
|
||||||
|
}
|
||||||
|
|
||||||
function initOwnListeners() {
|
function initOwnListeners() {
|
||||||
|
let listening = false;
|
||||||
|
let offsetX = 0;
|
||||||
|
let offsetY = 0;
|
||||||
|
let clickX, clickY;
|
||||||
messageBox.listeners = {
|
messageBox.listeners = {
|
||||||
closeIcon() {
|
closeIcon() {
|
||||||
resolveWith({button: -1});
|
resolveWith({button: -1});
|
||||||
|
@ -102,6 +111,37 @@ messageBox.show = async ({
|
||||||
scroll() {
|
scroll() {
|
||||||
scrollTo(messageBox._blockScroll.x, messageBox._blockScroll.y);
|
scrollTo(messageBox._blockScroll.x, messageBox._blockScroll.y);
|
||||||
},
|
},
|
||||||
|
mouseDown(event) {
|
||||||
|
if (event.button !== 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!listening) {
|
||||||
|
window.on('mouseup', messageBox.listeners.mouseUp, {passive: true});
|
||||||
|
window.on('mousemove', messageBox.listeners.mouseMove, {passive: true});
|
||||||
|
listening = true;
|
||||||
|
}
|
||||||
|
clickX = event.clientX - offsetX;
|
||||||
|
clickY = event.clientY - offsetY;
|
||||||
|
},
|
||||||
|
mouseUp(event) {
|
||||||
|
if (event.button !== 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
window.off('mouseup', messageBox.listeners.mouseUp);
|
||||||
|
window.off('mousemove', messageBox.listeners.mouseMove);
|
||||||
|
listening = false;
|
||||||
|
},
|
||||||
|
mouseMove(event) {
|
||||||
|
const x = clamp(event.clientX, 30, innerWidth - 30) - clickX;
|
||||||
|
const y = clamp(event.clientY, 30, innerHeight - 30) - clickY;
|
||||||
|
|
||||||
|
offsetX = x;
|
||||||
|
offsetY = y;
|
||||||
|
|
||||||
|
$('#message-box > div').style.transform =
|
||||||
|
`translateX(${x}px)
|
||||||
|
translateY(${y}px)`;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,9 +191,16 @@ messageBox.show = async ({
|
||||||
window.on('keydown', messageBox.listeners.key, true);
|
window.on('keydown', messageBox.listeners.key, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function bindElementLiseners() {
|
||||||
|
$('#message-box-title').on('mousedown', messageBox.listeners.mouseDown, {passive: true});
|
||||||
|
}
|
||||||
|
|
||||||
function unbindGlobalListeners() {
|
function unbindGlobalListeners() {
|
||||||
window.off('keydown', messageBox.listeners.key, true);
|
window.off('keydown', messageBox.listeners.key, true);
|
||||||
window.off('scroll', messageBox.listeners.scroll);
|
window.off('scroll', messageBox.listeners.scroll);
|
||||||
|
window.off('mouseup', messageBox.listeners.mouseUp);
|
||||||
|
window.off('mousemove', messageBox.listeners.mouseMove);
|
||||||
|
$('#message-box-title').off('mousedown', messageBox.listeners.mouseDown);
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeSelf() {
|
function removeSelf() {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user