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