4dc7cc704723b9546d5a13cc46928f02644f1a49
[apps/outliner/.git] / src / cursor.ts
1 export class Cursor {
2   constructor() {
3
4   }
5
6   get() {
7     return document.querySelector('.cursor');
8   }
9
10   getIdOfNode(): string {
11     return this.get().getAttribute('data-id');
12   }
13
14   unset() {
15     const el = this.get();
16     if(el) {
17       el.classList.remove('cursor');
18     }
19   }
20
21   set(elementId: string) {
22     this.unset();
23     const el = document.querySelector(elementId);
24
25     if(el) {
26       el.classList.add('cursor');
27       if(!this.isVisible(elementId)) {
28         el.scrollIntoView(true);
29       }
30     }
31   }
32
33   collapse() {
34     this.get().classList.remove('expanded');
35     this.get().classList.add('collapsed');
36   }
37
38   expand() {
39     this.get().classList.remove('collapsed');
40     this.get().classList.add('expanded');
41   }
42
43   isNodeCollapsed(): boolean {
44     return this.get().classList.contains('collapsed');
45   }
46   
47   isNodeExpanded(): boolean {
48     return this.get().classList.contains('expanded');
49   }
50
51   isVisible(elementId: string) {
52     const el = document.querySelector(elementId) as HTMLElement;
53     var rect = el.getBoundingClientRect();
54     return (
55         rect.top >= 0 &&
56         rect.left >= 0 &&
57         rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&     
58         rect.right <= (window.innerWidth || document.documentElement.clientWidth)
59     );
60   }
61 }