HoverParent
...

hoverPopover プロパティをもつオブジェクトなら本当になんでもいい。

interface HoverParent {
    hoverPopover: HoverPopover | null;
}

HoverPopoverparent: 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クラスを追加するなど)、ということをしたければ、HoverParentimplement したクラスを定義して、hoverPopoveraccessor property にすればよい。つまり、setter 内でそれらの処理をすればいい。

Quick Preview ではそうした。

もっと原始的には、setTimeout すればだいたいの場合はうまくいくはずではある。