blob: a9fb4f64950b3e545071608ed4602ec1431384cd (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import mem from 'mem';
import {$$} from 'select-dom';
import {DelegateEvent} from 'delegate-it';
import preserveScroll from './preserve-scroll.js';
type EventHandler = (event: DelegateEvent<MouseEvent, HTMLElement>) => void;
export default mem((selector: string | ((clickedItem: HTMLElement) => string)): EventHandler => event => {
if (event.altKey && event.isTrusted) {
const clickedItem = event.delegateTarget;
// `parentElement` is the anchor because `clickedItem` might be hidden/replaced after the click
const resetScroll = preserveScroll(clickedItem.parentElement!);
clickAllExcept(typeof selector === 'string' ? selector : selector(clickedItem), clickedItem);
resetScroll();
}
});
function clickAllExcept(elementsToClick: string, except: HTMLElement): void {
for (const item of $$(elementsToClick)) {
if (item !== except) {
item.click();
}
}
}
|