* applied eslint * add locales and lint the project * removed error boundary * updated locales * fix min files * fix locales
48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import type Screen from './Screen';
|
|
import type Marker from './Marker';
|
|
|
|
export default class Inspector {
|
|
constructor(
|
|
private screen: Screen,
|
|
private marker: Marker,
|
|
) {}
|
|
|
|
private onMouseMove = (e: MouseEvent) => {
|
|
e.stopPropagation();
|
|
|
|
const target = this.screen.getElementFromPoint(e);
|
|
if (target === this.marker.target) {
|
|
return;
|
|
}
|
|
|
|
this.marker.mark(target);
|
|
};
|
|
|
|
private onOverlayLeave = () => this.marker.unmark();
|
|
|
|
private onMarkClick = () => {
|
|
const { target } = this.marker;
|
|
if (!target) {
|
|
return;
|
|
}
|
|
this.clickCallback && this.clickCallback({ target });
|
|
};
|
|
|
|
addClickListener(callback: (el: { target: Element }) => void) {
|
|
this.clickCallback = callback;
|
|
}
|
|
|
|
private clickCallback: (e: { target: Element }) => void = () => {};
|
|
|
|
enable() {
|
|
this.screen.overlay.addEventListener('mousemove', this.onMouseMove);
|
|
this.screen.overlay.addEventListener('mouseleave', this.onOverlayLeave);
|
|
this.screen.overlay.addEventListener('click', this.onMarkClick);
|
|
}
|
|
|
|
clean() {
|
|
this.screen.overlay.removeEventListener('mousemove', this.onMouseMove);
|
|
this.screen.overlay.removeEventListener('mouseleave', this.onOverlayLeave);
|
|
this.screen.overlay.removeEventListener('click', this.onMarkClick);
|
|
}
|
|
}
|