Skip to content
Permalink
6775eba989
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
54 lines (45 sloc) 2.04 KB
import { browser } from "$app/environment";
import type { Writeable } from "$lib/types/generic";
if (browser && !navigator.userActivation) {
const TRANSIENT_TIMEOUT = navigator.userAgent.includes('Firefox') ? 5000 : 2000;
let _timeout: number | undefined;
const userActivation: Writeable<UserActivation> = {
isActive: false,
hasBeenActive: false
};
const receiveEvent = (e: Event) => {
// An activation triggering input event is any event whose isTrusted attribute is true [...]
if (!e.isTrusted) return;
// and whose type is one of:
if (e instanceof PointerEvent) {
if (
// "pointerdown", provided the event's pointerType is "mouse";
(e.type === 'pointerdown' && e.pointerType !== 'mouse')
// "pointerup", provided the event's pointerType is not "mouse";
|| (e.type === 'pointerup' && e.pointerType === 'mouse')
)
return;
} else if (e instanceof KeyboardEvent) {
// "keydown", provided the key is neither the Esc key nor a shortcut key
// reserved by the user agent;
if (e.ctrlKey || e.shiftKey || e.altKey || e.metaKey)
return;
// the handling for this is a bit more complex,
// but this is fine for our use case
if (e.key !== 'Return' && e.key !== 'Enter' && e.key.length > 1)
return;
}
userActivation.hasBeenActive = true;
userActivation.isActive = true;
clearTimeout(_timeout);
_timeout = window.setTimeout(() => {
userActivation.isActive = false;
_timeout = undefined;
}, TRANSIENT_TIMEOUT);
}
// https://html.spec.whatwg.org/multipage/interaction.html#the-useractivation-interface
for (const event of [ 'keydown', 'mousedown', 'pointerdown', 'pointerup', 'touchend' ]) {
window.addEventListener(event, receiveEvent);
}
(navigator.userActivation as UserActivation) = userActivation;
}