hoverPopover
プロパティをもつオブジェクトなら本当になんでもいい。
interface HoverParent {
hoverPopover: HoverPopover | null;
}
HoverPopover は parent: HoverParent
プロパティとして「親」の HoverParent
オブジェクトへの参照をもっている。
ひとつの HoverParent
を親とする HoverPopover
が複数あってもよいが、その場合でも親オブジェクトの hoverPopover
プロパティにはそのうちのひとつしかセットされず、このひとつが実際に画面に表示されるようになっている。
このようにして、ひとつの HoverParent を親としてもつ HoverPopover のうち、実際に開いているものが高々 1 個に抑えられるようにしている。
MarkdownView において普通にhover page previewを起動する(Ctrl
/Cmd
+リンク上にマウスをホバー)と、HoverParent
としては view.currentMode
が使われる。
HoverPopover
へのアクセスHoverPopover > ^827e00 でも触れたように、hoverPopover
プロパティがセットされるのは HoverPopover
のコンストラクタ内ではなく、実際にこのポップオーバーを画面に表示する show()
メソッドの途中で呼ばれる onShow()
メソッドである。なので、this.hoverPopover
としてそれにアクセスできるようになるまでにはちょっとラグがある。
hoverPopover
がセットされた瞬間になんらかの処理をする(たとえば hoverEl
にCSSクラスを追加するなど)、ということをしたければ、HoverParent
を implement
したクラスを定義して、hoverPopover
を accessor property にすればよい。つまり、setter 内でそれらの処理をすればいい。
Quick Preview ではそうした。
もっと原始的には、setTimeout
すればだいたいの場合はうまくいくはずではある。