onHover()

in client/client/modules/render/tracks/vcf/multi-sample-vcf.js [673:810]


    onHover(originalPoint) {
        if (this._positionFitsScrollIndicatorBoundaries(originalPoint)) {
            if (this.hoverVerticalScroll()) {
                this.updateScene();
            }
            this.tooltip.hide();
            this._lastHovered = undefined;
            this.requestAnimation();
            return false;
        }
        else if (this.unhoverVerticalScroll()) {
            this.updateScene();
        }
        const {
            x,
            y,
            coverage,
            sample,
            collapsedSamples
        } = this.getMousePositionOverSample(originalPoint);
        let hoveredItem;
        let tooltipShown = false;
        if (coverage) {
            hoveredItem = this.coverageRenderer.onMove({x, y});
            if (hoveredItem) {
                const chromosomePrefix = this.config &&
                    this.config.chromosome &&
                    this.config.chromosome.name
                    ? this.config.chromosome.name.concat(': ')
                    : '';
                const tooltip = [
                    ['Count', hoveredItem.coverage.total],
                    this.viewport.factor > 1
                        ? undefined
                        : ['Position', `${chromosomePrefix}${hoveredItem.startIndex}`],
                    ...(
                        Object
                            .keys(hoveredItem.coverage)
                            .filter(o => o !== 'total')
                            .sort((a, b) => b.length - a.length)
                            .map(key => [key, hoveredItem.coverage[key]])
                    )
                ].filter(Boolean);
                this.tooltip.setContent(tooltip);
                this.tooltip.move(originalPoint);
                this.tooltip.show(originalPoint);
                tooltipShown = true;
            }
            this.collapsedSamplesRenderer.onMove();
            this.renderers
                .forEach(rendererBySample => {
                    const renderer = this.pickRenderer(rendererBySample);
                    renderer.onMove();
                });
        } else if (collapsedSamples) {
            hoveredItem = this.collapsedSamplesRenderer.onMove({x, y});
            if (
                hoveredItem &&
                !(hoveredItem instanceof StatisticsContainer) &&
                this.shouldDisplayTooltips
            ) {
                const tooltip = [
                    ['Sample', sample],
                    ['Chromosome', this.config.chromosome.name],
                    ['Start', hoveredItem.variant.startIndex],
                    ['End', hoveredItem.variant.endIndex],
                    ['ID', hoveredItem.variant.identifier],
                    ['Type', hoveredItem.variant.type],
                    ['REF', hoveredItem.variant.referenceAllele],
                    ['ALT', hoveredItem.variant.alternativeAlleles.join(', ')],
                    ['Quality', hoveredItem.variant.quality && hoveredItem.variant.quality.toFixed(2)]
                ];
                const filters = hoveredItem.variant.failedFilters || [];
                if (filters.length > 0) {
                    tooltip.push(['Filter', filters.map(filter => filter.value).join(', ')]);
                }
                this.tooltip.setContent(tooltip);
                this.tooltip.move(originalPoint);
                this.tooltip.show(originalPoint);
                tooltipShown = true;
            }
            this.renderers
                .forEach(rendererBySample => {
                    const renderer = this.pickRenderer(rendererBySample);
                    renderer.onMove();
                });
        } else if (sample) {
            const [rendererBySample] = this.renderers.filter(o => o.sample === sample);
            this.coverageRenderer.onMove();
            this.collapsedSamplesRenderer.onMove();
            this.renderers
                .filter(o => o.sample !== sample)
                .forEach(rendererBySample => {
                    const renderer = this.pickRenderer(rendererBySample);
                    renderer.onMove();
                });
            if (rendererBySample) {
                const renderer = this.pickRenderer(rendererBySample);
                hoveredItem = renderer.onMove({x, y});
                if (
                    hoveredItem &&
                    !(hoveredItem instanceof StatisticsContainer) &&
                    hoveredItem.variant &&
                    !hoveredItem.variant.isStatistics &&
                    this.shouldDisplayTooltips
                ) {
                    const tooltip = [
                        ['Sample', sample],
                        ['Chromosome', this.config.chromosome.name],
                        ['Start', hoveredItem.variant.startIndex],
                        ['End', hoveredItem.variant.endIndex],
                        ['ID', hoveredItem.variant.identifier],
                        ['Type', hoveredItem.variant.type],
                        ['REF', hoveredItem.variant.referenceAllele],
                        ['ALT', hoveredItem.variant.alternativeAlleles.join(', ')],
                        ['Quality', hoveredItem.variant.quality && hoveredItem.variant.quality.toFixed(2)]
                    ];
                    const filters = hoveredItem.variant.failedFilters || [];
                    if (filters.length > 0) {
                        tooltip.push(['Filter', filters.map(filter => filter.value).join(', ')]);
                    }
                    this.tooltip.setContent(tooltip);
                    this.tooltip.move(originalPoint);
                    this.tooltip.show(originalPoint);
                    tooltipShown = true;
                }
            }
        }
        if (!tooltipShown) {
            this.tooltip.hide();
        }
        if (hoveredItem !== this._lastHovered) {
            this._lastHovered = hoveredItem;
            this.requestAnimation();
            return false;
        }
        return true;
    }