[go: nahoru, domu]

blob: 03e2ed9d460a707ce2cad923d1dde2f8f37b9644 [file] [log] [blame]
// Copyright 2023 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as UI from '../../../ui/legacy/legacy.js';
export class RecorderShortcutHelper {
#abortController: AbortController;
#timeoutId: NodeJS.Timeout|null = null;
#timeout: number;
constructor(timeout = 200) {
this.#timeout = timeout;
this.#abortController = new AbortController();
}
#cleanInternals(): void {
this.#abortController.abort();
if (this.#timeoutId) {
clearTimeout(this.#timeoutId);
}
this.#abortController = new AbortController();
}
#handleCallback(callback: () => void): void {
this.#cleanInternals();
void callback();
}
handleShortcut(callback: () => void): void {
this.#cleanInternals();
document.addEventListener(
'keyup',
event => {
if (UI.KeyboardShortcut.KeyboardShortcut.eventHasCtrlEquivalentKey(event)) {
this.#handleCallback(callback);
}
},
{signal: this.#abortController.signal},
);
this.#timeoutId = setTimeout(
() => this.#handleCallback(callback),
this.#timeout,
);
}
}