mirror of
https://github.com/aliasvault/aliasvault.git
synced 2026-03-18 14:49:08 -04:00
43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
let currentHandler = null;
|
|
let currentDotNetHelper = null;
|
|
|
|
export function registerClickOutsideHandler(dotNetHelper, contentIds, methodName) {
|
|
unregisterClickOutsideHandler();
|
|
|
|
currentDotNetHelper = dotNetHelper;
|
|
const idArray = Array.isArray(contentIds) ? contentIds : contentIds.split(',').map(id => id.trim());
|
|
|
|
const mouseHandler = (event) => {
|
|
const isOutside = idArray.every(id => {
|
|
const content = document.getElementById(id);
|
|
return !content?.contains(event.target);
|
|
});
|
|
|
|
if (isOutside) {
|
|
currentDotNetHelper.invokeMethodAsync(methodName);
|
|
}
|
|
};
|
|
|
|
const keyHandler = (event) => {
|
|
if (event.key === 'Escape') {
|
|
currentDotNetHelper.invokeMethodAsync(methodName);
|
|
}
|
|
};
|
|
|
|
currentHandler = {
|
|
mouse: mouseHandler,
|
|
key: keyHandler
|
|
};
|
|
|
|
document.addEventListener('mousedown', mouseHandler);
|
|
document.addEventListener('keydown', keyHandler);
|
|
}
|
|
|
|
export function unregisterClickOutsideHandler() {
|
|
if (currentHandler) {
|
|
document.removeEventListener('mousedown', currentHandler);
|
|
document.removeEventListener('keydown', currentHandler);
|
|
currentHandler = null;
|
|
}
|
|
}
|