UNPKG

@jbrowse/plugin-linear-genome-view

Version:

JBrowse 2 linear genome view

43 lines (42 loc) 3.59 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SVGTracks = exports.SVGRuler = void 0; exports.renderToSvg = renderToSvg; const jsx_runtime_1 = require("react/jsx-runtime"); const ui_1 = require("@jbrowse/core/ui"); const util_1 = require("@jbrowse/core/util"); const tracks_1 = require("@jbrowse/core/util/tracks"); const material_1 = require("@mui/material"); const mobx_1 = require("mobx"); const SVGBackground_1 = __importDefault(require("./SVGBackground")); const SVGHeader_1 = __importDefault(require("./SVGHeader")); const SVGTracks_1 = __importDefault(require("./SVGTracks")); const util_2 = require("./util"); async function renderToSvg(model, opts) { await (0, mobx_1.when)(() => model.initialized); const { textHeight = 18, headerHeight = 40, rulerHeight = 50, fontSize = 13, cytobandHeight = 100, trackLabels = 'offset', themeName = 'default', Wrapper = ({ children }) => children, } = opts; const session = (0, util_1.getSession)(model); const { allThemes } = session; const theme = allThemes === null || allThemes === void 0 ? void 0 : allThemes()[themeName]; const { width, pinnedTracks, unpinnedTracks, tracks, showCytobands } = model; const shift = 50; const c = +showCytobands * cytobandHeight; const offset = headerHeight + rulerHeight + c + 10; const height = (0, util_2.totalHeight)(tracks, textHeight, trackLabels) + offset + 100; const displayResults = await Promise.all([...pinnedTracks, ...unpinnedTracks].map(async (track) => { const display = track.displays[0]; await (0, mobx_1.when)(() => !display.renderProps().notReady); return { track, result: await display.renderSvg({ ...opts, theme }) }; })); const trackLabelMaxLen = (0, util_1.max)(tracks.map(t => (0, util_1.measureText)((0, tracks_1.getTrackName)(t.configuration, session), fontSize)), 0) + 40; const trackLabelOffset = trackLabels === 'left' ? trackLabelMaxLen : 0; const w = width + trackLabelOffset; return (0, util_1.renderToStaticMarkup)((0, jsx_runtime_1.jsx)(material_1.ThemeProvider, { theme: (0, ui_1.createJBrowseTheme)(theme), children: (0, jsx_runtime_1.jsx)(Wrapper, { children: (0, jsx_runtime_1.jsxs)("svg", { width: w, height: height, xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", viewBox: [0, 0, w + shift * 2, height].toString(), children: [(0, jsx_runtime_1.jsx)(SVGBackground_1.default, { width: w, height: height, shift: shift }), (0, jsx_runtime_1.jsxs)("g", { transform: `translate(${shift} 0)`, children: [(0, jsx_runtime_1.jsx)("g", { transform: `translate(${trackLabelOffset})`, children: (0, jsx_runtime_1.jsx)(SVGHeader_1.default, { model: model, fontSize: fontSize, rulerHeight: rulerHeight, cytobandHeight: cytobandHeight }) }), (0, jsx_runtime_1.jsx)("g", { transform: `translate(0 ${offset})`, children: (0, jsx_runtime_1.jsx)(SVGTracks_1.default, { textHeight: textHeight, fontSize: fontSize, model: model, displayResults: displayResults, trackLabels: trackLabels, trackLabelOffset: trackLabelOffset }) })] })] }) }) })); } var SVGRuler_1 = require("./SVGRuler"); Object.defineProperty(exports, "SVGRuler", { enumerable: true, get: function () { return __importDefault(SVGRuler_1).default; } }); var SVGTracks_2 = require("./SVGTracks"); Object.defineProperty(exports, "SVGTracks", { enumerable: true, get: function () { return __importDefault(SVGTracks_2).default; } });