UNPKG

@jbrowse/plugin-linear-genome-view

Version:

JBrowse 2 linear genome view

68 lines (67 loc) 2.46 kB
import { parseLocString, when } from '@jbrowse/core/util'; import { handleSelectedRegion } from '../searchUtils'; export default function LaunchLinearGenomeViewF(pluginManager) { pluginManager.addToExtensionPoint('LaunchView-LinearGenomeView', async ({ session, assembly, loc, tracks = [], tracklist, nav, highlight, }) => { try { const { assemblyManager } = session; const view = session.addView('LinearGenomeView', {}); await when(() => !!view.volatileWidth); if (!assembly) { throw new Error('No assembly provided when launching linear genome view'); } const asm = await assemblyManager.waitForAssembly(assembly); if (!asm) { throw new Error(`Assembly "${assembly}" not found when launching linear genome view`); } if (tracklist) { view.activateTrackSelector(); } if (nav !== undefined) { view.setHideHeader(!nav); } if (highlight !== undefined) { for (const h of highlight) { const p = parseLocString(h, refName => assemblyManager.isValidRefName(refName, assembly)); const { start, end } = p; if (start !== undefined && end !== undefined) { view.addToHighlights({ ...p, start, end, assemblyName: assembly, }); } } } await handleSelectedRegion({ input: loc, model: view, assembly: asm, }); const idsNotFound = []; for (const track of tracks) { tryTrack(view, track, idsNotFound); } if (idsNotFound.length) { throw new Error(`Could not resolve identifiers: ${idsNotFound.join(',')}`); } } catch (e) { session.notifyError(`${e}`, e); throw e; } }); } function tryTrack(model, trackId, idsNotFound) { try { model.showTrack(trackId); } catch (e) { if (/Could not resolve identifier/.exec(`${e}`)) { idsNotFound.push(trackId); } else { throw e; } } }