Fix mobile scrolling. Increase press timeout. Cancel longpress on scroll

This commit is contained in:
Cohee 2023-11-08 01:10:51 +02:00
parent 48e41d89cb
commit 44f77f3bb3

View File

@ -281,7 +281,7 @@ class BulkEditOverlay {
static selectedClass = 'character_selected'; static selectedClass = 'character_selected';
static legacySelectedClass = 'bulk_select_checkbox'; static legacySelectedClass = 'bulk_select_checkbox';
static longPressDelay = 1500; static longPressDelay = 2500;
#state = BulkEditOverlayState.browse; #state = BulkEditOverlayState.browse;
#longPress = false; #longPress = false;
@ -357,10 +357,12 @@ class BulkEditOverlay {
const elements = this.#getEnabledElements(); const elements = this.#getEnabledElements();
elements.forEach(element => element.addEventListener('touchstart', this.handleHold)); elements.forEach(element => element.addEventListener('touchstart', this.handleHold));
elements.forEach(element => element.addEventListener('mousedown', this.handleHold)); elements.forEach(element => element.addEventListener('mousedown', this.handleHold));
elements.forEach(element => element.addEventListener('contextmenu', this.handleDefaultContextMenu));
elements.forEach(element => element.addEventListener('touchend', this.handleLongPressEnd)); elements.forEach(element => element.addEventListener('touchend', this.handleLongPressEnd));
elements.forEach(element => element.addEventListener('mouseup', this.handleLongPressEnd)); elements.forEach(element => element.addEventListener('mouseup', this.handleLongPressEnd));
elements.forEach(element => element.addEventListener('dragend', this.handleLongPressEnd)); elements.forEach(element => element.addEventListener('dragend', this.handleLongPressEnd));
elements.forEach(element => element.addEventListener('touchmove', this.handleLongPressEnd));
const grid = document.getElementById(BulkEditOverlay.containerId); const grid = document.getElementById(BulkEditOverlay.containerId);
grid.addEventListener('click', this.handleCancelClick); grid.addEventListener('click', this.handleCancelClick);
@ -410,12 +412,16 @@ class BulkEditOverlay {
document.removeEventListener('click', this.handleContextMenuHide); document.removeEventListener('click', this.handleContextMenuHide);
} }
handleHold = (event) => { handleDefaultContextMenu = (event) => {
if (0 !== event.button && event.type !== 'touchstart') return; if (this.isLongPress) {
// Prevent call for mobile browser context menu on long-press.
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
return false;
}
}
handleHold = (event) => {
if (0 !== event.button && event.type !== 'touchstart') return;
this.isLongPress = true; this.isLongPress = true;
setTimeout(() => { setTimeout(() => {
@ -540,7 +546,8 @@ class BulkEditOverlay {
Promise.all(this.selectedCharacters.map(async characterId => CharacterContextMenu.delete(characterId, deleteChats))) Promise.all(this.selectedCharacters.map(async characterId => CharacterContextMenu.delete(characterId, deleteChats)))
.then(() => getCharacters()) .then(() => getCharacters())
.then(() => this.browseState())} .then(() => this.browseState())
}
); );
} }