Skip to content

Commit 98ed785

Browse files
committed
Add willremovecolumn event to enable discarding Popover instances on multi-locus panel removal
1 parent 60f46da commit 98ed785

File tree

2 files changed

+26
-11
lines changed

2 files changed

+26
-11
lines changed

js/browser.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import MultiTrackSelectButton from "./ui/multiTrackSelectButton.js"
5656
import MenuUtils from "./ui/menuUtils.js"
5757
import Genome from "./genome/genome.js"
5858
import {setDefaults} from "./igv-create.js"
59+
import { trackViewportPopoverList } from './trackViewport.js'
5960

6061
// css - $igv-scrollbar-outer-width: 14px;
6162
const igv_scrollbar_outer_width = 14
@@ -141,6 +142,16 @@ class Browser {
141142
}
142143
})
143144

145+
this.on('willremovecolumn', column => {
146+
if (trackViewportPopoverList.length > 0) {
147+
const len = trackViewportPopoverList.length
148+
for (let i = 0; i < len; i++) {
149+
trackViewportPopoverList[ i ].dispose()
150+
}
151+
trackViewportPopoverList.length = 0
152+
}
153+
})
154+
144155
this.addMouseHandlers()
145156

146157
this.sampleInfo = new SampleInfo(this)
@@ -1582,6 +1593,9 @@ class Browser {
15821593
// find the $column corresponding to this referenceFrame and remove it
15831594
const index = this.referenceFrameList.indexOf(referenceFrame)
15841595
const {$viewport} = this.trackViews[0].viewports[index]
1596+
1597+
this.fireEvent('willremovecolumn', [ $viewport.parent().get(0) ]);
1598+
15851599
viewportColumnManager.removeColumnAtIndex(index, $viewport.parent().get(0))
15861600

15871601
for (let {viewports} of this.trackViews) {

js/trackViewport.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ let mouseDownCoords
1717
let lastClickTime = 0
1818
let lastHoverUpdateTime = 0
1919
let popupTimerID
20-
let globalPopoverList = []
20+
let trackViewportPopoverList = []
2121

2222
let popover
2323

@@ -775,11 +775,11 @@ class TrackViewport extends Viewport {
775775
popover.dispose()
776776
}
777777

778-
if (globalPopoverList.length > 0) {
779-
for (const gp of globalPopoverList) {
778+
if (trackViewportPopoverList.length > 0) {
779+
for (const gp of trackViewportPopoverList) {
780780
gp.dispose()
781781
}
782-
globalPopoverList = []
782+
trackViewportPopoverList.length = 0
783783
}
784784

785785
popover = new Popover(this.$viewport.get(0).parentElement, true, undefined, () => {
@@ -790,12 +790,12 @@ class TrackViewport extends Viewport {
790790
} else {
791791

792792
let po = new Popover(this.$viewport.get(0).parentElement, true, undefined, () => {
793-
const index = globalPopoverList.indexOf(po)
794-
globalPopoverList.splice(index, 1)
793+
const index = trackViewportPopoverList.indexOf(po)
794+
trackViewportPopoverList.splice(index, 1)
795795
po.dispose()
796796
})
797797

798-
globalPopoverList.push( po )
798+
trackViewportPopoverList.push( po )
799799

800800
po.presentContentWithEvent(event, content)
801801
}
@@ -892,12 +892,12 @@ class TrackViewport extends Viewport {
892892
this.popover.dispose()
893893
}
894894

895-
// if (globalPopoverList) {
896-
// for (let i = 0; i < globalPopoverList.length; i++ ) {
897-
// globalPopoverList[ i ].dispose()
895+
// if (trackViewportPopoverList) {
896+
// for (let i = 0; i < trackViewportPopoverList.length; i++ ) {
897+
// trackViewportPopoverList[ i ].dispose()
898898
// }
899899
//
900-
// globalPopoverList = undefined
900+
// trackViewportPopoverList = undefined
901901
// }
902902

903903
super.dispose()
@@ -967,4 +967,5 @@ function mergeArrays(a, b) {
967967

968968
}
969969

970+
export { trackViewportPopoverList }
970971
export default TrackViewport

0 commit comments

Comments
 (0)