* feat(ui/tracker): start tag n watch * fix(tracker): test coverage, fix some watcher api * fix(tracker): add intersectionobserver, adjust tests * feat(tracker): relay + apollo plugins * feat(ui): tags search * feat(ui): tags name edit * feat(ui): tags search icon * feat(ui): icons for tabs in player * feat(ui): save and find button * feat(tracker): save tags in session storage (just in case) * feat(ui): improve loading * feat(ui): fix icon names gen * feat(ui): fix typo
46 lines
1.3 KiB
TypeScript
46 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 = () => {
|
|
return this.marker.unmark();
|
|
}
|
|
|
|
private onMarkClick = () => {
|
|
let target = this.marker.target;
|
|
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)
|
|
}
|
|
}
|