@jbrowse/plugin-linear-genome-view
Version:
JBrowse 2 linear genome view
68 lines (67 loc) • 2.46 kB
JavaScript
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;
}
}
}