@sjcrh/proteinpaint-client 2.182.0 → 2.182.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/2dmaf-YHYYSSKR.js +1371 -0
- package/dist/AIProjectAdmin-D4AASQBM.js +830 -0
- package/dist/AIProjectAdmin-D4AASQBM.js.map +7 -0
- package/dist/AppHeader-T4ZLY3VG.js +833 -0
- package/dist/BoxPlot-DIU4YXNK.js +1217 -0
- package/dist/BoxPlot-DIU4YXNK.js.map +7 -0
- package/dist/CorrelationVolcano-EXH4P56S.js +617 -0
- package/dist/DE-C5K2TVUQ.js +93 -0
- package/dist/DEinput-KVILE7QQ.js +297 -0
- package/dist/DifferentialAnalysis-P6GKHAS5.js +238 -0
- package/dist/Disco-IMLXEBPG.js +3235 -0
- package/dist/Disco-IMLXEBPG.js.map +7 -0
- package/dist/Disco.UI-4A2P5Q55.js +242 -0
- package/dist/DmrPlot-6EEEGD32.js +640 -0
- package/dist/GB-XFO5I6ND.js +1125 -0
- package/dist/HicApp-3LFHOOAR.js +2248 -0
- package/dist/NumBinaryEditor-74PY52BP.js +268 -0
- package/dist/NumBinaryEditor.unit.spec-2PYZ7P2R.js +284 -0
- package/dist/NumContEditor-BMWALLQM.js +105 -0
- package/dist/NumContEditor.unit.spec-ETVLVX6A.js +167 -0
- package/dist/NumCustomBinEditor-2XJ6GUWY.js +36 -0
- package/dist/NumCustomBinEditor.unit.spec-TZVL553E.js +282 -0
- package/dist/NumDiscreteEditor-4LNLKAXT.js +177 -0
- package/dist/NumDiscreteEditor.unit.spec-KQND2XAE.js +200 -0
- package/dist/NumRegularBinEditor-OYELFDIB.js +36 -0
- package/dist/NumRegularBinEditor.unit.spec-44SALKLH.js +225 -0
- package/dist/NumSplineEditor-SENQC4P2.js +190 -0
- package/dist/NumSplineEditor.unit.spec-XKB4XXU4.js +197 -0
- package/dist/NumericDensity-GCNWO7YS.js +36 -0
- package/dist/NumericDensity.unit.spec-7LWNOUYK.js +219 -0
- package/dist/NumericHandler-EMQBI5UI.js +37 -0
- package/dist/NumericHandler.unit.spec-TEELPRIM.js +217 -0
- package/dist/RunChart2-LJBC5X2H.js +756 -0
- package/dist/RunChart2-LJBC5X2H.js.map +7 -0
- package/dist/SC-3EB6UYIS.js +682 -0
- package/dist/SC-3EB6UYIS.js.map +7 -0
- package/dist/Volcano-CPULLVYV.js +1185 -0
- package/dist/Volcano-CPULLVYV.js.map +7 -0
- package/dist/WSIViewer-2YCT4LCM.js +47974 -0
- package/dist/WSIViewer-2YCT4LCM.js.map +7 -0
- package/dist/WsiSamplesPlot-B2DM7Z3Q.js +163 -0
- package/dist/adSandbox-INF3NNEV.js +36 -0
- package/dist/alphaGenome-CO4TQHXN.js +173 -0
- package/dist/app-63JU2YIT.js +47 -0
- package/dist/app-BL3POUOO.js +35 -0
- package/dist/app.js +22 -22
- package/dist/bam-SVEJYICC.js +857 -0
- package/dist/barchart-PDUXZAIH.js +45 -0
- package/dist/barchart.data-EXENRVMU.js +22 -0
- package/dist/barchart.events-MQNQTSWI.js +45 -0
- package/dist/barchart.integration.spec-DSO2377T.js +1675 -0
- package/dist/bars.renderer-S7A7I6BQ.js +12 -0
- package/dist/block-OO2NLGUP.js +6200 -0
- package/dist/block-OO2NLGUP.js.map +7 -0
- package/dist/block.init-7J5OHYKA.js +36 -0
- package/dist/block.mds.expressionrank-643H7PN7.js +357 -0
- package/dist/block.mds.geneboxplot-C222ODSL.js +826 -0
- package/dist/block.mds.junction-C5DJRUOK.js +1543 -0
- package/dist/block.mds.svcnv-4G74JQ7Y.js +6799 -0
- package/dist/block.svg-35KUC5R7.js +162 -0
- package/dist/block.tk.aicheck-LLWT6K6H.js +281 -0
- package/dist/block.tk.ase-PQUKY65E.js +363 -0
- package/dist/block.tk.bam-EUEOB7BR.js +1904 -0
- package/dist/block.tk.bedgraphdot-XAHUY545.js +382 -0
- package/dist/block.tk.bigwig.ui-HEOPNL3T.js +209 -0
- package/dist/block.tk.hicstraw-EPH3LEX2.js +821 -0
- package/dist/block.tk.junction-MIUDAIAR.js +2362 -0
- package/dist/block.tk.junction.textmatrixui-AVFUQBDS.js +197 -0
- package/dist/block.tk.ld-ED7YMBQ4.js +97 -0
- package/dist/block.tk.menu-3CVIECWQ.js +1027 -0
- package/dist/block.tk.pgv-HETJVWXH.js +942 -0
- package/dist/brainImaging-K3LHK3DD.js +421 -0
- package/dist/chat-BYX5ARUK.js +148 -0
- package/dist/chunk-25RP5OSE.js +1426 -0
- package/dist/chunk-25RP5OSE.js.map +7 -0
- package/dist/chunk-2K5DSRBJ.js +84 -0
- package/dist/chunk-2K5DSRBJ.js.map +7 -0
- package/dist/chunk-2LULD7RN.js +31 -0
- package/dist/chunk-2M6JV7YS.js +261 -0
- package/dist/chunk-2M6JV7YS.js.map +7 -0
- package/dist/chunk-2TJESM3Z.js +158 -0
- package/dist/chunk-2VFYZ3EY.js +102 -0
- package/dist/chunk-3CD5ZROA.js +4952 -0
- package/dist/chunk-3DCABJHB.js +381 -0
- package/dist/chunk-3MMKHYUM.js +95 -0
- package/dist/chunk-3PRPMJTG.js +55 -0
- package/dist/chunk-4JON7TLI.js +176 -0
- package/dist/chunk-4JON7TLI.js.map +7 -0
- package/dist/chunk-5HCB4HNL.js +147 -0
- package/dist/chunk-5JD4D5GD.js +215 -0
- package/dist/chunk-5UMPBVA6.js +534 -0
- package/dist/chunk-64FGLSIM.js +56 -0
- package/dist/chunk-64FGLSIM.js.map +7 -0
- package/dist/chunk-6ITDJ5UR.js +261 -0
- package/dist/chunk-6ITDJ5UR.js.map +7 -0
- package/dist/chunk-6LAE5AVA.js +13624 -0
- package/dist/chunk-6VLA5NEW.js +335 -0
- package/dist/chunk-6VLA5NEW.js.map +7 -0
- package/dist/chunk-7FKIAQ4K.js +17 -0
- package/dist/chunk-7FKIAQ4K.js.map +7 -0
- package/dist/chunk-7FTDQDVF.js +824 -0
- package/dist/chunk-7IEZ2KMW.js +142 -0
- package/dist/chunk-7RN3L2BX.js +1788 -0
- package/dist/chunk-7RN3L2BX.js.map +7 -0
- package/dist/chunk-A5AFIW2T.js +14 -0
- package/dist/chunk-A6TQGNDQ.js +421 -0
- package/dist/chunk-A6TQGNDQ.js.map +7 -0
- package/dist/chunk-AIBODF32.js +2784 -0
- package/dist/chunk-AQ4OP4GR.js +39 -0
- package/dist/chunk-AWWW6K2I.js +407 -0
- package/dist/chunk-BAY47D5E.js +226 -0
- package/dist/chunk-CFHKYLDY.js +26 -0
- package/dist/chunk-CJZN7HFL.js +293 -0
- package/dist/chunk-CXOF4UGH.js +229 -0
- package/dist/chunk-D4QFQQWJ.js +170 -0
- package/dist/chunk-DNCSPTOQ.js +446 -0
- package/dist/chunk-DQGSCCI3.js +100 -0
- package/dist/chunk-EWGMLVC7.js +34 -0
- package/dist/chunk-F7PB5HGT.js +148 -0
- package/dist/chunk-FVWCYGJL.js +121 -0
- package/dist/chunk-G7QKLA54.js +92 -0
- package/dist/chunk-HWHG63LH.js +148 -0
- package/dist/chunk-HWHG63LH.js.map +7 -0
- package/dist/chunk-HYZG6OPC.js +467 -0
- package/dist/chunk-HYZG6OPC.js.map +7 -0
- package/dist/chunk-IBBMKCO7.js +526 -0
- package/dist/chunk-IBBMKCO7.js.map +7 -0
- package/dist/chunk-IQUYTZOA.js +455 -0
- package/dist/chunk-IQUYTZOA.js.map +7 -0
- package/dist/chunk-J5RINDKS.js +480 -0
- package/dist/chunk-JMPSZMDD.js +52 -0
- package/dist/chunk-KQMEJUWI.js +815 -0
- package/dist/chunk-KWFEGPZL.js +97 -0
- package/dist/chunk-KWFEGPZL.js.map +7 -0
- package/dist/chunk-L4QG7XZE.js +46 -0
- package/dist/chunk-L4QG7XZE.js.map +7 -0
- package/dist/chunk-LBXZGYU5.js +368 -0
- package/dist/chunk-LI7FE335.js +371 -0
- package/dist/chunk-LRBNYEFI.js +50 -0
- package/dist/chunk-LRBNYEFI.js.map +7 -0
- package/dist/chunk-LRMV5DNW.js +441 -0
- package/dist/chunk-LWNOC7AJ.js +54 -0
- package/dist/chunk-MICNOSX7.js +129 -0
- package/dist/chunk-MLWNMXAV.js +272 -0
- package/dist/chunk-MMBLSLQR.js +158 -0
- package/dist/chunk-N3QEGDEZ.js +117 -0
- package/dist/chunk-N3QEGDEZ.js.map +7 -0
- package/dist/chunk-NV5XWADG.js +1150 -0
- package/dist/chunk-NVB7MQLH.js +20649 -0
- package/dist/chunk-NVB7MQLH.js.map +7 -0
- package/dist/chunk-O3255WPP.js +1087 -0
- package/dist/chunk-OSM7YS23.js +276 -0
- package/dist/chunk-OSM7YS23.js.map +7 -0
- package/dist/chunk-PEWHCKCH.js +1205 -0
- package/dist/chunk-Q7PYFSNU.js +107 -0
- package/dist/chunk-QEZPKEWB.js +1159 -0
- package/dist/chunk-QEZPKEWB.js.map +7 -0
- package/dist/chunk-QMI222IJ.js +386 -0
- package/dist/chunk-QRIRWDIW.js +252 -0
- package/dist/chunk-SEQLC4AD.js +177 -0
- package/dist/chunk-SJTOSA7E.js +629 -0
- package/dist/chunk-SRYFYAXK.js +615 -0
- package/dist/chunk-SSPDNHDW.js +398 -0
- package/dist/chunk-SSPDNHDW.js.map +7 -0
- package/dist/chunk-SYMOQE3X.js +37 -0
- package/dist/chunk-SYMOQE3X.js.map +7 -0
- package/dist/chunk-TITA4HJA.js +228 -0
- package/dist/chunk-TV74I3Y5.js +43 -0
- package/dist/chunk-TV74I3Y5.js.map +7 -0
- package/dist/chunk-U7ZMIMI5.js +2815 -0
- package/dist/chunk-UJU3Q7QJ.js +119 -0
- package/dist/chunk-UL2ISTHR.js +2672 -0
- package/dist/chunk-VIPMLSZP.js +217 -0
- package/dist/chunk-VYIO7T6J.js +82 -0
- package/dist/chunk-VYIO7T6J.js.map +7 -0
- package/dist/chunk-VZPYIG77.js +1271 -0
- package/dist/chunk-W345H42C.js +273 -0
- package/dist/chunk-W345H42C.js.map +7 -0
- package/dist/chunk-WGL6FIUE.js +330 -0
- package/dist/chunk-WGL6FIUE.js.map +7 -0
- package/dist/chunk-WIYKAKWE.js +302 -0
- package/dist/chunk-WJGVQJSX.js +514 -0
- package/dist/chunk-WJGVQJSX.js.map +7 -0
- package/dist/chunk-WPHOEG56.js +194 -0
- package/dist/chunk-WU63AOK2.js +4207 -0
- package/dist/chunk-XS4QWRS3.js +205 -0
- package/dist/chunk-XYFDBYOY.js +1658 -0
- package/dist/chunk-XYFDBYOY.js.map +7 -0
- package/dist/chunk-YDWRIMCT.js +289 -0
- package/dist/chunk-YDWRIMCT.js.map +7 -0
- package/dist/chunk-YK5NFMHR.js +269 -0
- package/dist/chunk-YK5NFMHR.js.map +7 -0
- package/dist/chunk-YSW57QDM.js +6364 -0
- package/dist/chunk-YXQNZPCO.js +203 -0
- package/dist/chunk-YYYJB53A.js +2370 -0
- package/dist/chunk-YYYJB53A.js.map +7 -0
- package/dist/chunk-ZTKQLABY.js +470 -0
- package/dist/condition-AM523RDR.js +330 -0
- package/dist/controls-HTMH5QBP.js +39 -0
- package/dist/controls.config-EEK2RBPI.js +37 -0
- package/dist/correlation-HKD67SPS.js +96 -0
- package/dist/cuminc-66V55MMN.js +1147 -0
- package/dist/cuminc.integration.spec-PNTOPB2L.js +676 -0
- package/dist/customdata.inputui-Z4WQDU6I.js +285 -0
- package/dist/dataDownload-3ZEI22OK.js +328 -0
- package/dist/dataDownload.integration.spec-C3JRC6K5.js +191 -0
- package/dist/databrowser.ui-Q365SHBG.js +419 -0
- package/dist/dictionary-D4E2VEJT.js +109 -0
- package/dist/dictionary-D4E2VEJT.js.map +7 -0
- package/dist/dnaMethylation-IFZWWBUG.js +36 -0
- package/dist/dnaMethylation.integration.spec-UKV4BSIO.js +165 -0
- package/dist/dnaMethylation.integration.spec-UKV4BSIO.js.map +7 -0
- package/dist/e2pca-I3QXF7EM.js +348 -0
- package/dist/ep-2VCQ36GT.js +1254 -0
- package/dist/expclust.gdc.spec-VWIQFY67.js +305 -0
- package/dist/facet-CHP3VUWS.js +519 -0
- package/dist/geneExpClustering-YDIDEH2O.js +246 -0
- package/dist/geneExpression-FA5RJRHZ.js +36 -0
- package/dist/geneExpression-X2KXJPND.js +312 -0
- package/dist/geneExpression.unit.spec-3LVHYZGG.js +100 -0
- package/dist/geneORA-4CAYRKSN.js +276 -0
- package/dist/geneVariant-OCOTNUH4.js +39 -0
- package/dist/geneVariant-Y4L5W5HF.js +37 -0
- package/dist/geneVariant.integration.spec-BOJ5MM5K.js +196 -0
- package/dist/genefusion.ui-I6HZOBIV.js +249 -0
- package/dist/geneset-GEWKDAAT.js +194 -0
- package/dist/genomeBrowser.spec-FDEGH4DY.js +279 -0
- package/dist/grin2-K56B6XBZ.js +1031 -0
- package/dist/grin2-V6FMM44N.js +1554 -0
- package/dist/gsea-UNPPRU2U.js +45 -0
- package/dist/hierCluster-DXAWRQNI.js +58 -0
- package/dist/hierCluster-SPIQA2M2.js +62 -0
- package/dist/hierCluster.config-JW6D3T3Q.js +38 -0
- package/dist/hierCluster.integration.spec-5NXZY4LG.js +374 -0
- package/dist/hierCluster.interactivity-CPPBXHM7.js +52 -0
- package/dist/hierCluster.renderers-A6MEGO2B.js +21 -0
- package/dist/imagePlot-QLAHCULW.js +139 -0
- package/dist/importPlot-6ITZ6U7G.js +8 -0
- package/dist/isoformExpression-7GAUF2QV.js +38 -0
- package/dist/isoformExpression.unit.spec-3BVXVVNO.js +206 -0
- package/dist/isoformExpression.unit.spec-3BVXVVNO.js.map +7 -0
- package/dist/jspdf.es.min-FC3BCETM.js +40 -0
- package/dist/launch.adhoc-HFHBAUR6.js +40 -0
- package/dist/leftlabel.sample-CWPJUCHR.js +257 -0
- package/dist/legacyDataset-PBCPC5I7.js +119 -0
- package/dist/lollipop-QFRQLEER.js +166 -0
- package/dist/maf-OEODBT3Y.js +450 -0
- package/dist/maftimeline-2DFIF4C4.js +591 -0
- package/dist/matrix-3HFB5TUU.js +57 -0
- package/dist/matrix-MIXK27AD.js +62 -0
- package/dist/matrix.cells-U7AQNEBP.js +28 -0
- package/dist/matrix.config-FX5MHX6O.js +39 -0
- package/dist/matrix.controls-5K7BB5Z4.js +37 -0
- package/dist/matrix.data-EEIY6AO4.js +25 -0
- package/dist/matrix.dom-6QL3AJMW.js +11 -0
- package/dist/matrix.groups-CUB6UWC5.js +26 -0
- package/dist/matrix.integration.spec-ML4T7FRG.js +3070 -0
- package/dist/matrix.interactivity-QMPWX63Q.js +40 -0
- package/dist/matrix.layout-7SEF6MYI.js +42 -0
- package/dist/matrix.legend-42LQGAGX.js +22 -0
- package/dist/matrix.renderers-ZF7LLER3.js +36 -0
- package/dist/matrix.serieses-4B2WB526.js +21 -0
- package/dist/matrix.sort-BJACNR7G.js +27 -0
- package/dist/matrix.sort.unit.spec-ZGSM7HDJ.js +470 -0
- package/dist/matrix.sorterUi-W6XFYZY2.js +18 -0
- package/dist/matrix.sorterUi.unit.spec-V34ZZD7A.js +340 -0
- package/dist/mavb-NVQVFU6E.js +730 -0
- package/dist/mds.fimo-HOCF6U6K.js +516 -0
- package/dist/mds.samplescatterplot-ULD5BK5R.js +1548 -0
- package/dist/mds.survivalplot-5US32RQD.js +481 -0
- package/dist/oncomatrix-Y3G3MUJJ.js +293 -0
- package/dist/oncomatrix.spec-MFUJLWEP.js +446 -0
- package/dist/plot.2dvaf-F4WZ4YPU.js +375 -0
- package/dist/plot.app-YFFLLBU5.js +39 -0
- package/dist/plot.barplot-2EJ2MWQD.js +100 -0
- package/dist/plot.boxplot-AKZM443E.js +150 -0
- package/dist/plot.brainImaging-DR6WJNFZ.js +51 -0
- package/dist/plot.disco-LBE5H67U.js +101 -0
- package/dist/plot.disco-LBE5H67U.js.map +7 -0
- package/dist/plot.dzi-R2MR7HAT.js +33 -0
- package/dist/plot.ssgq-C52YIUFY.js +137 -0
- package/dist/plot.vaf2cov-FOD3K7BC.js +257 -0
- package/dist/plot.wsi-D2TXYERK.js +36 -0
- package/dist/polar-2LC35O6K.js +184 -0
- package/dist/polar2-QPUOEUJZ.js +226 -0
- package/dist/profile.spec-3NCDGHLX.js +78 -0
- package/dist/profileBarchart-PPQ3NL4D.js +265 -0
- package/dist/profileForms-GS3VVW65.js +438 -0
- package/dist/profilePlot-DQWFH5NC.js +52 -0
- package/dist/profileRadar-KAKRDC4R.js +261 -0
- package/dist/profileRadarFacility-FZP62VPV.js +261 -0
- package/dist/profileRadarFacility-FZP62VPV.js.map +7 -0
- package/dist/proteinView-LWVWJY54.js +444 -0
- package/dist/proteinView-LWVWJY54.js.map +7 -0
- package/dist/proteomeAbundance-DE4NVBCN.js +21 -0
- package/dist/proteomeAbundance-LTB3QR3G.js +63 -0
- package/dist/qualitative-YOFAROVR.js +41 -0
- package/dist/regression-PF6IAHJK.js +54 -0
- package/dist/regression.inputs-77IUYED3.js +46 -0
- package/dist/regression.inputs.term-WWCHU6KF.js +46 -0
- package/dist/regression.inputs.values.table-I6GM6MU7.js +43 -0
- package/dist/regression.integration.spec-DGEZUURU.js +782 -0
- package/dist/regression.integration.spec-DGEZUURU.js.map +7 -0
- package/dist/regression.results-6GXNKYUS.js +38 -0
- package/dist/regression.spec-MEFQNY34.js +706 -0
- package/dist/report-LG3UKZHL.js +220 -0
- package/dist/sampleScatter.spec-D3IK7MSA.js +200 -0
- package/dist/sampleView-XUI2J5EC.js +46 -0
- package/dist/samplelst-A7IHCBAX.js +109 -0
- package/dist/samplematrix-VGUU7Q75.js +2196 -0
- package/dist/sc-UVKVT2RY.js +84 -0
- package/dist/scatter-UILUYOGO.js +800 -0
- package/dist/scatter.integration.spec-VPNALPUG.js +1194 -0
- package/dist/scatter.integration.spec-VPNALPUG.js.map +7 -0
- package/dist/selectGenomeWithTklst-LWKIMZEJ.js +132 -0
- package/dist/singleCellCellType-TI52WQQ4.js +36 -0
- package/dist/singleCellCellType.unit.spec-R3BTRFRU.js +158 -0
- package/dist/singleCellCellType.unit.spec-R3BTRFRU.js.map +7 -0
- package/dist/singleCellGeneExpression-I5SAHMGI.js +36 -0
- package/dist/singleCellGeneExpression.unit.spec-2JTB5HLY.js +151 -0
- package/dist/singleCellGeneExpression.unit.spec-2JTB5HLY.js.map +7 -0
- package/dist/singleCellPlot-HRWCHYCI.js +51 -0
- package/dist/singlecell-BHPP7KCO.js +1570 -0
- package/dist/singlecell-PQNKBKR7.js +84 -0
- package/dist/snp-V4YGI7B3.js +36 -0
- package/dist/snp.unit.spec-JSUCMGNP.js +174 -0
- package/dist/snplocus-3YT5NNCH.js +206 -0
- package/dist/spliceevent.a53ss.diagram-QEQJ44YH.js +149 -0
- package/dist/spliceevent.exonskip.diagram-HMWVSOJG.js +275 -0
- package/dist/spliceevent.noeventdiagram-L5HUCT5A.js +458 -0
- package/dist/ssGSEA-Z3XRCBYW.js +36 -0
- package/dist/ssGSEA.unit.spec-EUCTV2XJ.js +86 -0
- package/dist/summarizeCnvGeneexp-O7O2CFW4.js +161 -0
- package/dist/summarizeCnvGeneexp-O7O2CFW4.js.map +7 -0
- package/dist/summarizeGeneexpSurvival-DDPH56EI.js +106 -0
- package/dist/summarizeGeneexpSurvival-DDPH56EI.js.map +7 -0
- package/dist/summarizeMutationCnv-6KJQUJWR.js +162 -0
- package/dist/summarizeMutationCnv-6KJQUJWR.js.map +7 -0
- package/dist/summarizeMutationDiagnosis-HFFYLQOF.js +38 -0
- package/dist/summarizeMutationSurvival-OBK6YILP.js +97 -0
- package/dist/summary-W55WWIU2.js +47 -0
- package/dist/summary.integration.spec-X2PNAUKW.js +412 -0
- package/dist/summaryInput-X547Q6C7.js +218 -0
- package/dist/sunburst-KWNGYBRI.js +282 -0
- package/dist/sunburst-KWNGYBRI.js.map +7 -0
- package/dist/survival-PAJZHZPD.js +56 -0
- package/dist/survival-TQPWMOD5.js +44 -0
- package/dist/survival.integration.spec-YMQASOMX.js +800 -0
- package/dist/survival.integration.spec-YMQASOMX.js.map +7 -0
- package/dist/svg2pdf.es.min-CYTPRWNB.js +3157 -0
- package/dist/svgraph-Y35C2M3D.js +1385 -0
- package/dist/svmr-WGCIR7PE.js +3840 -0
- package/dist/table-Q3B2YXEN.js +198 -0
- package/dist/termCollection-A6YTSM5I.js +177 -0
- package/dist/termCollection-NTFNVQ7D.js +36 -0
- package/dist/termCollection.unit.spec-BX54PHKT.js +206 -0
- package/dist/tk-OCBZ7YR6.js +44 -0
- package/dist/tp.ui-ZT47N2CO.js +1457 -0
- package/dist/tvs.density-HSVPDDGA.js +18 -0
- package/dist/tvs.dt-BFB253O3.js +37 -0
- package/dist/tvs.dtcnv.categorical-ARGAYIDO.js +38 -0
- package/dist/tvs.dtcnv.continuous-JCU23ERV.js +70 -0
- package/dist/tvs.dtfusion-FV64XLZI.js +38 -0
- package/dist/tvs.dtsnvindel-DMOXMEVL.js +38 -0
- package/dist/tvs.dtsv-53FSZEPV.js +38 -0
- package/dist/tvs.numeric-ICUGA4WY.js +21 -0
- package/dist/tvs.samplelst-MVPL6VXX.js +102 -0
- package/dist/tvs.termCollection-UGJXTHTG.js +151 -0
- package/dist/violin-ZLUDGSQG.js +44 -0
- package/dist/violin.integration.spec-KWOFOFLT.js +1423 -0
- package/dist/violin.integration.spec-KWOFOFLT.js.map +7 -0
- package/dist/violin.interactivity-ULDOCZWW.js +36 -0
- package/dist/violin.renderer-KJAXPMIK.js +38 -0
- package/dist/vocabulary-34YUQ4ZQ.js +39 -0
- package/package.json +3 -3
- package/dist/2dmaf-SLBAWGPG.js +0 -1371
- package/dist/AIProjectAdmin-6SH5X3AF.js +0 -830
- package/dist/AIProjectAdmin-6SH5X3AF.js.map +0 -7
- package/dist/AppHeader-MVYNRMC7.js +0 -833
- package/dist/BoxPlot-HLGWW3IK.js +0 -1295
- package/dist/BoxPlot-HLGWW3IK.js.map +0 -7
- package/dist/CorrelationVolcano-TZCYC3NI.js +0 -617
- package/dist/DE-2J2SK5UT.js +0 -93
- package/dist/DEinput-QM3GOQHM.js +0 -297
- package/dist/DifferentialAnalysis-DS7CQOT6.js +0 -238
- package/dist/Disco-U5I6NJUT.js +0 -3199
- package/dist/Disco-U5I6NJUT.js.map +0 -7
- package/dist/Disco.UI-J2B7GGEZ.js +0 -242
- package/dist/DmrPlot-D5W76QPY.js +0 -640
- package/dist/GB-LM5SGUG4.js +0 -1125
- package/dist/HicApp-YNBGAGKM.js +0 -2248
- package/dist/NumBinaryEditor-4QA5DQJT.js +0 -268
- package/dist/NumBinaryEditor.unit.spec-YWSIFTOJ.js +0 -284
- package/dist/NumContEditor-ZPLVZFLH.js +0 -105
- package/dist/NumContEditor.unit.spec-NBCFOCOX.js +0 -167
- package/dist/NumCustomBinEditor-TXEYRVPL.js +0 -36
- package/dist/NumCustomBinEditor.unit.spec-SQM63H4B.js +0 -282
- package/dist/NumDiscreteEditor-6C4OWX62.js +0 -177
- package/dist/NumDiscreteEditor.unit.spec-4HC4AGAM.js +0 -200
- package/dist/NumRegularBinEditor-VQAS3OXK.js +0 -36
- package/dist/NumRegularBinEditor.unit.spec-RGVEPB3Z.js +0 -225
- package/dist/NumSplineEditor-SXOJICHU.js +0 -190
- package/dist/NumSplineEditor.unit.spec-HF5E6ANH.js +0 -197
- package/dist/NumericDensity-LMLPMOSE.js +0 -36
- package/dist/NumericDensity.unit.spec-3ZI5EVON.js +0 -219
- package/dist/NumericHandler-Q6F6ANOS.js +0 -37
- package/dist/NumericHandler.unit.spec-E6Z5HUNZ.js +0 -217
- package/dist/RunChart2-XSNWNAIL.js +0 -756
- package/dist/RunChart2-XSNWNAIL.js.map +0 -7
- package/dist/SC-RA46YM57.js +0 -733
- package/dist/SC-RA46YM57.js.map +0 -7
- package/dist/Volcano-75UDYPVB.js +0 -1187
- package/dist/Volcano-75UDYPVB.js.map +0 -7
- package/dist/WSIViewer-GYUUXCSJ.js +0 -47933
- package/dist/WSIViewer-GYUUXCSJ.js.map +0 -7
- package/dist/WsiSamplesPlot-KMI5S2EL.js +0 -163
- package/dist/adSandbox-JTK5XEQL.js +0 -36
- package/dist/alphaGenome-JRAV6WIY.js +0 -173
- package/dist/app-JKDZL23V.js +0 -35
- package/dist/app-OEARXM6E.js +0 -47
- package/dist/bam-CYEPLBK4.js +0 -857
- package/dist/barchart-GG5UFDG4.js +0 -45
- package/dist/barchart.data-KXA66FAL.js +0 -22
- package/dist/barchart.events-P2USOIR7.js +0 -45
- package/dist/barchart.integration.spec-5QSPQQLJ.js +0 -1675
- package/dist/bars.renderer-T5R3UIBW.js +0 -12
- package/dist/block-6DVPQBSH.js +0 -6200
- package/dist/block-6DVPQBSH.js.map +0 -7
- package/dist/block.init-ZHX6DFWF.js +0 -36
- package/dist/block.mds.expressionrank-YMGYXXYT.js +0 -357
- package/dist/block.mds.geneboxplot-IAILQYX4.js +0 -826
- package/dist/block.mds.junction-BRNFNQMU.js +0 -1543
- package/dist/block.mds.svcnv-OHKC7YPO.js +0 -6799
- package/dist/block.svg-PNGK45HW.js +0 -162
- package/dist/block.tk.aicheck-SCIOJ4WN.js +0 -281
- package/dist/block.tk.ase-BABJ73GG.js +0 -363
- package/dist/block.tk.bam-LZWJ5BCQ.js +0 -1904
- package/dist/block.tk.bedgraphdot-7NQLC3XJ.js +0 -382
- package/dist/block.tk.bigwig.ui-VNY4SFD5.js +0 -209
- package/dist/block.tk.hicstraw-36A7VDRM.js +0 -821
- package/dist/block.tk.junction-D373YEMK.js +0 -2362
- package/dist/block.tk.junction.textmatrixui-FFII7J3X.js +0 -197
- package/dist/block.tk.ld-XGB6KMDO.js +0 -97
- package/dist/block.tk.menu-PEZANZBZ.js +0 -1027
- package/dist/block.tk.pgv-MU5BPTT2.js +0 -942
- package/dist/brainImaging-LVJON47N.js +0 -421
- package/dist/chat-5FDIAQJ4.js +0 -148
- package/dist/chunk-22NJUYET.js +0 -281
- package/dist/chunk-22NJUYET.js.map +0 -7
- package/dist/chunk-2J3566TA.js +0 -215
- package/dist/chunk-2OSEZCWZ.js +0 -205
- package/dist/chunk-2SRMRC6L.js +0 -421
- package/dist/chunk-2SRMRC6L.js.map +0 -7
- package/dist/chunk-5OHXYXLD.js +0 -46
- package/dist/chunk-5OHXYXLD.js.map +0 -7
- package/dist/chunk-6MSCYO7K.js +0 -119
- package/dist/chunk-75EBDB7G.js +0 -21
- package/dist/chunk-75EBDB7G.js.map +0 -7
- package/dist/chunk-7A7NMCQ3.js +0 -534
- package/dist/chunk-7FEHI46K.js +0 -20456
- package/dist/chunk-7FEHI46K.js.map +0 -7
- package/dist/chunk-AETE4F7R.js +0 -252
- package/dist/chunk-AZYDW5T7.js +0 -441
- package/dist/chunk-B6HCIAM3.js +0 -34
- package/dist/chunk-BEWDIM6H.js +0 -42
- package/dist/chunk-BEWDIM6H.js.map +0 -7
- package/dist/chunk-CCIZJAXB.js +0 -2815
- package/dist/chunk-DHZL3FBC.js +0 -107
- package/dist/chunk-DONWY7TP.js +0 -39
- package/dist/chunk-DVDDXOWT.js +0 -815
- package/dist/chunk-E6DRQJJT.js +0 -480
- package/dist/chunk-ESKU6LNC.js +0 -36
- package/dist/chunk-ESKU6LNC.js.map +0 -7
- package/dist/chunk-F6V4AYWP.js +0 -177
- package/dist/chunk-FBAJTPBU.js +0 -302
- package/dist/chunk-FGMPKWT5.js +0 -371
- package/dist/chunk-FK4MYVW2.js +0 -261
- package/dist/chunk-FK4MYVW2.js.map +0 -7
- package/dist/chunk-FMBJ4SKC.js +0 -98
- package/dist/chunk-FMBJ4SKC.js.map +0 -7
- package/dist/chunk-FOEZG4VX.js +0 -505
- package/dist/chunk-FOEZG4VX.js.map +0 -7
- package/dist/chunk-FQRLSKJC.js +0 -226
- package/dist/chunk-G6ELKVBG.js +0 -629
- package/dist/chunk-GKK3CZ6H.js +0 -4207
- package/dist/chunk-GO5SIPFE.js +0 -194
- package/dist/chunk-GPOECA3V.js +0 -386
- package/dist/chunk-GTOY3JJO.js +0 -288
- package/dist/chunk-GTOY3JJO.js.map +0 -7
- package/dist/chunk-GW7DHJYH.js +0 -439
- package/dist/chunk-GW7DHJYH.js.map +0 -7
- package/dist/chunk-H2D7EVUA.js +0 -158
- package/dist/chunk-H2K5KZP7.js +0 -95
- package/dist/chunk-H5XFH3FV.js +0 -153
- package/dist/chunk-H5XFH3FV.js.map +0 -7
- package/dist/chunk-HAMDFQIX.js +0 -228
- package/dist/chunk-HH4QLSTK.js +0 -4952
- package/dist/chunk-IBTPGSYI.js +0 -526
- package/dist/chunk-IBTPGSYI.js.map +0 -7
- package/dist/chunk-IC7SUXJD.js +0 -82
- package/dist/chunk-IC7SUXJD.js.map +0 -7
- package/dist/chunk-IGEQI6MR.js +0 -1561
- package/dist/chunk-IGEQI6MR.js.map +0 -7
- package/dist/chunk-IIRU6VK2.js +0 -2672
- package/dist/chunk-ILF2GKBY.js +0 -1205
- package/dist/chunk-IP4T477W.js +0 -92
- package/dist/chunk-IQIXGTQV.js +0 -84
- package/dist/chunk-IQIXGTQV.js.map +0 -7
- package/dist/chunk-IXT4U5CE.js +0 -91
- package/dist/chunk-IXT4U5CE.js.map +0 -7
- package/dist/chunk-JHOGX5VE.js +0 -272
- package/dist/chunk-JOXUBWN3.js +0 -381
- package/dist/chunk-K57RR3FD.js +0 -142
- package/dist/chunk-K6JLCMVL.js +0 -129
- package/dist/chunk-KISFQDQE.js +0 -258
- package/dist/chunk-KISFQDQE.js.map +0 -7
- package/dist/chunk-KSFSM46X.js +0 -100
- package/dist/chunk-KVG7FTTK.js +0 -470
- package/dist/chunk-LEDPPLQK.js +0 -158
- package/dist/chunk-LUTT3MBZ.js +0 -1150
- package/dist/chunk-MDL2HG3N.js +0 -257
- package/dist/chunk-MDL2HG3N.js.map +0 -7
- package/dist/chunk-MNRYCG2S.js +0 -1271
- package/dist/chunk-MPJHDHBA.js +0 -2784
- package/dist/chunk-MXI3NXRB.js +0 -407
- package/dist/chunk-O4PXELXF.js +0 -615
- package/dist/chunk-ORPCSG6T.js +0 -14
- package/dist/chunk-OUKDZKSZ.js +0 -334
- package/dist/chunk-OUKDZKSZ.js.map +0 -7
- package/dist/chunk-P5HLYAHP.js +0 -1087
- package/dist/chunk-PIACSJPH.js +0 -148
- package/dist/chunk-PQABAAEZ.js +0 -31
- package/dist/chunk-PSMDCZET.js +0 -46
- package/dist/chunk-PSMDCZET.js.map +0 -7
- package/dist/chunk-RFIVPTMS.js +0 -217
- package/dist/chunk-RSU37SVQ.js +0 -54
- package/dist/chunk-RTC4U4PH.js +0 -2327
- package/dist/chunk-RTC4U4PH.js.map +0 -7
- package/dist/chunk-RZ5JP44H.js +0 -276
- package/dist/chunk-RZ5JP44H.js.map +0 -7
- package/dist/chunk-SPAIFVM2.js +0 -1155
- package/dist/chunk-SPAIFVM2.js.map +0 -7
- package/dist/chunk-T2HYA2KL.js +0 -55
- package/dist/chunk-TCPU43TU.js +0 -1741
- package/dist/chunk-TCPU43TU.js.map +0 -7
- package/dist/chunk-TE3DK3A6.js +0 -147
- package/dist/chunk-TIQPSXFJ.js +0 -237
- package/dist/chunk-TIQPSXFJ.js.map +0 -7
- package/dist/chunk-TN5GSG34.js +0 -26
- package/dist/chunk-UBGTQMOO.js +0 -52
- package/dist/chunk-UBS5UVIY.js +0 -13624
- package/dist/chunk-UE5ZYM63.js +0 -48
- package/dist/chunk-UE5ZYM63.js.map +0 -7
- package/dist/chunk-UQACPOCM.js +0 -102
- package/dist/chunk-UR3C4SCH.js +0 -446
- package/dist/chunk-UWX7W22M.js +0 -121
- package/dist/chunk-VJ37HKM6.js +0 -368
- package/dist/chunk-VLTDUJRM.js +0 -293
- package/dist/chunk-W6UUEAEP.js +0 -6364
- package/dist/chunk-X6UPDFDX.js +0 -229
- package/dist/chunk-XD6BFNMR.js +0 -172
- package/dist/chunk-XD6BFNMR.js.map +0 -7
- package/dist/chunk-XDI4UFCZ.js +0 -467
- package/dist/chunk-XDI4UFCZ.js.map +0 -7
- package/dist/chunk-XOBD3EAM.js +0 -1425
- package/dist/chunk-XOBD3EAM.js.map +0 -7
- package/dist/chunk-Y3TDC7NU.js +0 -170
- package/dist/chunk-YOTWMCT5.js +0 -824
- package/dist/chunk-YUMPQ3CJ.js +0 -203
- package/dist/chunk-ZIBWLDQI.js +0 -230
- package/dist/chunk-ZIBWLDQI.js.map +0 -7
- package/dist/condition-VHP2L4GM.js +0 -330
- package/dist/controls-N5Q7U7JR.js +0 -39
- package/dist/controls.config-NJMW4SLR.js +0 -37
- package/dist/correlation-3LDASF5I.js +0 -96
- package/dist/cuminc-UWJ23W6C.js +0 -1147
- package/dist/cuminc.integration.spec-OZYYET3W.js +0 -676
- package/dist/customdata.inputui-2FVCVSE4.js +0 -285
- package/dist/dataDownload-4S4PE5HX.js +0 -328
- package/dist/dataDownload.integration.spec-B57LEKFZ.js +0 -191
- package/dist/databrowser.ui-N6GHEQ2P.js +0 -419
- package/dist/dictionary-UP46QRYZ.js +0 -98
- package/dist/dictionary-UP46QRYZ.js.map +0 -7
- package/dist/dnaMethylation-BOGAUAWA.js +0 -36
- package/dist/dnaMethylation.integration.spec-UAHBJSSJ.js +0 -179
- package/dist/dnaMethylation.integration.spec-UAHBJSSJ.js.map +0 -7
- package/dist/e2pca-L5EBQJNP.js +0 -348
- package/dist/ep-Z67ORKUX.js +0 -1254
- package/dist/expclust.gdc.spec-SP7VOL64.js +0 -305
- package/dist/facet-HDB4VDGU.js +0 -519
- package/dist/geneExpClustering-6ZPOLTDJ.js +0 -246
- package/dist/geneExpression-T6YIG4XQ.js +0 -312
- package/dist/geneExpression-T7QUHV5S.js +0 -36
- package/dist/geneExpression.unit.spec-DO52L5IB.js +0 -100
- package/dist/geneORA-KOUDUWUO.js +0 -276
- package/dist/geneVariant-FVR76F6I.js +0 -39
- package/dist/geneVariant-I5QUITKG.js +0 -37
- package/dist/geneVariant.integration.spec-D4IRM7B5.js +0 -196
- package/dist/genefusion.ui-35IYSZD7.js +0 -249
- package/dist/geneset-7ZHJ5KWK.js +0 -194
- package/dist/genomeBrowser.spec-VXASVLNH.js +0 -279
- package/dist/grin2-7NM56COO.js +0 -1554
- package/dist/grin2-IY26UUQI.js +0 -1031
- package/dist/gsea-TORO46C6.js +0 -45
- package/dist/hierCluster-3BKEGW6P.js +0 -58
- package/dist/hierCluster-HM3LOM6V.js +0 -62
- package/dist/hierCluster.config-LDO5IGQ5.js +0 -38
- package/dist/hierCluster.integration.spec-XO5R6CQT.js +0 -374
- package/dist/hierCluster.interactivity-NVQ6262K.js +0 -52
- package/dist/hierCluster.renderers-SWPPNBLU.js +0 -21
- package/dist/imagePlot-V4WLAPV6.js +0 -139
- package/dist/importPlot-NZKQEOX4.js +0 -8
- package/dist/isoformExpression-TIZBIGNL.js +0 -38
- package/dist/isoformExpression.unit.spec-WHH5LPFG.js +0 -124
- package/dist/isoformExpression.unit.spec-WHH5LPFG.js.map +0 -7
- package/dist/jspdf.es.min-DO4YWL2R.js +0 -40
- package/dist/launch.adhoc-JYEN42NM.js +0 -40
- package/dist/leftlabel.sample-43DL3J3H.js +0 -257
- package/dist/legacyDataset-QRSNRVUA.js +0 -119
- package/dist/lollipop-NMWZ4FVF.js +0 -166
- package/dist/maf-DS3EOVGV.js +0 -450
- package/dist/maftimeline-ZB2753S7.js +0 -591
- package/dist/matrix-RCGQWQ3C.js +0 -57
- package/dist/matrix-WTTEK4FT.js +0 -62
- package/dist/matrix.cells-UO5ASQ35.js +0 -28
- package/dist/matrix.config-3UQAT3QR.js +0 -39
- package/dist/matrix.controls-PRZ77K5L.js +0 -37
- package/dist/matrix.data-4W73RQ3H.js +0 -25
- package/dist/matrix.dom-IZFFS4RQ.js +0 -11
- package/dist/matrix.groups-5VMPI7SA.js +0 -26
- package/dist/matrix.integration.spec-2F5LDLC2.js +0 -3070
- package/dist/matrix.interactivity-MIPZ6ELV.js +0 -40
- package/dist/matrix.layout-EO5LVYRO.js +0 -42
- package/dist/matrix.legend-QBFBFEUG.js +0 -22
- package/dist/matrix.renderers-ERJXVCQL.js +0 -36
- package/dist/matrix.serieses-E23EPXHA.js +0 -21
- package/dist/matrix.sort-I4UGMEXR.js +0 -27
- package/dist/matrix.sort.unit.spec-CRGF6CSE.js +0 -470
- package/dist/matrix.sorterUi-YLSYTYLE.js +0 -18
- package/dist/matrix.sorterUi.unit.spec-ENG3ICOO.js +0 -340
- package/dist/mavb-5WR7OJHI.js +0 -730
- package/dist/mds.fimo-3ZRH7BBJ.js +0 -516
- package/dist/mds.samplescatterplot-RPXR2FVK.js +0 -1548
- package/dist/mds.survivalplot-WSSMYUZD.js +0 -481
- package/dist/oncomatrix-JKYPUJQR.js +0 -293
- package/dist/oncomatrix.spec-OEGU4DYK.js +0 -446
- package/dist/plot.2dvaf-ZGARLQNK.js +0 -375
- package/dist/plot.app-TKUJH3LK.js +0 -39
- package/dist/plot.barplot-FEIPGDZ2.js +0 -100
- package/dist/plot.boxplot-6RASUMZB.js +0 -150
- package/dist/plot.brainImaging-ZJPFWX2W.js +0 -51
- package/dist/plot.disco-2KTKB3XX.js +0 -101
- package/dist/plot.disco-2KTKB3XX.js.map +0 -7
- package/dist/plot.dzi-PC34YI6Y.js +0 -33
- package/dist/plot.ssgq-Z4UNJKWO.js +0 -137
- package/dist/plot.vaf2cov-NZ4WULKT.js +0 -257
- package/dist/plot.wsi-YYXFAZWY.js +0 -36
- package/dist/polar-X2GPIBLB.js +0 -184
- package/dist/polar2-TZ553QQH.js +0 -226
- package/dist/profile.spec-VB6VMFLY.js +0 -78
- package/dist/profileBarchart-SKJSTC7B.js +0 -265
- package/dist/profileForms-RLOGSMAQ.js +0 -438
- package/dist/profilePlot-267ZS3RG.js +0 -52
- package/dist/profileRadar-KGOBHCSF.js +0 -261
- package/dist/profileRadarFacility-MCJKSHUM.js +0 -261
- package/dist/profileRadarFacility-MCJKSHUM.js.map +0 -7
- package/dist/proteomeAbundance-JUYAYO5I.js +0 -63
- package/dist/proteomeAbundance-PGHZSVAF.js +0 -19
- package/dist/qualitative-3IECKKJM.js +0 -41
- package/dist/regression-J6FFRPXN.js +0 -54
- package/dist/regression.inputs-T7LWBSYZ.js +0 -46
- package/dist/regression.inputs.term-TT7PNX6G.js +0 -46
- package/dist/regression.inputs.values.table-SHFUNKCS.js +0 -43
- package/dist/regression.integration.spec-QKHMJTHA.js +0 -784
- package/dist/regression.integration.spec-QKHMJTHA.js.map +0 -7
- package/dist/regression.results-D4WX6VIV.js +0 -38
- package/dist/regression.spec-7SW55L7X.js +0 -706
- package/dist/report-QYOZ4BRF.js +0 -220
- package/dist/sampleScatter.spec-JCHFMGNF.js +0 -200
- package/dist/sampleView-7RPKNAZC.js +0 -46
- package/dist/samplelst-4WNPHZVG.js +0 -109
- package/dist/samplematrix-CG52DSXJ.js +0 -2196
- package/dist/sc-OJSWILSA.js +0 -84
- package/dist/scatter-LG2RMMEC.js +0 -800
- package/dist/scatter.integration.spec-QPANYTKW.js +0 -1194
- package/dist/scatter.integration.spec-QPANYTKW.js.map +0 -7
- package/dist/selectGenomeWithTklst-QXRVE6N4.js +0 -132
- package/dist/singleCellCellType-XBSRL33U.js +0 -36
- package/dist/singleCellCellType.unit.spec-YZX4CSXA.js +0 -177
- package/dist/singleCellCellType.unit.spec-YZX4CSXA.js.map +0 -7
- package/dist/singleCellGeneExpression-64ECP62X.js +0 -36
- package/dist/singleCellGeneExpression.unit.spec-CFHFXMA6.js +0 -163
- package/dist/singleCellGeneExpression.unit.spec-CFHFXMA6.js.map +0 -7
- package/dist/singleCellPlot-E5F62JY6.js +0 -51
- package/dist/singlecell-FCY5EOUV.js +0 -84
- package/dist/singlecell-S7B5V7NK.js +0 -1570
- package/dist/snp-ACKX4GRX.js +0 -36
- package/dist/snp.unit.spec-QBGHKKUD.js +0 -174
- package/dist/snplocus-7EUOW7J7.js +0 -206
- package/dist/spliceevent.a53ss.diagram-ALQZA35Z.js +0 -149
- package/dist/spliceevent.exonskip.diagram-UF7WJA5R.js +0 -275
- package/dist/spliceevent.noeventdiagram-4HPGRNRR.js +0 -458
- package/dist/ssGSEA-FDRBBBLJ.js +0 -36
- package/dist/ssGSEA.unit.spec-EZEOWJVV.js +0 -86
- package/dist/summarizeCnvGeneexp-FTL2MGAJ.js +0 -158
- package/dist/summarizeCnvGeneexp-FTL2MGAJ.js.map +0 -7
- package/dist/summarizeGeneexpSurvival-DDIF4UW6.js +0 -105
- package/dist/summarizeGeneexpSurvival-DDIF4UW6.js.map +0 -7
- package/dist/summarizeMutationCnv-L3GL5YDY.js +0 -159
- package/dist/summarizeMutationCnv-L3GL5YDY.js.map +0 -7
- package/dist/summarizeMutationDiagnosis-LALOJTHV.js +0 -38
- package/dist/summarizeMutationSurvival-TSNTSOBZ.js +0 -97
- package/dist/summary-YRHVS64T.js +0 -47
- package/dist/summary.integration.spec-766YQLQA.js +0 -412
- package/dist/summaryInput-VQ2X6GSX.js +0 -218
- package/dist/sunburst-XFOONS6K.js +0 -282
- package/dist/sunburst-XFOONS6K.js.map +0 -7
- package/dist/survival-FQXZH2MM.js +0 -44
- package/dist/survival-TVA3ZWVP.js +0 -56
- package/dist/survival.integration.spec-WFIOPD6A.js +0 -787
- package/dist/survival.integration.spec-WFIOPD6A.js.map +0 -7
- package/dist/svg2pdf.es.min-EZ4UYRSH.js +0 -3157
- package/dist/svgraph-4BFBO7EL.js +0 -1385
- package/dist/svmr-ML7GAIIA.js +0 -3840
- package/dist/table-SMLMUWPP.js +0 -198
- package/dist/termCollection-22CPTISZ.js +0 -36
- package/dist/termCollection-EE6AOIVA.js +0 -177
- package/dist/termCollection.unit.spec-4DIW3CJ3.js +0 -206
- package/dist/tk-ITZCKOQ5.js +0 -44
- package/dist/tp.ui-R6HVKCBC.js +0 -1457
- package/dist/tvs.density-AQ5GD437.js +0 -18
- package/dist/tvs.dt-2263TBEJ.js +0 -37
- package/dist/tvs.dtcnv.categorical-TRRHL33N.js +0 -38
- package/dist/tvs.dtcnv.continuous-GREYNF52.js +0 -70
- package/dist/tvs.dtfusion-XOX46L3M.js +0 -38
- package/dist/tvs.dtsnvindel-IDMXT53F.js +0 -38
- package/dist/tvs.dtsv-ZDWFYH2C.js +0 -38
- package/dist/tvs.numeric-ZN2R7BH3.js +0 -21
- package/dist/tvs.samplelst-GAP76HRH.js +0 -102
- package/dist/tvs.termCollection-GQ65UKSI.js +0 -151
- package/dist/violin-JGDL62YA.js +0 -44
- package/dist/violin.integration.spec-W4NN7LBY.js +0 -1417
- package/dist/violin.integration.spec-W4NN7LBY.js.map +0 -7
- package/dist/violin.interactivity-H4RP4K5U.js +0 -36
- package/dist/violin.renderer-QPHLACDC.js +0 -38
- package/dist/vocabulary-7JACY4J2.js +0 -39
- /package/dist/{2dmaf-SLBAWGPG.js.map → 2dmaf-YHYYSSKR.js.map} +0 -0
- /package/dist/{AppHeader-MVYNRMC7.js.map → AppHeader-T4ZLY3VG.js.map} +0 -0
- /package/dist/{CorrelationVolcano-TZCYC3NI.js.map → CorrelationVolcano-EXH4P56S.js.map} +0 -0
- /package/dist/{DE-2J2SK5UT.js.map → DE-C5K2TVUQ.js.map} +0 -0
- /package/dist/{DEinput-QM3GOQHM.js.map → DEinput-KVILE7QQ.js.map} +0 -0
- /package/dist/{DifferentialAnalysis-DS7CQOT6.js.map → DifferentialAnalysis-P6GKHAS5.js.map} +0 -0
- /package/dist/{Disco.UI-J2B7GGEZ.js.map → Disco.UI-4A2P5Q55.js.map} +0 -0
- /package/dist/{DmrPlot-D5W76QPY.js.map → DmrPlot-6EEEGD32.js.map} +0 -0
- /package/dist/{GB-LM5SGUG4.js.map → GB-XFO5I6ND.js.map} +0 -0
- /package/dist/{HicApp-YNBGAGKM.js.map → HicApp-3LFHOOAR.js.map} +0 -0
- /package/dist/{NumBinaryEditor-4QA5DQJT.js.map → NumBinaryEditor-74PY52BP.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-YWSIFTOJ.js.map → NumBinaryEditor.unit.spec-2PYZ7P2R.js.map} +0 -0
- /package/dist/{NumContEditor-ZPLVZFLH.js.map → NumContEditor-BMWALLQM.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-NBCFOCOX.js.map → NumContEditor.unit.spec-ETVLVX6A.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-TXEYRVPL.js.map → NumCustomBinEditor-2XJ6GUWY.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-SQM63H4B.js.map → NumCustomBinEditor.unit.spec-TZVL553E.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-6C4OWX62.js.map → NumDiscreteEditor-4LNLKAXT.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-4HC4AGAM.js.map → NumDiscreteEditor.unit.spec-KQND2XAE.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-VQAS3OXK.js.map → NumRegularBinEditor-OYELFDIB.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-RGVEPB3Z.js.map → NumRegularBinEditor.unit.spec-44SALKLH.js.map} +0 -0
- /package/dist/{NumSplineEditor-SXOJICHU.js.map → NumSplineEditor-SENQC4P2.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-HF5E6ANH.js.map → NumSplineEditor.unit.spec-XKB4XXU4.js.map} +0 -0
- /package/dist/{NumericDensity-LMLPMOSE.js.map → NumericDensity-GCNWO7YS.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-3ZI5EVON.js.map → NumericDensity.unit.spec-7LWNOUYK.js.map} +0 -0
- /package/dist/{NumericHandler-Q6F6ANOS.js.map → NumericHandler-EMQBI5UI.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-E6Z5HUNZ.js.map → NumericHandler.unit.spec-TEELPRIM.js.map} +0 -0
- /package/dist/{WsiSamplesPlot-KMI5S2EL.js.map → WsiSamplesPlot-B2DM7Z3Q.js.map} +0 -0
- /package/dist/{adSandbox-JTK5XEQL.js.map → adSandbox-INF3NNEV.js.map} +0 -0
- /package/dist/{alphaGenome-JRAV6WIY.js.map → alphaGenome-CO4TQHXN.js.map} +0 -0
- /package/dist/{app-JKDZL23V.js.map → app-63JU2YIT.js.map} +0 -0
- /package/dist/{app-OEARXM6E.js.map → app-BL3POUOO.js.map} +0 -0
- /package/dist/{bam-CYEPLBK4.js.map → bam-SVEJYICC.js.map} +0 -0
- /package/dist/{barchart-GG5UFDG4.js.map → barchart-PDUXZAIH.js.map} +0 -0
- /package/dist/{barchart.data-KXA66FAL.js.map → barchart.data-EXENRVMU.js.map} +0 -0
- /package/dist/{barchart.events-P2USOIR7.js.map → barchart.events-MQNQTSWI.js.map} +0 -0
- /package/dist/{barchart.integration.spec-5QSPQQLJ.js.map → barchart.integration.spec-DSO2377T.js.map} +0 -0
- /package/dist/{bars.renderer-T5R3UIBW.js.map → bars.renderer-S7A7I6BQ.js.map} +0 -0
- /package/dist/{block.init-ZHX6DFWF.js.map → block.init-7J5OHYKA.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-YMGYXXYT.js.map → block.mds.expressionrank-643H7PN7.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-IAILQYX4.js.map → block.mds.geneboxplot-C222ODSL.js.map} +0 -0
- /package/dist/{block.mds.junction-BRNFNQMU.js.map → block.mds.junction-C5DJRUOK.js.map} +0 -0
- /package/dist/{block.mds.svcnv-OHKC7YPO.js.map → block.mds.svcnv-4G74JQ7Y.js.map} +0 -0
- /package/dist/{block.svg-PNGK45HW.js.map → block.svg-35KUC5R7.js.map} +0 -0
- /package/dist/{block.tk.aicheck-SCIOJ4WN.js.map → block.tk.aicheck-LLWT6K6H.js.map} +0 -0
- /package/dist/{block.tk.ase-BABJ73GG.js.map → block.tk.ase-PQUKY65E.js.map} +0 -0
- /package/dist/{block.tk.bam-LZWJ5BCQ.js.map → block.tk.bam-EUEOB7BR.js.map} +0 -0
- /package/dist/{block.tk.bedgraphdot-7NQLC3XJ.js.map → block.tk.bedgraphdot-XAHUY545.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-VNY4SFD5.js.map → block.tk.bigwig.ui-HEOPNL3T.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-36A7VDRM.js.map → block.tk.hicstraw-EPH3LEX2.js.map} +0 -0
- /package/dist/{block.tk.junction-D373YEMK.js.map → block.tk.junction-MIUDAIAR.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-FFII7J3X.js.map → block.tk.junction.textmatrixui-AVFUQBDS.js.map} +0 -0
- /package/dist/{block.tk.ld-XGB6KMDO.js.map → block.tk.ld-ED7YMBQ4.js.map} +0 -0
- /package/dist/{block.tk.menu-PEZANZBZ.js.map → block.tk.menu-3CVIECWQ.js.map} +0 -0
- /package/dist/{block.tk.pgv-MU5BPTT2.js.map → block.tk.pgv-HETJVWXH.js.map} +0 -0
- /package/dist/{brainImaging-LVJON47N.js.map → brainImaging-K3LHK3DD.js.map} +0 -0
- /package/dist/{chat-5FDIAQJ4.js.map → chat-BYX5ARUK.js.map} +0 -0
- /package/dist/{chunk-PQABAAEZ.js.map → chunk-2LULD7RN.js.map} +0 -0
- /package/dist/{chunk-H2D7EVUA.js.map → chunk-2TJESM3Z.js.map} +0 -0
- /package/dist/{chunk-UQACPOCM.js.map → chunk-2VFYZ3EY.js.map} +0 -0
- /package/dist/{chunk-HH4QLSTK.js.map → chunk-3CD5ZROA.js.map} +0 -0
- /package/dist/{chunk-JOXUBWN3.js.map → chunk-3DCABJHB.js.map} +0 -0
- /package/dist/{chunk-H2K5KZP7.js.map → chunk-3MMKHYUM.js.map} +0 -0
- /package/dist/{chunk-T2HYA2KL.js.map → chunk-3PRPMJTG.js.map} +0 -0
- /package/dist/{chunk-TE3DK3A6.js.map → chunk-5HCB4HNL.js.map} +0 -0
- /package/dist/{chunk-2J3566TA.js.map → chunk-5JD4D5GD.js.map} +0 -0
- /package/dist/{chunk-7A7NMCQ3.js.map → chunk-5UMPBVA6.js.map} +0 -0
- /package/dist/{chunk-UBS5UVIY.js.map → chunk-6LAE5AVA.js.map} +0 -0
- /package/dist/{chunk-YOTWMCT5.js.map → chunk-7FTDQDVF.js.map} +0 -0
- /package/dist/{chunk-K57RR3FD.js.map → chunk-7IEZ2KMW.js.map} +0 -0
- /package/dist/{chunk-ORPCSG6T.js.map → chunk-A5AFIW2T.js.map} +0 -0
- /package/dist/{chunk-MPJHDHBA.js.map → chunk-AIBODF32.js.map} +0 -0
- /package/dist/{chunk-DONWY7TP.js.map → chunk-AQ4OP4GR.js.map} +0 -0
- /package/dist/{chunk-MXI3NXRB.js.map → chunk-AWWW6K2I.js.map} +0 -0
- /package/dist/{chunk-FQRLSKJC.js.map → chunk-BAY47D5E.js.map} +0 -0
- /package/dist/{chunk-TN5GSG34.js.map → chunk-CFHKYLDY.js.map} +0 -0
- /package/dist/{chunk-VLTDUJRM.js.map → chunk-CJZN7HFL.js.map} +0 -0
- /package/dist/{chunk-X6UPDFDX.js.map → chunk-CXOF4UGH.js.map} +0 -0
- /package/dist/{chunk-Y3TDC7NU.js.map → chunk-D4QFQQWJ.js.map} +0 -0
- /package/dist/{chunk-UR3C4SCH.js.map → chunk-DNCSPTOQ.js.map} +0 -0
- /package/dist/{chunk-KSFSM46X.js.map → chunk-DQGSCCI3.js.map} +0 -0
- /package/dist/{chunk-B6HCIAM3.js.map → chunk-EWGMLVC7.js.map} +0 -0
- /package/dist/{chunk-PIACSJPH.js.map → chunk-F7PB5HGT.js.map} +0 -0
- /package/dist/{chunk-UWX7W22M.js.map → chunk-FVWCYGJL.js.map} +0 -0
- /package/dist/{chunk-IP4T477W.js.map → chunk-G7QKLA54.js.map} +0 -0
- /package/dist/{chunk-E6DRQJJT.js.map → chunk-J5RINDKS.js.map} +0 -0
- /package/dist/{chunk-UBGTQMOO.js.map → chunk-JMPSZMDD.js.map} +0 -0
- /package/dist/{chunk-DVDDXOWT.js.map → chunk-KQMEJUWI.js.map} +0 -0
- /package/dist/{chunk-VJ37HKM6.js.map → chunk-LBXZGYU5.js.map} +0 -0
- /package/dist/{chunk-FGMPKWT5.js.map → chunk-LI7FE335.js.map} +0 -0
- /package/dist/{chunk-AZYDW5T7.js.map → chunk-LRMV5DNW.js.map} +0 -0
- /package/dist/{chunk-RSU37SVQ.js.map → chunk-LWNOC7AJ.js.map} +0 -0
- /package/dist/{chunk-K6JLCMVL.js.map → chunk-MICNOSX7.js.map} +0 -0
- /package/dist/{chunk-JHOGX5VE.js.map → chunk-MLWNMXAV.js.map} +0 -0
- /package/dist/{chunk-LEDPPLQK.js.map → chunk-MMBLSLQR.js.map} +0 -0
- /package/dist/{chunk-LUTT3MBZ.js.map → chunk-NV5XWADG.js.map} +0 -0
- /package/dist/{chunk-P5HLYAHP.js.map → chunk-O3255WPP.js.map} +0 -0
- /package/dist/{chunk-ILF2GKBY.js.map → chunk-PEWHCKCH.js.map} +0 -0
- /package/dist/{chunk-DHZL3FBC.js.map → chunk-Q7PYFSNU.js.map} +0 -0
- /package/dist/{chunk-GPOECA3V.js.map → chunk-QMI222IJ.js.map} +0 -0
- /package/dist/{chunk-AETE4F7R.js.map → chunk-QRIRWDIW.js.map} +0 -0
- /package/dist/{chunk-F6V4AYWP.js.map → chunk-SEQLC4AD.js.map} +0 -0
- /package/dist/{chunk-G6ELKVBG.js.map → chunk-SJTOSA7E.js.map} +0 -0
- /package/dist/{chunk-O4PXELXF.js.map → chunk-SRYFYAXK.js.map} +0 -0
- /package/dist/{chunk-HAMDFQIX.js.map → chunk-TITA4HJA.js.map} +0 -0
- /package/dist/{chunk-CCIZJAXB.js.map → chunk-U7ZMIMI5.js.map} +0 -0
- /package/dist/{chunk-6MSCYO7K.js.map → chunk-UJU3Q7QJ.js.map} +0 -0
- /package/dist/{chunk-IIRU6VK2.js.map → chunk-UL2ISTHR.js.map} +0 -0
- /package/dist/{chunk-RFIVPTMS.js.map → chunk-VIPMLSZP.js.map} +0 -0
- /package/dist/{chunk-MNRYCG2S.js.map → chunk-VZPYIG77.js.map} +0 -0
- /package/dist/{chunk-FBAJTPBU.js.map → chunk-WIYKAKWE.js.map} +0 -0
- /package/dist/{chunk-GO5SIPFE.js.map → chunk-WPHOEG56.js.map} +0 -0
- /package/dist/{chunk-GKK3CZ6H.js.map → chunk-WU63AOK2.js.map} +0 -0
- /package/dist/{chunk-2OSEZCWZ.js.map → chunk-XS4QWRS3.js.map} +0 -0
- /package/dist/{chunk-W6UUEAEP.js.map → chunk-YSW57QDM.js.map} +0 -0
- /package/dist/{chunk-YUMPQ3CJ.js.map → chunk-YXQNZPCO.js.map} +0 -0
- /package/dist/{chunk-KVG7FTTK.js.map → chunk-ZTKQLABY.js.map} +0 -0
- /package/dist/{condition-VHP2L4GM.js.map → condition-AM523RDR.js.map} +0 -0
- /package/dist/{controls-N5Q7U7JR.js.map → controls-HTMH5QBP.js.map} +0 -0
- /package/dist/{controls.config-NJMW4SLR.js.map → controls.config-EEK2RBPI.js.map} +0 -0
- /package/dist/{correlation-3LDASF5I.js.map → correlation-HKD67SPS.js.map} +0 -0
- /package/dist/{cuminc-UWJ23W6C.js.map → cuminc-66V55MMN.js.map} +0 -0
- /package/dist/{cuminc.integration.spec-OZYYET3W.js.map → cuminc.integration.spec-PNTOPB2L.js.map} +0 -0
- /package/dist/{customdata.inputui-2FVCVSE4.js.map → customdata.inputui-Z4WQDU6I.js.map} +0 -0
- /package/dist/{dataDownload-4S4PE5HX.js.map → dataDownload-3ZEI22OK.js.map} +0 -0
- /package/dist/{dataDownload.integration.spec-B57LEKFZ.js.map → dataDownload.integration.spec-C3JRC6K5.js.map} +0 -0
- /package/dist/{databrowser.ui-N6GHEQ2P.js.map → databrowser.ui-Q365SHBG.js.map} +0 -0
- /package/dist/{dnaMethylation-BOGAUAWA.js.map → dnaMethylation-IFZWWBUG.js.map} +0 -0
- /package/dist/{e2pca-L5EBQJNP.js.map → e2pca-I3QXF7EM.js.map} +0 -0
- /package/dist/{ep-Z67ORKUX.js.map → ep-2VCQ36GT.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-SP7VOL64.js.map → expclust.gdc.spec-VWIQFY67.js.map} +0 -0
- /package/dist/{facet-HDB4VDGU.js.map → facet-CHP3VUWS.js.map} +0 -0
- /package/dist/{geneExpClustering-6ZPOLTDJ.js.map → geneExpClustering-YDIDEH2O.js.map} +0 -0
- /package/dist/{geneExpression-T7QUHV5S.js.map → geneExpression-FA5RJRHZ.js.map} +0 -0
- /package/dist/{geneExpression-T6YIG4XQ.js.map → geneExpression-X2KXJPND.js.map} +0 -0
- /package/dist/{geneExpression.unit.spec-DO52L5IB.js.map → geneExpression.unit.spec-3LVHYZGG.js.map} +0 -0
- /package/dist/{geneORA-KOUDUWUO.js.map → geneORA-4CAYRKSN.js.map} +0 -0
- /package/dist/{geneVariant-FVR76F6I.js.map → geneVariant-OCOTNUH4.js.map} +0 -0
- /package/dist/{geneVariant-I5QUITKG.js.map → geneVariant-Y4L5W5HF.js.map} +0 -0
- /package/dist/{geneVariant.integration.spec-D4IRM7B5.js.map → geneVariant.integration.spec-BOJ5MM5K.js.map} +0 -0
- /package/dist/{genefusion.ui-35IYSZD7.js.map → genefusion.ui-I6HZOBIV.js.map} +0 -0
- /package/dist/{geneset-7ZHJ5KWK.js.map → geneset-GEWKDAAT.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-VXASVLNH.js.map → genomeBrowser.spec-FDEGH4DY.js.map} +0 -0
- /package/dist/{grin2-IY26UUQI.js.map → grin2-K56B6XBZ.js.map} +0 -0
- /package/dist/{grin2-7NM56COO.js.map → grin2-V6FMM44N.js.map} +0 -0
- /package/dist/{gsea-TORO46C6.js.map → gsea-UNPPRU2U.js.map} +0 -0
- /package/dist/{hierCluster-3BKEGW6P.js.map → hierCluster-DXAWRQNI.js.map} +0 -0
- /package/dist/{hierCluster-HM3LOM6V.js.map → hierCluster-SPIQA2M2.js.map} +0 -0
- /package/dist/{hierCluster.config-LDO5IGQ5.js.map → hierCluster.config-JW6D3T3Q.js.map} +0 -0
- /package/dist/{hierCluster.integration.spec-XO5R6CQT.js.map → hierCluster.integration.spec-5NXZY4LG.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-NVQ6262K.js.map → hierCluster.interactivity-CPPBXHM7.js.map} +0 -0
- /package/dist/{hierCluster.renderers-SWPPNBLU.js.map → hierCluster.renderers-A6MEGO2B.js.map} +0 -0
- /package/dist/{imagePlot-V4WLAPV6.js.map → imagePlot-QLAHCULW.js.map} +0 -0
- /package/dist/{importPlot-NZKQEOX4.js.map → importPlot-6ITZ6U7G.js.map} +0 -0
- /package/dist/{isoformExpression-TIZBIGNL.js.map → isoformExpression-7GAUF2QV.js.map} +0 -0
- /package/dist/{jspdf.es.min-DO4YWL2R.js.map → jspdf.es.min-FC3BCETM.js.map} +0 -0
- /package/dist/{launch.adhoc-JYEN42NM.js.map → launch.adhoc-HFHBAUR6.js.map} +0 -0
- /package/dist/{leftlabel.sample-43DL3J3H.js.map → leftlabel.sample-CWPJUCHR.js.map} +0 -0
- /package/dist/{legacyDataset-QRSNRVUA.js.map → legacyDataset-PBCPC5I7.js.map} +0 -0
- /package/dist/{lollipop-NMWZ4FVF.js.map → lollipop-QFRQLEER.js.map} +0 -0
- /package/dist/{maf-DS3EOVGV.js.map → maf-OEODBT3Y.js.map} +0 -0
- /package/dist/{maftimeline-ZB2753S7.js.map → maftimeline-2DFIF4C4.js.map} +0 -0
- /package/dist/{matrix-RCGQWQ3C.js.map → matrix-3HFB5TUU.js.map} +0 -0
- /package/dist/{matrix-WTTEK4FT.js.map → matrix-MIXK27AD.js.map} +0 -0
- /package/dist/{matrix.cells-UO5ASQ35.js.map → matrix.cells-U7AQNEBP.js.map} +0 -0
- /package/dist/{matrix.config-3UQAT3QR.js.map → matrix.config-FX5MHX6O.js.map} +0 -0
- /package/dist/{matrix.controls-PRZ77K5L.js.map → matrix.controls-5K7BB5Z4.js.map} +0 -0
- /package/dist/{matrix.data-4W73RQ3H.js.map → matrix.data-EEIY6AO4.js.map} +0 -0
- /package/dist/{matrix.dom-IZFFS4RQ.js.map → matrix.dom-6QL3AJMW.js.map} +0 -0
- /package/dist/{matrix.groups-5VMPI7SA.js.map → matrix.groups-CUB6UWC5.js.map} +0 -0
- /package/dist/{matrix.integration.spec-2F5LDLC2.js.map → matrix.integration.spec-ML4T7FRG.js.map} +0 -0
- /package/dist/{matrix.interactivity-MIPZ6ELV.js.map → matrix.interactivity-QMPWX63Q.js.map} +0 -0
- /package/dist/{matrix.layout-EO5LVYRO.js.map → matrix.layout-7SEF6MYI.js.map} +0 -0
- /package/dist/{matrix.legend-QBFBFEUG.js.map → matrix.legend-42LQGAGX.js.map} +0 -0
- /package/dist/{matrix.renderers-ERJXVCQL.js.map → matrix.renderers-ZF7LLER3.js.map} +0 -0
- /package/dist/{matrix.serieses-E23EPXHA.js.map → matrix.serieses-4B2WB526.js.map} +0 -0
- /package/dist/{matrix.sort-I4UGMEXR.js.map → matrix.sort-BJACNR7G.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-CRGF6CSE.js.map → matrix.sort.unit.spec-ZGSM7HDJ.js.map} +0 -0
- /package/dist/{matrix.sorterUi-YLSYTYLE.js.map → matrix.sorterUi-W6XFYZY2.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-ENG3ICOO.js.map → matrix.sorterUi.unit.spec-V34ZZD7A.js.map} +0 -0
- /package/dist/{mavb-5WR7OJHI.js.map → mavb-NVQVFU6E.js.map} +0 -0
- /package/dist/{mds.fimo-3ZRH7BBJ.js.map → mds.fimo-HOCF6U6K.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-RPXR2FVK.js.map → mds.samplescatterplot-ULD5BK5R.js.map} +0 -0
- /package/dist/{mds.survivalplot-WSSMYUZD.js.map → mds.survivalplot-5US32RQD.js.map} +0 -0
- /package/dist/{oncomatrix-JKYPUJQR.js.map → oncomatrix-Y3G3MUJJ.js.map} +0 -0
- /package/dist/{oncomatrix.spec-OEGU4DYK.js.map → oncomatrix.spec-MFUJLWEP.js.map} +0 -0
- /package/dist/{plot.2dvaf-ZGARLQNK.js.map → plot.2dvaf-F4WZ4YPU.js.map} +0 -0
- /package/dist/{plot.app-TKUJH3LK.js.map → plot.app-YFFLLBU5.js.map} +0 -0
- /package/dist/{plot.barplot-FEIPGDZ2.js.map → plot.barplot-2EJ2MWQD.js.map} +0 -0
- /package/dist/{plot.boxplot-6RASUMZB.js.map → plot.boxplot-AKZM443E.js.map} +0 -0
- /package/dist/{plot.brainImaging-ZJPFWX2W.js.map → plot.brainImaging-DR6WJNFZ.js.map} +0 -0
- /package/dist/{plot.dzi-PC34YI6Y.js.map → plot.dzi-R2MR7HAT.js.map} +0 -0
- /package/dist/{plot.ssgq-Z4UNJKWO.js.map → plot.ssgq-C52YIUFY.js.map} +0 -0
- /package/dist/{plot.vaf2cov-NZ4WULKT.js.map → plot.vaf2cov-FOD3K7BC.js.map} +0 -0
- /package/dist/{plot.wsi-YYXFAZWY.js.map → plot.wsi-D2TXYERK.js.map} +0 -0
- /package/dist/{polar-X2GPIBLB.js.map → polar-2LC35O6K.js.map} +0 -0
- /package/dist/{polar2-TZ553QQH.js.map → polar2-QPUOEUJZ.js.map} +0 -0
- /package/dist/{profile.spec-VB6VMFLY.js.map → profile.spec-3NCDGHLX.js.map} +0 -0
- /package/dist/{profileBarchart-SKJSTC7B.js.map → profileBarchart-PPQ3NL4D.js.map} +0 -0
- /package/dist/{profileForms-RLOGSMAQ.js.map → profileForms-GS3VVW65.js.map} +0 -0
- /package/dist/{profilePlot-267ZS3RG.js.map → profilePlot-DQWFH5NC.js.map} +0 -0
- /package/dist/{profileRadar-KGOBHCSF.js.map → profileRadar-KAKRDC4R.js.map} +0 -0
- /package/dist/{proteomeAbundance-PGHZSVAF.js.map → proteomeAbundance-DE4NVBCN.js.map} +0 -0
- /package/dist/{proteomeAbundance-JUYAYO5I.js.map → proteomeAbundance-LTB3QR3G.js.map} +0 -0
- /package/dist/{qualitative-3IECKKJM.js.map → qualitative-YOFAROVR.js.map} +0 -0
- /package/dist/{regression-J6FFRPXN.js.map → regression-PF6IAHJK.js.map} +0 -0
- /package/dist/{regression.inputs-T7LWBSYZ.js.map → regression.inputs-77IUYED3.js.map} +0 -0
- /package/dist/{regression.inputs.term-TT7PNX6G.js.map → regression.inputs.term-WWCHU6KF.js.map} +0 -0
- /package/dist/{regression.inputs.values.table-SHFUNKCS.js.map → regression.inputs.values.table-I6GM6MU7.js.map} +0 -0
- /package/dist/{regression.results-D4WX6VIV.js.map → regression.results-6GXNKYUS.js.map} +0 -0
- /package/dist/{regression.spec-7SW55L7X.js.map → regression.spec-MEFQNY34.js.map} +0 -0
- /package/dist/{report-QYOZ4BRF.js.map → report-LG3UKZHL.js.map} +0 -0
- /package/dist/{sampleScatter.spec-JCHFMGNF.js.map → sampleScatter.spec-D3IK7MSA.js.map} +0 -0
- /package/dist/{sampleView-7RPKNAZC.js.map → sampleView-XUI2J5EC.js.map} +0 -0
- /package/dist/{samplelst-4WNPHZVG.js.map → samplelst-A7IHCBAX.js.map} +0 -0
- /package/dist/{samplematrix-CG52DSXJ.js.map → samplematrix-VGUU7Q75.js.map} +0 -0
- /package/dist/{sc-OJSWILSA.js.map → sc-UVKVT2RY.js.map} +0 -0
- /package/dist/{scatter-LG2RMMEC.js.map → scatter-UILUYOGO.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-QXRVE6N4.js.map → selectGenomeWithTklst-LWKIMZEJ.js.map} +0 -0
- /package/dist/{singleCellCellType-XBSRL33U.js.map → singleCellCellType-TI52WQQ4.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-64ECP62X.js.map → singleCellGeneExpression-I5SAHMGI.js.map} +0 -0
- /package/dist/{singleCellPlot-E5F62JY6.js.map → singleCellPlot-HRWCHYCI.js.map} +0 -0
- /package/dist/{singlecell-S7B5V7NK.js.map → singlecell-BHPP7KCO.js.map} +0 -0
- /package/dist/{singlecell-FCY5EOUV.js.map → singlecell-PQNKBKR7.js.map} +0 -0
- /package/dist/{snp-ACKX4GRX.js.map → snp-V4YGI7B3.js.map} +0 -0
- /package/dist/{snp.unit.spec-QBGHKKUD.js.map → snp.unit.spec-JSUCMGNP.js.map} +0 -0
- /package/dist/{snplocus-7EUOW7J7.js.map → snplocus-3YT5NNCH.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-ALQZA35Z.js.map → spliceevent.a53ss.diagram-QEQJ44YH.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-UF7WJA5R.js.map → spliceevent.exonskip.diagram-HMWVSOJG.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-4HPGRNRR.js.map → spliceevent.noeventdiagram-L5HUCT5A.js.map} +0 -0
- /package/dist/{ssGSEA-FDRBBBLJ.js.map → ssGSEA-Z3XRCBYW.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-EZEOWJVV.js.map → ssGSEA.unit.spec-EUCTV2XJ.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-LALOJTHV.js.map → summarizeMutationDiagnosis-HFFYLQOF.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-TSNTSOBZ.js.map → summarizeMutationSurvival-OBK6YILP.js.map} +0 -0
- /package/dist/{summary-YRHVS64T.js.map → summary-W55WWIU2.js.map} +0 -0
- /package/dist/{summary.integration.spec-766YQLQA.js.map → summary.integration.spec-X2PNAUKW.js.map} +0 -0
- /package/dist/{summaryInput-VQ2X6GSX.js.map → summaryInput-X547Q6C7.js.map} +0 -0
- /package/dist/{survival-TVA3ZWVP.js.map → survival-PAJZHZPD.js.map} +0 -0
- /package/dist/{survival-FQXZH2MM.js.map → survival-TQPWMOD5.js.map} +0 -0
- /package/dist/{svg2pdf.es.min-EZ4UYRSH.js.map → svg2pdf.es.min-CYTPRWNB.js.map} +0 -0
- /package/dist/{svgraph-4BFBO7EL.js.map → svgraph-Y35C2M3D.js.map} +0 -0
- /package/dist/{svmr-ML7GAIIA.js.map → svmr-WGCIR7PE.js.map} +0 -0
- /package/dist/{table-SMLMUWPP.js.map → table-Q3B2YXEN.js.map} +0 -0
- /package/dist/{termCollection-EE6AOIVA.js.map → termCollection-A6YTSM5I.js.map} +0 -0
- /package/dist/{termCollection-22CPTISZ.js.map → termCollection-NTFNVQ7D.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-4DIW3CJ3.js.map → termCollection.unit.spec-BX54PHKT.js.map} +0 -0
- /package/dist/{tk-ITZCKOQ5.js.map → tk-OCBZ7YR6.js.map} +0 -0
- /package/dist/{tp.ui-R6HVKCBC.js.map → tp.ui-ZT47N2CO.js.map} +0 -0
- /package/dist/{tvs.density-AQ5GD437.js.map → tvs.density-HSVPDDGA.js.map} +0 -0
- /package/dist/{tvs.dt-2263TBEJ.js.map → tvs.dt-BFB253O3.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-TRRHL33N.js.map → tvs.dtcnv.categorical-ARGAYIDO.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-GREYNF52.js.map → tvs.dtcnv.continuous-JCU23ERV.js.map} +0 -0
- /package/dist/{tvs.dtfusion-XOX46L3M.js.map → tvs.dtfusion-FV64XLZI.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-IDMXT53F.js.map → tvs.dtsnvindel-DMOXMEVL.js.map} +0 -0
- /package/dist/{tvs.dtsv-ZDWFYH2C.js.map → tvs.dtsv-53FSZEPV.js.map} +0 -0
- /package/dist/{tvs.numeric-ZN2R7BH3.js.map → tvs.numeric-ICUGA4WY.js.map} +0 -0
- /package/dist/{tvs.samplelst-GAP76HRH.js.map → tvs.samplelst-MVPL6VXX.js.map} +0 -0
- /package/dist/{tvs.termCollection-GQ65UKSI.js.map → tvs.termCollection-UGJXTHTG.js.map} +0 -0
- /package/dist/{violin-JGDL62YA.js.map → violin-ZLUDGSQG.js.map} +0 -0
- /package/dist/{violin.interactivity-H4RP4K5U.js.map → violin.interactivity-ULDOCZWW.js.map} +0 -0
- /package/dist/{violin.renderer-QPHLACDC.js.map → violin.renderer-KJAXPMIK.js.map} +0 -0
- /package/dist/{vocabulary-7JACY4J2.js.map → vocabulary-34YUQ4ZQ.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/block.js", "../src/block.tk.bam.adaptor.js", "../src/block.tk.pgv.adaptor.js", "../src/block.tk.ld.adaptor.js", "../src/block.tk.junction.adaptor.js", "../src/block.tk.bampile.js", "../src/block.tk.aicheck.adaptor.js", "../src/block.tk.bigwigstranded.js", "../src/block.tk.bedj.js", "../src/block.tk.usegm.js", "../src/block.tk.hicstraw.adaptor.ts", "../src/block.tk.ase.adaptor.js", "../src/block.mds.junction.adaptor.js", "../src/block.mds.svcnv.adaptor.js", "../src/block.mds.expressionrank.adaptor.js", "../mds3/adaptor.js", "../src/block.tk.bedgraphdot.adaptor.js", "../src/block.ds.maketk.js"],
|
|
4
|
+
"sourcesContent": ["import { scaleLinear } from 'd3-scale'\nimport { select as d3select, selectAll as d3selectAll, pointer } from 'd3-selection'\nimport { format as d3format } from 'd3-format'\nimport { axisTop, axisLeft } from 'd3-axis'\nimport { debounce } from 'debounce'\nimport * as client from './client'\nimport { axisstyle, Menu, newSandboxDiv, sayerror, appear, disappear, isoformSelect, allgm2sum, sketchGene, sketchSplicerna, sketchRna, sketchProtein2 } from '#dom'\nimport { dofetch3 } from '../common/dofetch'\nimport * as common from '#shared/common.js'\nimport * as coord from './coord'\nimport vcf2dstk from './vcf.tkconvert'\nimport blockinit from './block.init'\nimport * as Legend from './block.legend'\nimport { string2snp } from '#common/snp'\n\n// track types\nimport { bamfromtemplate, bammaketk, bamload } from './block.tk.bam.adaptor'\nimport { pgvfromtemplate, pgvmaketk, pgvload } from './block.tk.pgv.adaptor'\nimport { ldfromtemplate, ldmaketk, ldload } from './block.tk.ld.adaptor'\nimport { junctionfromtemplate, junctionmaketk, junctionload } from './block.tk.junction.adaptor'\nimport { bampilefromtemplate, bampilemaketk, bampileload } from './block.tk.bampile'\nimport { bigwigfromtemplate, bigwigmaketk, bigwigload, bigwigloadsubpanel } from './block.tk.bigwig'\nimport { aicheckfromtemplate, aicheckmaketk, aicheckload, aicheckloadsubpanel } from './block.tk.aicheck.adaptor'\nimport {\n\tbigwigstrandedfromtemplate,\n\tbigwigstrandedmaketk,\n\tbigwigstrandedload,\n\tbigwigstrandedloadsubpanel\n} from './block.tk.bigwigstranded'\nimport { bedjfromtemplate, bedjmaketk, bedjload, bedjloadsubpanel } from './block.tk.bedj'\nimport { gmtkfromtemplate, gmtkmaketk, gmtkrender } from './block.tk.usegm'\nimport { hicstrawfromtemplate, hicstrawmaketk, hicstrawload } from './block.tk.hicstraw.adaptor'\nimport { asefromtemplate, asemaketk, aseload } from './block.tk.ase.adaptor'\n\nimport { mdsjunctionfromtemplate, mdsjunctionmaketk, mdsjunctionload } from './block.mds.junction.adaptor'\nimport { mdssvcnvfromtemplate, mdssvcnvmaketk, mdssvcnvload } from './block.mds.svcnv.adaptor'\nimport {\n\tmdsexpressionrankfromtemplate,\n\tmdsexpressionrankmaketk,\n\tmdsexpressionrankload\n} from './block.mds.expressionrank.adaptor'\nimport { mds3_fromtemplate, mds3_maketk, mds3_load } from '../mds3/adaptor'\nimport { bedgraphdot_fromtemplate, bedgraphdot_maketk, bedgraphdot_load } from './block.tk.bedgraphdot.adaptor'\n\n/* non-standard handler for legacy dataset\ncan delete when migrated to mds3\n*/\nimport * as blockds from './block.ds'\nimport dsmaketk from './block.ds.maketk'\n\n// dummy\n\n/* \ncallbacks from constructor options\n- onloadalltk\n- onloadalltk_always\n- onCoordinateChange\n- onpanning\n- onsetheight\n- onAddRemoveTk\n\n**************** METHODS\nupdateruler()\nmoremenu()\n**************** helper\nmakecoordinput()\n\n*/\n\nconst basecolorunknown = '#858585'\nconst baseheight = 16\nconst ntpxwidth = 20 // max allowed pixel width for a nt\nconst hlregioncolor = '#ccffff' // default color\nconst rulergrabzindex = 1000\nconst headerTip = new Menu()\n\nlet blockId = 1\n\nexport class Block {\n\tconstructor(arg) {\n\t\t/*** NOTE: This block instance is returned when calling runproteinpaint({block: true, ....}) ***/\n\n\t\t// assign a blockId to help in targeted DOM selection, in testing and maybe live usage.\n\t\tthis.blockId = blockId++\n\n\t\tthis.mclassOverride = arg.mclassOverride // allow tracks to access it to render legend\n\n\t\t// temp fix, to use in dofetch( {serverData} )\n\t\tthis.cache = {}\n\n\t\tif (arg.debugmode) {\n\t\t\twindow.bb = this\n\t\t\tthis.debugmode = true\n\t\t}\n\n\t\tthis.hostURL = sessionStorage.getItem('hostURL') // NO NEED for these after replacing fetch() with dofetch\n\t\tthis.jwt = sessionStorage.getItem('jwt')\n\n\t\tif (!arg.style) {\n\t\t\targ.style = {}\n\t\t}\n\t\tif (arg.style.margin == undefined) {\n\t\t\targ.style.margin = '20px'\n\t\t}\n\t\tif (arg.cohort) {\n\t\t\tthis.cohort = arg.cohort\n\t\t}\n\t\tthis.busy = true\n\n\t\t//////////////////////////////////////////\n\t\t//////// attach particular configurations\n\t\tif (arg.hidedatasetexpression) this.hidedatasetexpression = arg.hidedatasetexpression\n\t\tif (arg.variantPageCall_snv) this.variantPageCall_snv = arg.variantPageCall_snv\n\t\tif (arg.samplecart) this.samplecart = arg.samplecart\n\n\t\tthis.pannedpx = undefined\n\t\tthis.zoomedin = false\n\t\tthis.resized = false\n\n\t\tif (!arg.hidegenelegend) {\n\t\t\tthis.legend = {\n\t\t\t\tmclasses: new Map(), // two special legend that cover all dstk on display\n\t\t\t\tmorigins: new Map(),\n\t\t\t\tlegendcolor: '#7D6836',\n\t\t\t\theadtextcolor: '#555',\n\t\t\t\tvpad: '5px'\n\t\t\t}\n\t\t}\n\n\t\tthis.ctrl = {}\n\t\tthis.ds2handle = {}\n\t\tthis.ownds = {} // compared to genome.datasets\n\t\tthis.rglst = []\n\t\tthis.tklst = []\n\n\t\t// special effects\n\t\tthis.rotated = arg.rotated\n\t\tthis.showreverse = arg.showreverse // effect on pan\n\n\t\t////////////////////////////////\n\t\t// callbacks\n\t\tthis.onloadalltk = []\n\t\tthis.onloadalltk_always = arg.onloadalltk_always\n\t\tthis.onpanning = arg.onpanning\n\t\tthis.onsetheight = arg.onsetheight\n\t\tif (arg.onAddRemoveTk) {\n\t\t\tif (typeof arg.onAddRemoveTk != 'function') throw 'onAddRemoveTk() not function'\n\t\t\tthis.onAddRemoveTk = arg.onAddRemoveTk\n\t\t}\n\t\tthis.onCoordinateChange = arg.onCoordinateChange // argument is the rglst[]\n\n\t\tthis.exonsf = 1 // # pixel per basepair\n\n\t\tthis.labelfontsize = 14\n\t\tthis.tkleftlabel_xshift = -10\n\t\tthis.genome = arg.genome\n\t\tthis.holder0 = arg.holder\n\t\tthis.errdiv = arg.holder.append('div')\n\n\t\tthis.blocktip = new Menu({ padding: '0px' })\n\t\t/* used at:\n\t\told official ds handle, mouse over for \"About\" menu\n\t\tmds handle, click to show list of contents\n\t\tzoom buttons, mouse over for list of subpanels\n\t*/\n\t\tthis.tip = new Menu({ padding: '0px' })\n\n\t\tif (!this.genome) {\n\t\t\tthis.error('no genome')\n\t\t\treturn\n\t\t}\n\n\t\t// the main block width, not including subpanels\n\t\tif (arg.width) {\n\t\t\tthis.width = arg.width\n\t\t} else {\n\t\t\tconst minwidth = 800\n\t\t\tconst w = arg.holder.node().getBoundingClientRect().width\n\t\t\tthis.width = ntpxwidth * Math.ceil(Math.max(w * 0.63, minwidth) / ntpxwidth)\n\n\t\t\t// !!! TEMP !!!\n\t\t\t// hardcoded method to detect legacy ds with floating exp panel, to make room for the panels; delete after pediatric legacy ds is retired\n\t\t\tif (arg.datasetlst?.includes('pediatric')) this.width -= 100\n\t\t}\n\n\t\tif (arg.usegm) {\n\t\t\tthis.usegm = arg.usegm\n\t\t\tif (!this.usegm.pdomains) {\n\t\t\t\t// when it didn't go through block.init\n\t\t\t\tthis.usegm.pdomains = []\n\t\t\t}\n\t\t\tthis.allgm = arg.allgm\n\t\t\tif (!this.allgm) {\n\t\t\t\tthis.allgm = [arg.usegm]\n\t\t\t}\n\t\t\tif (!arg.tklst) {\n\t\t\t\targ.tklst = []\n\t\t\t}\n\n\t\t\tconst gmtk = arg.tklst.find(i => i.type == client.tkt.usegm)\n\t\t\tif (gmtk) {\n\t\t\t\t/*\n\t\t\t\ta track obj by type=\"usegm\" already exists\n\t\t\t\toverride gene name of this tk, and do not add a new \"gmtk\" obj to arg.tklst[]\n\t\t\t\t*/\n\t\t\t\tgmtk.name = arg.usegm.name\n\t\t\t} else {\n\t\t\t\t// no \"usegm\" track exists in arg.tklst[], create new object\n\t\t\t\targ.tklst.push({\n\t\t\t\t\ttype: client.tkt.usegm,\n\t\t\t\t\tname: arg.usegm.name,\n\t\t\t\t\t//model:arg.usegm,\n\t\t\t\t\tstackheight: arg.gmstackheight\n\t\t\t\t})\n\t\t\t}\n\t\t} else if (arg.rglst) {\n\t\t\tfor (const r of arg.rglst) {\n\t\t\t\tthis.rglst.push({\n\t\t\t\t\tchr: r.chr,\n\t\t\t\t\tbstart: r.start,\n\t\t\t\t\tbstop: r.stop,\n\t\t\t\t\tstart: r.start,\n\t\t\t\t\tstop: r.stop,\n\t\t\t\t\treverse: r.reverse\n\t\t\t\t})\n\t\t\t}\n\t\t\tthis.regionspace = 10\n\t\t} else {\n\t\t\t// single region\n\t\t\tconst e = coord.invalidcoord(this.genome, arg.chr, arg.start, arg.stop)\n\t\t\tif (e) {\n\t\t\t\tthis.error(e)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst _chr = this.genome.chrlookup[arg.chr.toUpperCase()]\n\t\t\tconst minspan = Math.ceil(this.width / ntpxwidth) //200\n\t\t\tif (arg.stop - arg.start < minspan) {\n\t\t\t\tconst h = Math.ceil(minspan / 2)\n\t\t\t\tconst m = Math.floor((arg.start + arg.stop) / 2)\n\t\t\t\targ.start = m - h\n\t\t\t\targ.stop = m + h\n\t\t\t}\n\t\t\tthis.rglst = [\n\t\t\t\t{\n\t\t\t\t\tchr: _chr.name,\n\t\t\t\t\tbstart: 0,\n\t\t\t\t\tbstop: _chr.len,\n\t\t\t\t\tstart: arg.start,\n\t\t\t\t\tstop: arg.stop,\n\t\t\t\t\treverse: this.showreverse\n\t\t\t\t}\n\t\t\t]\n\t\t\tthis.regionspace = 0\n\t\t}\n\t\tthis.startidx = 0\n\t\tthis.stopidx = this.rglst.length - 1\n\n\t\t// TODO allow svgholder for embedding into an existing svg\n\n\t\tthis.holder = arg.holder\n\t\t\t.append('div')\n\t\t\t.style('margin', arg.style.margin)\n\t\t\t.style('display', 'inline-block')\n\t\t\t.attr('class', 'sja_Block_div')\n\t\tif (!arg.nobox) {\n\t\t\tthis.holder.style('border', 'solid 1px #ccc')\n\t\t}\n\t\tif (arg.bgcolor) {\n\t\t\tthis.holder.style('background-color', arg.bgcolor)\n\t\t}\n\n\t\tif (this.genome.hasIdeogram) {\n\t\t\tthis.initIdeogram(arg)\n\t\t\t// creates this.ideogram{}\n\t\t}\n\n\t\tlet butrow\n\t\tif (!arg.butrowbottom) {\n\t\t\tbutrow = this.holder.append('div')\n\t\t}\n\t\t{\n\t\t\tconst inlinediv = this.holder\n\t\t\t\t.append('div') // contains svg and resize button\n\t\t\t\t.style('position', 'relative')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\tthis.svg = inlinediv\n\t\t\t\t.append('svg')\n\t\t\t\t.attr('data-testid', 'sjpp_block_svg')\n\t\t\t\t.on('mousedown', event => {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t})\n\t\t\tif (!arg.noresize) {\n\t\t\t\tthis.resizewidthbutton = inlinediv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.text('drag to resize')\n\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t.style('position', 'absolute')\n\t\t\t\t\t.style('bottom', '-5px') // push down enough not to touch protein bar\n\t\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t\t.on('mousedown', event => {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tconst x = event.clientX\n\t\t\t\t\t\tconst body = d3select(document.body)\n\t\t\t\t\t\tbody.on('mousemove', event => {\n\t\t\t\t\t\t\tthis.resizewidthbutton.style('right', this.rpad + this.rightheadw + x - event.clientX + 'px')\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbody.on('mouseup', event => {\n\t\t\t\t\t\t\tthis.resizewidthbutton.style('right', this.rpad + this.rightheadw + 'px')\n\t\t\t\t\t\t\tbody.on('mousemove', null).on('mouseup', null)\n\t\t\t\t\t\t\tif (this.busy) {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.zoomedin = false\n\t\t\t\t\t\t\tthis.pannedpx = undefined\n\t\t\t\t\t\t\t// the only place to set it to true\n\t\t\t\t\t\t\tthis.resized = true\n\n\t\t\t\t\t\t\tthis.width += event.clientX - x\n\n\t\t\t\t\t\t\tthis.block_coord_updated()\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (arg.butrowbottom) {\n\t\t\tbutrow = this.holder.append('div').style('margin-top', '5px')\n\t\t}\n\t\tif (arg.hidegenecontrol) {\n\t\t\tthis.hidegenecontrol = true\n\t\t\tbutrow.style('display', 'none')\n\t\t}\n\n\t\tif (this.legend) {\n\t\t\tconst div = this.holder.append('div').style('margin-top', '5px')\n\n\t\t\tlet shown = !arg.foldlegend\n\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.text('LEGEND')\n\t\t\t\t.attr('class', 'sja_clb')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t.style('color', this.legend.legendcolor)\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tif (shown) {\n\t\t\t\t\t\tshown = false\n\t\t\t\t\t\tdisappear(div2)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshown = true\n\t\t\t\t\t\tappear(div2)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\tconst div2 = this.holder.append('div').style('border-top', 'solid 1px ' + this.legend.legendcolor)\n\t\t\t//.style('background-color', '#FCFBF7')\n\t\t\tif (arg.foldlegend) {\n\t\t\t\tdiv2.style('display', 'none')\n\t\t\t}\n\n\t\t\tthis.legend.holder = div2.append('table').style('border-spacing', '15px').style('border-collapse', 'separate')\n\n\t\t\tconst [tr1, td1] = Legend.legend_newrow(\n\t\t\t\tthis,\n\t\t\t\t//Allows user to set left-side group designation for classes\n\t\t\t\targ.mclassOverride ? arg.mclassOverride.className : 'CLASS'\n\t\t\t)\n\t\t\tthis.legend.tr_mclass = tr1.style('display', 'none')\n\t\t\tthis.legend.td_mclass = td1\n\t\t\tconst [tr2, td2] = Legend.legend_newrow(this, 'ORIGIN')\n\t\t\tthis.legend.tr_morigin = tr2.style('display', 'none')\n\t\t\tthis.legend.td_morigin = td2\n\n\t\t\tif (arg.legendimg) {\n\t\t\t\tconst [tr, td] = Legend.legend_newrow(this, arg.legendimg.name || '')\n\t\t\t\tthis.make_legend_img(arg.legendimg, td)\n\t\t\t}\n\t\t}\n\n\t\tif (arg.usegm) {\n\t\t\t// do this after legend is set\n\t\t\t// fills this.rglst[], this.startidx, this.stopidx\n\t\t\tthis.setgmmode(arg.gmmode || client.gmmode.genomic)\n\t\t}\n\n\t\t// rglst is set, can process ideogram\n\t\tif (this.ideogram) {\n\t\t\tif (this.ideogram.visible) this.updateIdeogram()\n\t\t\telse this.ideogram.div.style('display', 'none')\n\t\t}\n\n\t\tif (arg.nobox) {\n\t\t\t// no dogtag\n\t\t} else {\n\t\t\t// use dogtag\n\t\t\tbutrow\n\t\t\t\t.append('div')\n\t\t\t\t.html(arg.dogtag ? arg.dogtag : arg.chr)\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('padding', '5px')\n\t\t\t\t.style('background-color', '#bbb')\n\t\t\t\t.style('color', 'white')\n\t\t}\n\t\tif (this.usegm) {\n\t\t\tthis.usegmtip = new Menu({ padding: 'none' })\n\t\t\t// name button\n\t\t\tthis.ctrl.namebutt = butrow\n\t\t\t\t.append('span')\n\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t.html(\n\t\t\t\t\t'<span data-testid=\"sja_block_usegm_name\" style=\"font-size:1.5em;font-weight:bold\">' +\n\t\t\t\t\t\tthis.usegm.name +\n\t\t\t\t\t\t'</span> ' +\n\t\t\t\t\t\tthis.usegm.isoform\n\t\t\t\t)\n\t\t\t\t.on('click', event => {\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tthis.genemenu()\n\t\t\t\t})\n\t\t\tbutrow.append('span').html(' ')\n\n\t\t\tbutrow\n\t\t\t\t.append('div') // duplicated\n\t\t\t\t.text(this.genome.name)\n\t\t\t\t.attr('class', 'sjpp-active-tiny-button')\n\n\t\t\t// official dataset (legacy ds), only use in gm mode, won't show in plain browser\n\t\t\tthis.ctrl.dshandleholder = butrow.append('span')\n\t\t\tif (!arg.hide_dsHandles) {\n\t\t\t\t// can show ds handles\n\t\t\t\tif (this.genome.datasets) {\n\t\t\t\t\tfor (const n in this.genome.datasets) {\n\t\t\t\t\t\tif (this.genome.datasets[n].isMds) {\n\t\t\t\t\t\t\t// old ds, do not show mds here\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.genome.datasets[n].noHandleOnClient) continue\n\t\t\t\t\t\tthis.old_dshandle_new(n)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// custom data, legacy ds\n\t\t\t\tbutrow\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_opaque8 sjpp-plus-button')\n\t\t\t\t\t.text('+')\n\t\t\t\t\t.on('click', event => {\n\t\t\t\t\t\tconst p = event.target.getBoundingClientRect()\n\t\t\t\t\t\tthis.tip.clear().show(p.left - 150, p.top + p.height - 15)\n\t\t\t\t\t\timport('../mds3/customdata.inputui').then(q => q.default(this))\n\t\t\t\t\t})\n\t\t\t}\n\t\t\tbutrow.append('span').html(' ')\n\t\t}\n\n\t\tthis.coord = {\n\t\t\theight: 0\n\t\t}\n\t\tif (this.usegm) {\n\t\t\t// no input box\n\t\t} else {\n\t\t\tmakecoordinput(this, butrow)\n\n\t\t\tthis.coordwidthsays = butrow.append('span').style('padding', '0px 10px 0px 5px').style('font-size', '80%')\n\n\t\t\tbutrow\n\t\t\t\t.append('div') // duplicated\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.text(this.genome.name)\n\t\t\t\t.style('background', '#465f75')\n\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t.style('color', 'white')\n\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t.style('margin-right', '5px')\n\t\t\t\t.style('border-radius', '4px')\n\t\t}\n\n\t\t/*\n\tmds handle always shown\n\tafter coord input\n\tmay configure not to show\n\t*/\n\t\tif (!arg.hide_dsHandles && this.genome.datasets) {\n\t\t\tconst lst = []\n\t\t\tfor (const n in this.genome.datasets) {\n\t\t\t\tif (this.genome.datasets[n].isMds && !this.genome.datasets[n].noHandleOnClient) {\n\t\t\t\t\tlst.push(n)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (lst.length) {\n\t\t\t\tthis.ctrl.mdsHandleHolder = butrow.append('span').style('margin-right', '10px')\n\t\t\t\tfor (const i of lst) this.mds_handle_make(i)\n\t\t\t}\n\t\t}\n\n\t\tthis.ctrl.zinbutt = butrow\n\t\t\t.append('button')\n\t\t\t.html('In')\n\t\t\t.on('click', () => this.zoomblock(2))\n\t\t\t.on('mouseover', () => this.zoombutton_mouseover(2, false, this.ctrl.zinbutt.node()))\n\t\t//.on('mouseout',()=>this.blocktip.hide())\n\t\tthis.ctrl.zobutt1 = butrow\n\t\t\t.append('button')\n\t\t\t.html('Out ×2')\n\t\t\t.on('click', () => this.zoomblock(2, true))\n\t\t\t.on('mouseover', () => this.zoombutton_mouseover(2, true, this.ctrl.zobutt1.node()))\n\t\tthis.ctrl.zobutt2 = butrow\n\t\t\t.append('button')\n\t\t\t.html('×10')\n\t\t\t.attr('data-testid', 'sjpp-block-zoombtnx10')\n\t\t\t.on('click', () => this.zoomblock(10, true))\n\t\t\t.on('mouseover', () => this.zoombutton_mouseover(10, true, this.ctrl.zobutt2.node()))\n\t\tthis.ctrl.zobutt3 = butrow\n\t\t\t.append('button')\n\t\t\t.html('×50')\n\t\t\t.attr('data-testid', 'sjpp-block-zoombtnx50')\n\t\t\t.on('click', () => this.zoomblock(50, true))\n\t\t\t.on('mouseover', () => this.zoombutton_mouseover(50, true, this.ctrl.zobutt3.node()))\n\n\t\t/*\n\tthis.ctrl.revbutt=butrow.append('button')\n\t\t.html(this.coord.reverse ? 'Reverse «' : 'Forward »')\n\t\t.on('click',()=>this.reverseorient())\n\t\t*/\n\n\t\t{\n\t\t\tconst button = butrow.append('button').text('Tracks').style('margin-left', '10px')\n\t\t\tconst tip = new Menu({ padding: 'none' })\n\t\t\tbutton.on('click', event => {\n\t\t\t\t// remove past state for refreshing tk data\n\t\t\t\tthis.pannedpx = undefined\n\t\t\t\tthis.zoomedin = false\n\t\t\t\tthis.resized = false\n\t\t\t\tconst p = event.target.getBoundingClientRect()\n\t\t\t\timport('./block.tk.menu').then(q => {\n\t\t\t\t\tq.default(this, tip, p.left - 100, p.top + p.height - 15, button.node())\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\n\t\t{\n\t\t\tconst moreBtn = butrow\n\t\t\t\t.append('button')\n\t\t\t\t.style('margin-left', '10px')\n\t\t\t\t.text('More')\n\t\t\t\t.on('click', event => {\n\t\t\t\t\theaderTip.clear()\n\t\t\t\t\tconst p = event.target.getBoundingClientRect()\n\t\t\t\t\tthis.moremenu(headerTip)\n\t\t\t\t\t// must create menu contents first then show, so the height-placement will work\n\t\t\t\t\theaderTip.show2(p.left - 50, p.top + p.height - 15, { elem: moreBtn.node() })\n\t\t\t\t})\n\t\t}\n\n\t\tthis.gdcBamSliceDownloadBtn = butrow\n\t\t\t.append('button')\n\t\t\t.style('margin-left', '10px')\n\t\t\t.style('display', 'none')\n\t\t\t.text('Download GDC BAM slice')\n\t\t\t.on('click', async () => {\n\t\t\t\tconst tks = this.tklst.filter(i => i.type == 'bam' && i.gdcFile)\n\t\t\t\tif (tks.length == 0) return\n\t\t\t\tif (tks.length == 1) {\n\t\t\t\t\tdownloadOneFile(tks[0], this.gdcBamSliceDownloadBtn)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\theaderTip.clear().showunder(this.gdcBamSliceDownloadBtn.node())\n\t\t\t\tfor (const t of tks) {\n\t\t\t\t\tconst button = headerTip.d\n\t\t\t\t\t\t.append('button')\n\t\t\t\t\t\t.text(t.name)\n\t\t\t\t\t\t.style('display', 'block')\n\t\t\t\t\t\t.style('margin', '4px')\n\t\t\t\t\t\t.on('click', () => downloadOneFile(t, button))\n\t\t\t\t}\n\n\t\t\t\tasync function downloadOneFile(tk, button) {\n\t\t\t\t\tbutton.property('disabled', true)\n\n\t\t\t\t\t// old method of window.open() won't allow passing token via request header\n\t\t\t\t\t//const requestUrl = `tkbam?genome=${this.genome.name}&clientdownloadgdcslice=`\n\t\t\t\t\t//window.open(requestUrl, '_self', 'download')\n\n\t\t\t\t\t// FIXME the entire bam slice is cached in browser memory before downloading, which can be slow\n\t\t\t\t\t// will be nice to directly \"stream\" to a download file without caching\n\n\t\t\t\t\tconst headers = {\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\tAccept: 'application/json'\n\t\t\t\t\t}\n\t\t\t\t\tif (tk.gdcToken) {\n\t\t\t\t\t\theaders['X-Auth-Token'] = tk.gdcToken\n\t\t\t\t\t}\n\t\t\t\t\tconst lst = []\n\t\t\t\t\tconst data = await dofetch3('tkbam', {\n\t\t\t\t\t\theaders,\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tclientdownloadgdcslice: 1,\n\t\t\t\t\t\t\tgdcFileUUID: tk.gdcFile.uuid,\n\t\t\t\t\t\t\tgdcFilePosition: tk.gdcFile.position\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tbutton.property('disabled', false)\n\n\t\t\t\t\tconst a = document.createElement('a')\n\t\t\t\t\ta.href = URL.createObjectURL(data)\n\t\t\t\t\ta.download = tk.aboutThisFile ? tk.aboutThisFile[0].v + '.bam' : 'gdc.bam'\n\t\t\t\t\ta.style.display = 'none'\n\t\t\t\t\tdocument.body.appendChild(a)\n\t\t\t\t\ta.click()\n\t\t\t\t\tdocument.body.removeChild(a)\n\t\t\t\t}\n\t\t\t})\n\n\t\tthis.gbase = this.svg.append('g').attr('transform', 'translate(0,0)')\n\n\t\t// cloak that covers gbase with a rect to indicate loading and prevent user interaction\n\t\tthis.gCloak = this.svg.append('g').attr('transform', 'scale(0)')\n\t\tthis.gCloakRect = this.gCloak.append('rect').attr('fill', 'white')\n\t\tthis.gCloakWord = this.gCloak\n\t\t\t.append('text')\n\t\t\t.attr('id', 'loadinggCloak')\n\t\t\t.text('Loading ...')\n\t\t\t.attr('fill', common.defaultcolor)\n\t\t\t.attr('fill-opacity', 0)\n\t\t\t.attr('font-weight', 'bold')\n\t\t\t.attr('font-size', '18px')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('dominant-baseline', 'middle')\n\n\t\tthis.pica = { g: this.svg.append('g') }\n\n\t\tthis.hlregion = {\n\t\t\tg: this.gbase.append('g'),\n\t\t\tlst: []\n\t\t}\n\n\t\tinit_cursorhlbar(this)\n\n\t\tthis.leftheadw = arg.leftheadw || 100\n\t\tthis.rightheadw = arg.rightheadw || 100\n\n\t\t// row - coordinate ruler\n\t\tthis.rulerheight = 20\n\t\tthis.rulerfontsize = 13\n\t\tthis.rulerticksize = 6\n\t\tthis.lpad = 3\n\t\tthis.rpad = 10\n\t\tthis.coordyp1 = 3 // top pad\n\t\tthis.coordyp2 = 3 // bottom pad\n\n\t\t// grand holder, to contain main coord ruler of both main tk and sub panels, so they pan independently\n\t\tthis.coord.g0 = this.gbase\n\t\t\t.append('g')\n\t\t\t.attr('transform', 'translate(' + (this.leftheadw + this.lpad) + ',' + (this.coordyp1 + this.rulerheight) + ')')\n\n\t\t// ruler for main track, pans along with them\n\t\tthis.coord.g = this.coord.g0.append('g')\n\n\t\t// main holder for subpanel rulers, each pans independently\n\t\tthis.coord.gcoordsubpanels = this.coord.g0.append('g')\n\n\t\tthis.coord.name = this.coord.g\n\t\t\t.append('text')\n\t\t\t.attr('text-anchor', 'end')\n\t\t\t.attr('x', -this.lpad + this.tkleftlabel_xshift)\n\t\t\t.attr('y', -this.rulerheight / 2)\n\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t.attr('font-size', 13)\n\t\tif (this.hidegenecontrol) {\n\t\t\tthis.coord.name\n\t\t\t\t.text('Zoom out')\n\t\t\t\t.classed('sja_clbtext', true)\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tif (this.busy) return\n\t\t\t\t\tif (this.nozoomout()) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tthis.zoomblock(2, true)\n\t\t\t\t})\n\t\t}\n\t\tthis.coord.axesg = this.coord.g.append('g')\n\t\tthis.coord.grab = this.coord.g\n\t\t\t.append('rect')\n\t\t\t.attr('fill', 'white')\n\t\t\t.attr('fill-opacity', 0)\n\t\t\t.attr('x', 0)\n\t\t\t.attr('y', -this.coordyp1 - this.rulerheight)\n\t\t\t.attr('width', this.width)\n\t\t\t.on('mousedown', event => {\n\t\t\t\tthis.rulermousedown(event, this)\n\t\t\t\t\t.then(tmp => {\n\t\t\t\t\t\tconst [toofine, startpx, spanpx] = tmp\n\n\t\t\t\t\t\tif (this.toselecthlregion) {\n\t\t\t\t\t\t\tthis.busy = false\n\t\t\t\t\t\t\tdelete this.toselecthlregion\n\t\t\t\t\t\t\tconst [startidx, startpos] = this.pxoff2region(startpx)\n\t\t\t\t\t\t\tconst [stopidx, stoppos] = this.pxoff2region(startpx + spanpx)\n\t\t\t\t\t\t\tconst chr = this.rglst[startidx].chr\n\t\t\t\t\t\t\tif (chr == this.rglst[stopidx].chr) {\n\t\t\t\t\t\t\t\tthis.addhlregion(chr, Math.min(startpos, stoppos), Math.max(startpos, stoppos))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// zoom in\n\t\t\t\t\t\tif (toofine) {\n\t\t\t\t\t\t\t// too fine won't zoom in\n\t\t\t\t\t\t\tthis.busy = false\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.zoomedin = true\n\t\t\t\t\t\tthis.zoom2px(startpx, startpx + spanpx)\n\t\t\t\t\t})\n\t\t\t\t\t.catch(e => {\n\t\t\t\t\t\tif (e == 'busy') return\n\t\t\t\t\t\tthis.error(e.message)\n\t\t\t\t\t\tconsole.log(e.stack)\n\t\t\t\t\t})\n\t\t\t})\n\n\t\t// sub panels\n\t\t// contain master instruction of each subpanel (chr/start/stop/width), to be propagated to .subpanels[] of each track\n\t\tthis.subpanels = []\n\t\tif (arg.subpanels) {\n\t\t\tthis.subpanels = arg.subpanels\n\t\t\tfor (const [idx, p] of this.subpanels.entries()) {\n\t\t\t\tp.exonsf = p.width / (p.stop - p.start)\n\t\t\t\tthis.init_coord_subpanel(p)\n\t\t\t}\n\t\t}\n\n\t\tthis.updateruler()\n\n\t\tif (arg.hlregions) {\n\t\t\tfor (const r of arg.hlregions) {\n\t\t\t\tthis.addhlregion(r.chr, r.start, r.stop, r.color)\n\t\t\t}\n\t\t}\n\n\t\tif (arg.tklst) {\n\t\t\tfor (const _tk of arg.tklst) {\n\t\t\t\t// validate input track!!!\n\n\t\t\t\tif (!_tk.type) {\n\t\t\t\t\tthis.error('missing type in a track')\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tlet pre_tk = _tk // for vcf track, the 'pre_tk' object will be replaced by dstk\n\n\t\t\t\tconst hidden = pre_tk.hidden\n\t\t\t\tdelete pre_tk.hidden\n\n\t\t\t\tif (pre_tk.type == 'vcf') {\n\t\t\t\t\t// convert vcf to dstk, this is duplicated in tk.menu\n\t\t\t\t\tconst [err, dstk] = vcf2dstk(pre_tk)\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tthis.error('VCF track error: ' + err)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tpre_tk = dstk\n\t\t\t\t\tpre_tk.iscustom = _tk.iscustom\n\t\t\t\t}\n\n\t\t\t\tif (pre_tk.iscustom) {\n\t\t\t\t\t// should register\n\t\t\t\t\tif (!client.tkexists(pre_tk, this.genome.tracks)) {\n\t\t\t\t\t\t// this is a new custom track\n\t\t\t\t\t\tpre_tk.tkid = Math.random().toString() // important\n\t\t\t\t\t\tthis.genome.tracks.push(pre_tk)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!hidden) {\n\t\t\t\t\tthis.block_addtk_template(pre_tk)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (arg.nativetracks) {\n\t\t\t// add selected native tracks\n\n\t\t\tconst tklookup = new Map()\n\t\t\tif (this.genome.tracks) {\n\t\t\t\tfor (const t of this.genome.tracks) {\n\t\t\t\t\tif (t.iscustom) continue\n\t\t\t\t\ttklookup.set(t.name.toLowerCase(), t)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet lst = []\n\t\t\tif (Array.isArray(arg.nativetracks)) {\n\t\t\t\tfor (const nt of arg.nativetracks) {\n\t\t\t\t\tif (typeof nt == 'string') {\n\t\t\t\t\t\t// string for track name\n\t\t\t\t\t\tconst t2 = tklookup.get(nt.toLowerCase())\n\t\t\t\t\t\tif (t2) {\n\t\t\t\t\t\t\tlst.push(t2)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// object with custom settings\n\t\t\t\t\t\tif (!nt.name) continue\n\t\t\t\t\t\tif (typeof nt.name != 'string') continue\n\t\t\t\t\t\tconst t2 = tklookup.get(nt.name.toLowerCase())\n\t\t\t\t\t\tif (t2) {\n\t\t\t\t\t\t\t// remember custom setting in registry object\n\t\t\t\t\t\t\tfor (const k in nt) {\n\t\t\t\t\t\t\t\tif (k == 'name') continue\n\t\t\t\t\t\t\t\tt2[k] = nt[k]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlst.push(t2)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (typeof arg.nativetracks == 'string') {\n\t\t\t\tfor (const n of arg.nativetracks.split(',')) {\n\t\t\t\t\tconst t = tklookup.get(n.toLowerCase())\n\t\t\t\t\tif (t) {\n\t\t\t\t\t\tlst.push(t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.error('invalid value for nativetracks')\n\t\t\t}\n\n\t\t\tfor (const t of lst) {\n\t\t\t\t// since arg.tklst[] may contain native track (gene), must check\n\t\t\t\tif (!client.tkexists(t, this.tklst)) {\n\t\t\t\t\tthis.block_addtk_template(t)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/* quick fix: \n\t\twhen there are bam tracks, these tracks usually are taller than a screen\n\t\tmaking it hard to compare to gene tracks lying on the bottom\n\t\tmove the native gene track to the top\n\t\tusually that is the only bedj track in the list\n\t\t*/\n\t\tif (this.tklst.find(i => i.type == client.tkt.bam)) {\n\t\t\tconst bedtkidx = this.tklst.findIndex(i => i.type == client.tkt.bedj)\n\t\t\tif (bedtkidx != -1) {\n\t\t\t\tconst t = this.tklst[bedtkidx]\n\t\t\t\tthis.tklst.splice(bedtkidx, 1)\n\t\t\t\tthis.tklst.unshift(t)\n\t\t\t}\n\t\t}\n\n\t\tthis.tk_load_all()\n\n\t\tif (arg.mset) {\n\t\t\t// not in use\n\t\t\t// precompiled sets of mutations\n\t\t\tfor (const set of arg.mset) {\n\t\t\t\tconst ds = {\n\t\t\t\t\tiscustom: true,\n\t\t\t\t\tmlst: set.mlst,\n\t\t\t\t\tlabel: set.name\n\t\t\t\t}\n\t\t\t\tthis.ownds[set.name] = ds\n\t\t\t\tconst tk = this.block_addtk_template({\n\t\t\t\t\ttype: client.tkt.ds,\n\t\t\t\t\tds: ds\n\t\t\t\t})\n\t\t\t\tblockds.dstkload(tk, this)\n\t\t\t}\n\t\t}\n\n\t\t/*** old official datasets ***/\n\t\tif (arg.datasetlst) {\n\t\t\tfor (const n of arg.datasetlst) {\n\t\t\t\tlet ds = null\n\t\t\t\tfor (const a in this.genome.datasets) {\n\t\t\t\t\tif (a.toUpperCase() == n.toUpperCase()) {\n\t\t\t\t\t\tds = this.genome.datasets[a]\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!ds) {\n\t\t\t\t\tthis.error('Invalid dataset to load: ' + n)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (ds.isMds3) {\n\t\t\t\t\t// extends the old \"dataset\" parameter to support mds3\n\t\t\t\t\tconst tk = this.block_addtk_template({ type: client.tkt.mds3, dslabel: n })\n\t\t\t\t\tthis.tk_load(tk)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst tk = this.block_addtk_template({ type: client.tkt.ds, ds })\n\t\t\t\tif (arg.hlaachange) {\n\t\t\t\t\ttk.hlaachange = arg.hlaachange\n\t\t\t\t}\n\t\t\t\tif (arg.hlvariants) {\n\t\t\t\t\ttk.hlvariants = arg.hlvariants\n\t\t\t\t}\n\t\t\t\ttk.legacyDsFilter = arg.legacyDsFilter // quick fix\n\t\t\t\tblockds.dstkload(tk, this)\n\t\t\t}\n\t\t}\n\n\t\t/*** new mds datasets ***/\n\n\t\tlet hasMdsDatasets = false\n\n\t\tif (arg.datasetqueries) {\n\t\t\tif (!Array.isArray(arg.datasetqueries)) {\n\t\t\t\tthis.error('datasetqueries should be array')\n\t\t\t} else {\n\t\t\t\targ.datasetqueries.forEach(q => {\n\t\t\t\t\tif (!q.dataset) return this.error('datasetqueries error: .dataset missing from a query')\n\t\t\t\t\tif (!q.querykey) return this.error('datasetqueries error: .querykey missing from a query')\n\t\t\t\t\tconst ds = this.genome.datasets[q.dataset]\n\t\t\t\t\tif (!ds) return this.error('invalid dataset name: ' + q.dataset)\n\t\t\t\t\tif (!ds.isMds) return this.error('query not supported in dataset: ' + q.dataset)\n\t\t\t\t\tthis.mds_load_query_bykey(ds, q)\n\n\t\t\t\t\thasMdsDatasets = true\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// help set block.busy off when there is no track to load\n\t\tthis.ifbusy()\n\n\t\tif (this.tklst.length == 0 && !hasMdsDatasets) {\n\t\t\t/* show this error when there's no tracks to be loaded\n\t\t\tsince the client-side dataset are async loaded, things from datasetqueries\n\t\t\tis not awaited (cannot do in Construtor)\n\t\t\tthus the mds track obj will not be added to this.tklst\n\t\t\tcausing the empty tklst array\n\t\t\t*/\n\t\t\tthis.error(\n\t\t\t\t'No tracks specified. If you don\\'t expect to see this, delete the \"block:true\" from runproteinpaint() argument.'\n\t\t\t)\n\t\t}\n\t}\n\t/****** end of constructor ***/\n\n\tasync make_legend_img(arg, div) {\n\t\t/*\n\t\tadd a legend showing a server-side image, either for a track or for this block\n\t\targ: {}\n\t\t.file: tp path to an image file\n\t\t.height: optional icon height\n\t\t*/\n\t\tconst data = await dofetch3('img?file=' + arg.file)\n\t\tif (data.error) {\n\t\t\tdiv.text(data.error)\n\t\t\treturn\n\t\t}\n\t\tlet fold = true\n\t\tconst img = div.append('img').attr('class', 'sja_clbb').attr('src', data.src).style('height', '80px')\n\t\timg.on('click', () => {\n\t\t\tif (fold) {\n\t\t\t\tfold = false\n\t\t\t\timg.transition().style('height', arg.height ? arg.height + 'px' : 'auto')\n\t\t\t} else {\n\t\t\t\tfold = true\n\t\t\t\timg.transition().style('height', '80px')\n\t\t\t}\n\t\t})\n\t}\n\n\tregioncumlen(ridx, notincludethisregion) {\n\t\t// region bp length up to the view start of a given region\n\t\tlet c = 0\n\t\tif (!notincludethisregion) {\n\t\t\tconst r = this.rglst[ridx]\n\t\t\tc = r.reverse ? r.bstop - r.stop : r.start - r.bstart\n\t\t}\n\t\tfor (let i = 0; i < ridx; i++) {\n\t\t\tconst r = this.rglst[i]\n\t\t\t// FIXME include/exclude regulatory region?\n\t\t\t/*\n\t\tif(this.usegm && r.chr!=this.usegm.chr) {\n\t\t\tcontinue\n\t\t}\n\t\t*/\n\t\t\tc += r.bstop - r.bstart\n\t\t}\n\t\treturn c\n\t}\n\n\tblocksetw() {\n\t\t// call when any of the width has been udpated\n\n\t\tconst width =\n\t\t\tthis.leftheadw +\n\t\t\tthis.lpad +\n\t\t\tthis.width +\n\t\t\tthis.subpanels.reduce((i, j) => i + j.width + j.leftpad, 0) +\n\t\t\tthis.rpad +\n\t\t\tthis.rightheadw\n\n\t\tthis.svg.attr('width', width)\n\n\t\tthis.coord.gcoordsubpanels.transition().attr('transform', 'translate(' + this.width + ',0)')\n\t\tlet x = 0\n\t\tfor (const p of this.subpanels) {\n\t\t\t// coord ruler of each sub panel\n\t\t\tp.coord.g0.transition().attr('transform', 'translate(' + (x + p.leftpad) + ',0)') // shift the immobile ruler holder to correct position\n\t\t\tx += p.leftpad + p.width\n\t\t\tp.coord.grab.attr('width', p.width)\n\t\t\tp.subpanelbgrect.attr('width', p.width)\n\t\t}\n\n\t\tfor (const t of this.tklst) {\n\t\t\tif (t.hidden) continue\n\t\t\t// re position subpanel group holder for each track\n\t\t\tt.gtksubpanels.transition().attr('transform', 'translate(' + (this.leftheadw + this.lpad + this.width) + ',0)')\n\n\t\t\t// reposition each subpanel\n\t\t\tlet x = 0\n\t\t\tfor (const p of t.subpanels) {\n\t\t\t\tp.gtksubpanel.transition().attr('transform', 'translate(' + (x + p.leftpad) + ',0)')\n\t\t\t\tx += p.leftpad + p.width\n\t\t\t}\n\n\t\t\t// re position g right\n\t\t\tt.gright.transition().attr('transform', 'translate(' + (width - this.rightheadw) + ',0)')\n\t\t}\n\n\t\tif (this.resizewidthbutton) {\n\t\t\t// re position of drag-resize button\n\t\t\tthis.resizewidthbutton.style('right', this.rpad + this.rightheadw + 'px')\n\t\t}\n\t}\n\n\t/******* __ruler ****/\n\n\tupdateruler() {\n\t\t/*\n\tcall this when main block view range changes\n\tworks for genomic mode and gm modes\n\n\ton the block it's called coord not ruler\n\t*/\n\n\t\tthis.coord.g.attr('transform', 'translate(0,0)')\n\t\tthis.coord.grab.attr('width', this.width)\n\t\tthis.blocksetw()\n\n\t\tif (this.coord.input && this.startidx == this.stopidx) {\n\t\t\t// view range is inside single region\n\t\t\tconst r = this.rglst[this.startidx]\n\t\t\t// must show 1-based coord in <input>. this will allow to show exactly what user types in e.g. chr1:10000-20000 rather than 9999-19999\n\t\t\tthis.coord.input.property('value', `${r.chr}:${r.start + 1}-${r.stop + 1}`)\n\t\t\tthis.coordwidthsays.text(common.bplen(r.stop - r.start))\n\t\t}\n\n\t\t// reset view start/stop\n\t\tfor (let i = this.startidx; i <= this.stopidx; i++) {\n\t\t\tconst r = this.rglst[i]\n\t\t\tif (i != this.startidx) {\n\t\t\t\tif (r.reverse) {\n\t\t\t\t\tr.stop = r.bstop\n\t\t\t\t} else {\n\t\t\t\t\tr.start = r.bstart\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (i != this.stopidx) {\n\t\t\t\tif (r.reverse) {\n\t\t\t\t\tr.start = r.bstart\n\t\t\t\t} else {\n\t\t\t\t\tr.stop = r.bstop\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/*\n\treset .exonsf, pixel per bp\n\texonlen will be used later\n\t*/\n\t\tlet exonlen = 0\n\t\tfor (let i = this.startidx; i <= this.stopidx; i++) {\n\t\t\texonlen += this.rglst[i].stop - this.rglst[i].start\n\t\t}\n\t\tthis.exonsf = (this.width - this.regionspace * (this.stopidx - this.startidx)) / exonlen\n\n\t\t// reset px width for regions in view range\n\t\tfor (let i = this.startidx; i <= this.stopidx; i++) {\n\t\t\tconst r = this.rglst[i]\n\t\t\tr.width = (r.stop - r.start) * this.exonsf\n\t\t}\n\n\t\tthis.update_ruler_height()\n\n\t\tthis.coord.grab.attr('height', this.coord.height)\n\t\tthis.coord.axesg.selectAll('*').remove()\n\n\t\tif (!this.gmmode || this.gmmode == client.gmmode.genomic) {\n\t\t\t/*\n\t\tin genomic mode\n\t\t*/\n\t\t\t{\n\t\t\t\tconst __g = this.coord.axesg.append('g').attr('transform', 'translate(0,0)')\n\t\t\t\tthis.region_makeruler(__g)\n\t\t\t}\n\t\t\tfor (let i = this.startidx; i <= this.stopidx; i++) {\n\t\t\t\tlet x = 0\n\t\t\t\tfor (let j = this.startidx; j < i; j++) {\n\t\t\t\t\tx += this.rglst[j].width + this.regionspace\n\t\t\t\t}\n\t\t\t\tconst r = this.rglst[i]\n\n\t\t\t\tif (r.stop - r.start <= r.width) {\n\t\t\t\t\tif (this.usegm && this.gmmode != client.gmmode.genomic) {\n\t\t\t\t\t\t// wont show sequence\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tconst __g = this.coord.axesg.append('g').attr('transform', 'translate(' + x + ',' + this.coordyp2 + ')')\n\t\t\t\t\tthis.getntsequence4ruler(r, __g)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t/*\n\t\tnot in genomic mode\n\t\tstill a single ruler but for diferent coordinate (rna/protein)\n\t\t*/\n\t\t\tif (this.gmmode == client.gmmode.exononly || this.gmmode == client.gmmode.protein) {\n\t\t\t\t/*\n\t\t\tcontinuous scale\n\t\t\t*/\n\t\t\t\tconst rna = this.gmmode == client.gmmode.exononly\n\t\t\t\tif (!this.hidegenecontrol) {\n\t\t\t\t\tthis.coord.name.text(rna ? 'RNA bp len' : 'Protein length')\n\t\t\t\t}\n\t\t\t\tlet r = this.rglst[this.startidx]\n\t\t\t\tconst exoncumbp = this.regioncumlen(this.startidx)\n\t\t\t\tconst scale = scaleLinear()\n\t\t\t\t\t.domain(\n\t\t\t\t\t\trna\n\t\t\t\t\t\t\t? [exoncumbp, exoncumbp + exonlen]\n\t\t\t\t\t\t\t: [Math.floor(exoncumbp / 3) + 1, Math.floor((exoncumbp + exonlen) / 3) + 1]\n\t\t\t\t\t)\n\t\t\t\t\t.range([0, this.width])\n\t\t\t\tconst axis = axisTop().scale(scale).tickFormat(d3format('d'))\n\t\t\t\tconst __g = this.coord.axesg.append('g').attr('transform', 'translate(0,0)')\n\t\t\t\taxisstyle({\n\t\t\t\t\taxis: __g.call(axis),\n\t\t\t\t\tcolor: 'black',\n\t\t\t\t\tshowline: true\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\t/*\n\t\t\tjoined segments\n\t\t\t*/\n\t\t\t\tconst domain = [],\n\t\t\t\t\trange = []\n\t\t\t\tlet tickformat\n\t\t\t\tif (this.gmmode == client.gmmode.splicingrna) {\n\t\t\t\t\tif (!this.hidegenecontrol) {\n\t\t\t\t\t\tthis.coord.name.text('RNA bp len')\n\t\t\t\t\t}\n\t\t\t\t\tlet exonbp = this.regioncumlen(this.startidx)\n\t\t\t\t\tlet x = 0\n\t\t\t\t\tfor (let i = this.startidx; i <= this.stopidx; i++) {\n\t\t\t\t\t\tconst r = this.rglst[i]\n\t\t\t\t\t\tdomain.push(exonbp)\n\t\t\t\t\t\trange.push(x)\n\t\t\t\t\t\texonbp += r.stop - r.start\n\t\t\t\t\t\tdomain.push(exonbp)\n\t\t\t\t\t\trange.push(x + r.width)\n\t\t\t\t\t\tx += r.width + this.regionspace\n\t\t\t\t\t}\n\t\t\t\t\ttickformat = d3format(',d')\n\t\t\t\t} else if (this.gmmode == client.gmmode.gmsum) {\n\t\t\t\t\tif (!this.hidegenecontrol) {\n\t\t\t\t\t\tthis.coord.name.text('Genomic')\n\t\t\t\t\t}\n\t\t\t\t\tlet x = 0\n\t\t\t\t\tfor (let i = this.startidx; i <= this.stopidx; i++) {\n\t\t\t\t\t\tconst r = this.rglst[i]\n\t\t\t\t\t\tdomain.push(r.reverse ? r.stop : r.start)\n\t\t\t\t\t\trange.push(x)\n\t\t\t\t\t\tdomain.push(r.reverse ? r.start : r.stop)\n\t\t\t\t\t\trange.push(x + r.width)\n\t\t\t\t\t\tx += r.width + this.regionspace\n\t\t\t\t\t}\n\t\t\t\t\ttickformat = d3format(',d')\n\t\t\t\t} else {\n\t\t\t\t\tthis.error('unknown gmmode for making single ruler: ' + this.gmmode)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst scale = scaleLinear().domain(domain).range(range)\n\t\t\t\tconst axis = axisTop().scale(scale).tickFormat(tickformat)\n\t\t\t\tconst __g = this.coord.axesg.append('g').attr('transform', 'translate(0,0)')\n\t\t\t\taxisstyle({\n\t\t\t\t\taxis: __g.call(axis),\n\t\t\t\t\tcolor: 'black',\n\t\t\t\t\tshowline: true\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tconst noout = this.nozoomout()\n\t\tthis.ctrl.zobutt1.attr('disabled', noout ? 'true' : null)\n\t\tthis.ctrl.zobutt2.attr('disabled', noout ? 'true' : null)\n\t\tthis.ctrl.zobutt3.attr('disabled', noout ? 'true' : null)\n\t\tthis.ctrl.zinbutt.attr('disabled', this.exonsf >= ntpxwidth ? 1 : null)\n\t}\n\n\tupdate_ruler_height() {\n\t\t// set coord.height\n\t\tlet atbplevel = false // if main block or any sub panel is at bp level\n\t\tif (this.gmmode && this.gmmode != client.gmmode.genomic) {\n\t\t\t// showing protein, do not apply bplevel\n\t\t} else {\n\t\t\tfor (let i = this.startidx; i <= this.stopidx; i++) {\n\t\t\t\tconst r = this.rglst[i]\n\t\t\t\tif (r.stop - r.start <= r.width) atbplevel = true\n\t\t\t}\n\t\t}\n\t\tfor (const p of this.subpanels) {\n\t\t\tif (p.stop - p.start <= p.width) atbplevel = true\n\t\t}\n\n\t\tthis.coord.height = this.coordyp1 + this.rulerheight + this.coordyp2 + (atbplevel ? baseheight + 2 : 0)\n\t}\n\n\tasync getntsequence4ruler(r, g) {\n\t\tr.busy = true // assessed by ifbusy()\n\n\t\ttry {\n\t\t\tconst data = await dofetch3('ntseq', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tgenome: this.genome.name,\n\t\t\t\t\tcoord: r.chr + ':' + (r.start + 1) + '-' + r.stop\n\t\t\t\t})\n\t\t\t})\n\t\t\tg.selectAll('*').remove()\n\t\t\tif (data.error) throw data.error\n\n\t\t\tconst basewidth = r.width / data.seq.length\n\t\t\t// tentative nt font size\n\t\t\tlet _fs = Math.min(this.rulerheight, basewidth / client.textlensf)\n\n\t\t\tif (_fs > 6) {\n\t\t\t\t// show nt\n\t\t\t\tfor (let i = 0; i < data.seq.length; i++) {\n\t\t\t\t\tlet nt = data.seq[r.reverse ? data.seq.length - 1 - i : i]\n\t\t\t\t\tif (r.reverse) {\n\t\t\t\t\t\tnt = common.basecompliment(nt)\n\t\t\t\t\t}\n\t\t\t\t\tg.append('text')\n\t\t\t\t\t\t.text(nt)\n\t\t\t\t\t\t.attr('font-family', 'Courier')\n\t\t\t\t\t\t.attr('font-size', _fs)\n\t\t\t\t\t\t.attr('dominant-baseline', 'hanging')\n\t\t\t\t\t\t.attr('x', basewidth * i + basewidth / 2) //+this.exonsf/2\n\t\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// no show nt\n\t\t\t\t_fs = 0\n\t\t\t}\n\t\t\tfor (let i = 0; i < data.seq.length; i++) {\n\t\t\t\tlet nt = data.seq[r.reverse ? data.seq.length - 1 - i : i]\n\t\t\t\tif (r.reverse) {\n\t\t\t\t\tnt = common.basecompliment(nt)\n\t\t\t\t}\n\t\t\t\tg.append('rect')\n\t\t\t\t\t.attr('x', i * basewidth)\n\t\t\t\t\t.attr('y', Math.min(baseheight - 2, _fs))\n\t\t\t\t\t.attr('width', basewidth)\n\t\t\t\t\t.attr('height', Math.max(2, baseheight - _fs))\n\t\t\t\t\t.attr('fill', common.basecolor[nt.toUpperCase()] || basecolorunknown)\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tg.append('text').text(e.message || e)\n\t\t\tif (e.stack) console.log(e.stack)\n\t\t}\n\t\tr.busy = false\n\t\tthis.ifbusy()\n\t}\n\n\tnozoomout() {\n\t\tlet noout = false\n\t\tconst r1 = this.rglst[this.startidx],\n\t\t\tr2 = this.rglst[this.stopidx]\n\t\tif (this.startidx == 0 && this.stopidx == this.rglst.length - 1) {\n\t\t\tlet r1over = false,\n\t\t\t\tr2over = false\n\t\t\tconst r1 = this.rglst[this.startidx]\n\t\t\tif (r1.reverse ? r1.stop >= r1.bstop : r1.start <= r1.bstart) {\n\t\t\t\tconst r2 = this.rglst[this.stopidx]\n\t\t\t\tif (r2.reverse ? r2.start <= r2.bstart : r2.stop >= r2.bstop) {\n\t\t\t\t\tnoout = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn noout\n\t}\n\n\tregion_makeruler(g) {\n\t\t/*\n\tgenomic only!\n\tassumed that the view range is in one continuous region\n\t*/\n\n\t\tif (this.usegm && this.gmmode != client.gmmode.genomic) return\n\t\tconst rulerg = g.append('g')\n\t\tif (!this.hidegenecontrol) {\n\t\t\tthis.coord.name.text('Genomic')\n\t\t}\n\t\t// genomic\n\t\t// but still can be multi-region so need to render ruler for each region\n\t\t// 0-based to 1-based\n\t\tconst domain = [],\n\t\t\trange = []\n\t\tlet x = 0\n\t\tfor (let i = this.startidx; i <= this.stopidx; i++) {\n\t\t\tconst r = this.rglst[i]\n\n\t\t\tif (r.reverse) {\n\t\t\t\tdomain.push(r.stop)\n\t\t\t\tdomain.push(r.start + 1) // this adjustment is needed for showing rulers for reversed and non-reversed regions\n\t\t\t} else {\n\t\t\t\tdomain.push(r.start + 1)\n\t\t\t\tdomain.push(r.stop)\n\t\t\t}\n\n\t\t\trange.push(x + this.exonsf / 2) // ADJUST shift half nt px width to right\n\n\t\t\trange.push(x + r.width - this.exonsf / 2) // ADJUST shift half nt px width to left: critical for ruler to appear good when in bp resolution\n\n\t\t\tx += r.width + this.exonsf / 2\n\t\t}\n\n\t\t// measure coordinate text width to decide how many ticks to use\n\t\tlet maxticknumber\n\t\t{\n\t\t\tconst pos = Math.max(this.rglst[this.startidx].stop, this.rglst[this.stopidx].stop)\n\t\t\tconst t = rulerg\n\t\t\t\t.append('text')\n\t\t\t\t.text(pos > 1000000 ? d3format('s')(pos) : d3format(',d')(pos))\n\t\t\t\t.attr('font-size', this.rulerfontsize)\n\t\t\tmaxticknumber = Math.floor(this.width / (t.node().getBBox().width + 60))\n\t\t\tt.remove()\n\t\t}\n\n\t\tconst r = this.rglst[this.startidx]\n\n\t\tconst scale = scaleLinear().domain(domain).range(range)\n\t\tconst axis = axisTop().scale(scale).tickSize(this.rulerticksize).ticks(maxticknumber)\n\n\t\tif (r.stop - r.start > 1000000) {\n\t\t\taxis.tickFormat(d3format('s'))\n\t\t} else {\n\t\t\taxis.tickFormat(d3format(',d'))\n\t\t}\n\t\taxisstyle({\n\t\t\taxis: rulerg.call(axis),\n\t\t\tcolor: 'black',\n\t\t\tshowline: true,\n\t\t\tfontsize: this.rulerfontsize\n\t\t})\n\t}\n\n\trulermousedown(event, panel) {\n\t\t/*\n\tpane is either block, or a sub panel, will operate zoom-in on it\n\t*/\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (panel.busy) reject('busy')\n\n\t\t\tpanel.busy = true\n\t\t\tpanel.pannedpx = undefined\n\t\t\tpanel.resized = false\n\n\t\t\tconst size = 1\n\n\t\t\tconst istoofine = w => {\n\t\t\t\treturn w / panel.exonsf < panel.width / ntpxwidth\n\t\t\t}\n\t\t\tconst color = istoofine(size) ? '#ccc' : '#ff6633'\n\t\t\tconst body = d3select(document.body)\n\n\t\t\tconst svg = body\n\t\t\t\t.append('svg')\n\t\t\t\t.style('display', 'block')\n\t\t\t\t.style('position', 'absolute')\n\t\t\t\t.style('z-index', rulergrabzindex)\n\t\t\tconst rect = svg.append('rect').attr('fill', color).attr('fill-opacity', 0.2).attr('stroke', color)\n\t\t\tconst text0 = svg\n\t\t\t\t.append('text')\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t.attr('font-size', '18px')\n\t\t\t\t.attr('fill', 'none')\n\t\t\t\t.attr('stroke', 'white')\n\t\t\t\t.attr('stroke-width', 3)\n\t\t\tconst text = svg\n\t\t\t\t.append('text')\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t.attr('font-size', 18)\n\t\t\t\t.attr('fill', 'black')\n\n\t\t\tconst printwidth = w => {\n\t\t\t\tif (w <= 0) {\n\t\t\t\t\ttext.text('')\n\t\t\t\t\ttext0.text('')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst bpc = Math.ceil(w / panel.exonsf)\n\t\t\t\tconst t = d3format('.2s')(panel.gmmode == client.gmmode.protein ? Math.ceil(bpc / 3) : bpc)\n\t\t\t\ttext0.text(t)\n\t\t\t\ttext.text(t)\n\t\t\t}\n\n\t\t\t// not rotated\n\t\t\tlet xleft, ytop, blockheight, x0\n\t\t\t// rotated\n\t\t\tlet r_xleft, r_ytop, y0\n\n\t\t\tif (panel.rotated) {\n\t\t\t\tconst tmp = panel.coord.g0.node().getBoundingClientRect()\n\t\t\t\tr_xleft = tmp.left\n\t\t\t\tr_ytop = event.target.getBoundingClientRect().top\n\t\t\t\tblockheight = this.totalheight()\n\t\t\t\ty0 = event.clientY\n\t\t\t} else {\n\t\t\t\txleft = event.target.getBoundingClientRect().left\n\t\t\t\tconst tmp = panel.coord.g0.node().getBoundingClientRect()\n\t\t\t\tytop = tmp.top\n\t\t\t\tblockheight = this.totalheight()\n\t\t\t\tx0 = event.clientX\n\t\t\t}\n\n\t\t\tif (panel.rotated) {\n\t\t\t\tsvg\n\t\t\t\t\t.attr('width', blockheight)\n\t\t\t\t\t.attr('height', size)\n\t\t\t\t\t.style('left', window.pageXOffset + r_xleft + 'px')\n\t\t\t\t\t.style('top', window.pageYOffset + y0 + 'px')\n\t\t\t\trect.attr('width', blockheight).attr('height', size)\n\t\t\t\ttext0.attr('y', 0).attr('x', blockheight / 2)\n\t\t\t\ttext.attr('y', 0).attr('x', blockheight / 2)\n\t\t\t} else {\n\t\t\t\tsvg\n\t\t\t\t\t.attr('width', size)\n\t\t\t\t\t.attr('height', blockheight)\n\t\t\t\t\t.style('left', window.pageXOffset + x0 + 'px')\n\t\t\t\t\t.style('top', window.pageYOffset + ytop + 'px')\n\t\t\t\trect.attr('width', size).attr('height', blockheight)\n\t\t\t\ttext0.attr('x', 0).attr('y', blockheight / 2)\n\t\t\t\ttext.attr('x', 0).attr('y', blockheight / 2)\n\t\t\t}\n\n\t\t\tbody\n\t\t\t\t.on('mousemove', event => {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tif (panel.rotated) {\n\t\t\t\t\t\tconst my = event.clientY\n\t\t\t\t\t\tlet h = 0\n\t\t\t\t\t\tif (my > y0) {\n\t\t\t\t\t\t\th = size + Math.min(r_ytop + panel.width, my) - y0\n\t\t\t\t\t\t} else if (my < y0) {\n\t\t\t\t\t\t\th = size + y0 - Math.max(r_ytop, my)\n\t\t\t\t\t\t\tsvg.style('top', window.pageYOffset + y0 + Math.max(r_ytop, my) - y0 + 'px')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsvg.attr('height', h)\n\t\t\t\t\t\trect.attr('height', h)\n\t\t\t\t\t\tconst color = istoofine(h) ? '#ccc' : '#ff6633'\n\t\t\t\t\t\ttext0.attr('y', h / 2)\n\t\t\t\t\t\ttext.attr('y', h / 2)\n\t\t\t\t\t\trect.attr('fill', color).attr('stroke', color)\n\t\t\t\t\t\tprintwidth(h)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst mx = event.clientX\n\t\t\t\t\t\tlet w = 0\n\t\t\t\t\t\tif (mx > x0) {\n\t\t\t\t\t\t\tw = size + Math.min(xleft + panel.width, mx) - x0\n\t\t\t\t\t\t} else if (mx < x0) {\n\t\t\t\t\t\t\tw = size + x0 - Math.max(xleft, mx)\n\t\t\t\t\t\t\tsvg.style('left', window.pageXOffset + x0 + Math.max(xleft, mx) - x0 + 'px')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsvg.attr('width', w)\n\t\t\t\t\t\trect.attr('width', w)\n\t\t\t\t\t\tconst color = istoofine(w) ? '#ccc' : '#ff6633'\n\t\t\t\t\t\ttext0.attr('x', w / 2)\n\t\t\t\t\t\ttext.attr('x', w / 2)\n\t\t\t\t\t\trect.attr('fill', color).attr('stroke', color)\n\t\t\t\t\t\tprintwidth(w)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('mouseup', () => {\n\t\t\t\t\tlet startpx, // start and span in pixel, over the region to zoom into\n\t\t\t\t\t\tspanpx\n\n\t\t\t\t\tif (panel.rotated) {\n\t\t\t\t\t\tconst h = Number.parseInt(svg.attr('height'))\n\t\t\t\t\t\t/*\n\t\t\t\ttwo ways of rotation\n\t\t\t\tnose point up or down\n\t\t\t\tfor the moment it's pointing down only\n\t\t\t\tFIXME to support pointing up\n\t\t\t\t*/\n\t\t\t\t\t\tstartpx = panel.width - (h + Number.parseInt(svg.style('top')) - r_ytop - window.pageYOffset)\n\t\t\t\t\t\tspanpx = h\n\t\t\t\t\t} else {\n\t\t\t\t\t\tspanpx = Number.parseInt(svg.attr('width'))\n\t\t\t\t\t\tstartpx = Number.parseInt(svg.style('left')) - xleft - window.pageXOffset\n\t\t\t\t\t}\n\t\t\t\t\tsvg.remove()\n\t\t\t\t\tbody.on('mousemove', null).on('mouseup', null)\n\n\t\t\t\t\tresolve([istoofine(spanpx), startpx, spanpx])\n\t\t\t\t})\n\t\t})\n\t}\n\n\t/******* __ruler ends ****/\n\n\thighlight_1basedcoordinate(s) {\n\t\tconst l = s.split(/[:-]/)\n\t\tif (l.length != 3) return\n\t\tconst start = Number.parseInt(l[1])\n\t\tconst stop = Number.parseInt(l[2])\n\t\tif (Number.isNaN(start) || Number.isNaN(stop)) {\n\t\t\treturn\n\t\t}\n\t\tthis.addhlregion(l[0], start - 1, stop - 1)\n\t}\n\n\taddhlregion(chr, start, stop, color) {\n\t\tconst t1 = this.seekcoord(chr, start)[0]\n\t\tif (!t1) {\n\t\t\treturn\n\t\t}\n\t\tconst t2 = this.seekcoord(chr, stop)[0]\n\t\tif (!t2) {\n\t\t\treturn\n\t\t}\n\n\t\tlet x1, x2\n\n\t\tif (t1.x > t2.x) {\n\t\t\t// region is reverse!!\n\t\t\tx1 = t2.x - this.exonsf / 2\n\t\t\tx2 = t1.x + this.exonsf / 2\n\t\t} else {\n\t\t\t// region is not reverse\n\t\t\tx1 = t1.x - this.exonsf / 2\n\t\t\tx2 = t2.x + this.exonsf / 2\n\t\t}\n\n\t\tconst hl = {\n\t\t\tchr: chr,\n\t\t\tstart: start,\n\t\t\tstop: stop,\n\t\t\tx: x1,\n\t\t\tcolor: color || hlregioncolor,\n\t\t\trect: this.hlregion.g\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('x', x1)\n\t\t\t\t.attr('y', 0)\n\t\t\t\t.attr('width', x2 - x1)\n\t\t\t\t.attr('fill', color || hlregioncolor)\n\t\t}\n\t\tthis.hlregion.lst.push(hl)\n\t\tthis.block_setheight()\n\t}\n\n\t/*\nreverseorient() {\n\tthis.coord.reverse=!this.coord.reverse\n\tthis.ctrl.revbutt.html(this.coord.reverse ? 'Reverse «' : 'Forward »')\n\tthis.block_coord_updated(false)\n}\n*/\n\n\tpxoff2region(px) {\n\t\t// genomic\n\t\tlet ridx = this.startidx\n\t\tlet r = this.rglst[ridx]\n\t\tif (px == 0) return [ridx, r.reverse ? r.stop : r.start]\n\t\t// starts from .startidx/begin\n\t\tconst px0 = px\n\t\tif (px > 0) {\n\t\t\t// to right\n\t\t\twhile (1) {\n\t\t\t\tif (ridx >= this.rglst.length) {\n\t\t\t\t\t//this.error('right seek error: '+px0)\n\t\t\t\t\tconst r = this.rglst[this.rglst.length - 1]\n\t\t\t\t\treturn [this.rglst.length - 1, r.reverse ? r.bstart : r.bstop]\n\t\t\t\t}\n\t\t\t\tconst r = this.rglst[ridx]\n\t\t\t\tlet availablepx\n\t\t\t\tif (r.reverse) {\n\t\t\t\t\tconst lookstart = ridx >= this.startidx && ridx <= this.stopidx ? r.stop : r.bstop\n\t\t\t\t\tavailablepx = (lookstart - r.bstart) * this.exonsf\n\t\t\t\t\tif (availablepx + this.regionspace >= px) {\n\t\t\t\t\t\treturn [ridx, lookstart - Math.floor(px / this.exonsf)]\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst lookstart = ridx >= this.startidx && ridx <= this.stopidx ? r.start : r.bstart\n\t\t\t\t\tavailablepx = (r.bstop - lookstart) * this.exonsf\n\t\t\t\t\tif (availablepx + this.regionspace >= px) {\n\t\t\t\t\t\treturn [ridx, lookstart + Math.floor(px / this.exonsf)]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpx -= availablepx + this.regionspace\n\t\t\t\tridx++\n\t\t\t}\n\t\t}\n\t\t// to left\n\t\tpx = -px\n\t\t// first, chew .startidx\n\t\tr = this.rglst[this.startidx]\n\t\tif (r.reverse) {\n\t\t\tconst availablepx = (r.bstop - r.stop) * this.exonsf\n\t\t\tif (availablepx + this.regionspace >= px) {\n\t\t\t\treturn [ridx, r.stop + Math.floor(px / this.exonsf)]\n\t\t\t}\n\t\t} else {\n\t\t\tconst availablepx = (r.start - r.bstart) * this.exonsf\n\t\t\tif (availablepx + this.regionspace >= px) {\n\t\t\t\treturn [ridx, r.start - Math.floor(px / this.exonsf)]\n\t\t\t}\n\t\t}\n\t\t// keep chewing\n\t\tridx--\n\t\twhile (1) {\n\t\t\tif (ridx < 0) {\n\t\t\t\t//this.error('left seek error: '+px0)\n\t\t\t\tconst r = this.rglst[0]\n\t\t\t\treturn [0, r.reverse ? r.bstop : r.bstart]\n\t\t\t}\n\t\t\tconst r = this.rglst[ridx]\n\t\t\tconst availablepx = (r.bstop - r.bstart) * this.exonsf\n\t\t\tif (availablepx + this.regionspace >= px) {\n\t\t\t\tif (r.reverse) return [ridx, r.bstart + Math.floor(px / this.exonsf)]\n\t\t\t\treturn [ridx, r.bstop - Math.floor(px / this.exonsf)]\n\t\t\t}\n\t\t\tpx -= availablepx + this.regionspace\n\t\t\tridx--\n\t\t}\n\t}\n\n\tzoomblock(fold, zoomout) {\n\t\tif (this.busy) return\n\t\tthis.pannedpx = undefined\n\t\tthis.resized = false\n\t\tlet px1, px2\n\t\tif (zoomout) {\n\t\t\tthis.zoomedin = false\n\t\t\tconst span = Math.floor((this.width * (fold - 1)) / 2)\n\t\t\tpx1 = -span\n\t\t\tpx2 = this.width + span\n\t\t} else {\n\t\t\tthis.zoomedin = true\n\t\t\tconst span = Math.max((this.width / ntpxwidth) * this.exonsf, this.width / fold)\n\t\t\tpx1 = Math.floor(this.width / 2 - span / 2)\n\t\t\tpx2 = Math.floor(this.width / 2 + span / 2)\n\t\t}\n\t\tthis.zoom2px(px1, px2)\n\t}\n\n\tzoom2px(px1, px2) {\n\t\tconst [startidx, startpos] = this.pxoff2region(px1)\n\t\tconst [stopidx, stoppos] = this.pxoff2region(px2)\n\t\tthis.startidx = startidx\n\t\tthis.stopidx = stopidx\n\t\tconst r1 = this.rglst[startidx]\n\t\tif (r1.reverse) {\n\t\t\tr1.stop = startpos\n\t\t} else {\n\t\t\tr1.start = startpos\n\t\t}\n\t\tconst r2 = this.rglst[stopidx]\n\t\tif (r2.reverse) {\n\t\t\tr2.start = stoppos\n\t\t} else {\n\t\t\tr2.stop = stoppos\n\t\t}\n\t\tthis.block_coord_updated()\n\t}\n\n\tblock_coord_updated(panned) {\n\t\tthis.busy = true\n\t\tthis.updateruler()\n\t\tthis.tk_load_all()\n\t\tif (this.tklst.length == 0) {\n\t\t\tthis.busy = false\n\t\t}\n\n\t\t// reposition hl regions\n\t\tlet blockh = this.coord.height\n\t\tfor (const t of this.tklst) {\n\t\t\tif (t.hidden) continue\n\t\t\tblockh += t.height\n\t\t}\n\n\t\tfor (const hl of this.hlregion.lst) {\n\t\t\tconst hit1 = this.seekcoord(hl.chr, hl.start)[0]\n\t\t\tconst hit2 = this.seekcoord(hl.chr, hl.stop)[0]\n\t\t\tif (!hit1 || !hit2) {\n\t\t\t\thl.rect.attr('width', 0)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst startx = Math.min(hit1.x, hit2.x) - this.exonsf / 2\n\t\t\tconst stopx = Math.max(hit1.x, hit2.x) + this.exonsf / 2\n\t\t\tif (startx >= this.width || stopx <= 0) {\n\t\t\t\thl.rect.attr('width', 0)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\thl.x = startx\n\t\t\thl.rect\n\t\t\t\t.attr('x', Math.max(0, startx))\n\t\t\t\t.attr('width', Math.max(2, Math.min(this.width, stopx) - Math.max(0, startx)))\n\t\t\t\t.attr('height', blockh)\n\t\t}\n\t\tif (this.onCoordinateChange) {\n\t\t\tthis.onCoordinateChange(this.rglst)\n\t\t}\n\t}\n\n\tasync jump_1basedcoordinate(s) {\n\t\t/*\n\tif input is coord string, should be 1-based!!\n\talso supports gene name and rsname\n\t*/\n\t\tif (this.busy) return\n\t\tthis.zoomedin = false\n\t\tthis.pannedpx = undefined\n\t\tthis.resized = false\n\n\t\tif (typeof s == 'string') {\n\t\t\tconst pos = coord.string2pos(s, this.genome)\n\t\t\tif (pos) {\n\t\t\t\tthis.rglst = [\n\t\t\t\t\t{\n\t\t\t\t\t\tchr: pos.chr,\n\t\t\t\t\t\tbstart: 0,\n\t\t\t\t\t\tbstop: pos.chrlen,\n\t\t\t\t\t\tstart: Math.max(0, pos.start - 1),\n\t\t\t\t\t\tstop: pos.stop - 1,\n\t\t\t\t\t\treverse: this.showreverse\n\t\t\t\t\t}\n\t\t\t\t]\n\n\t\t\t\tif (pos.actualposition && pos.actualposition.len <= 40) {\n\t\t\t\t\tthis.addhlregion(\n\t\t\t\t\t\tpos.chr,\n\t\t\t\t\t\tpos.actualposition.position - 1,\n\t\t\t\t\t\tpos.actualposition.position - 1 + pos.actualposition.len - 1\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tthis.startidx = this.stopidx = 0\n\t\t\t\tthis.block_coord_updated()\n\t\t\t\treturn\n\t\t\t}\n\t\t} else if (typeof s == 'object' && s.chr && Number.isInteger(s.start)) {\n\t\t\t// quick fix to avoid calling string2pos and zoom out to 400bp\n\t\t\tconst _chr = this.genome.chrlookup[s.chr.toUpperCase()]\n\t\t\tif (_chr) {\n\t\t\t\tlet start = s.start,\n\t\t\t\t\tstop = Number.isInteger(s.stop) ? s.stop : s.start\n\t\t\t\tconst actualstart = start,\n\t\t\t\t\tactualstop = stop\n\t\t\t\tconst minspan = Math.ceil(this.width / ntpxwidth) //200\n\t\t\t\tif (stop - start < minspan) {\n\t\t\t\t\tconst h = Math.ceil(minspan / 2)\n\t\t\t\t\tconst m = Math.floor((start + stop) / 2)\n\t\t\t\t\tstart = m - h\n\t\t\t\t\tstop = m + h\n\t\t\t\t}\n\t\t\t\tthis.rglst = [\n\t\t\t\t\t{\n\t\t\t\t\t\tchr: _chr.name,\n\t\t\t\t\t\tbstart: 0,\n\t\t\t\t\t\tbstop: _chr.len,\n\t\t\t\t\t\tstart: start - 1,\n\t\t\t\t\t\tstop: stop - 1,\n\t\t\t\t\t\treverse: this.showreverse\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t\tthis.startidx = this.stopidx = 0\n\t\t\t\tif (actualstop - actualstart < 40) {\n\t\t\t\t\tthis.addhlregion(s.chr, actualstart - 1, actualstop - 1)\n\t\t\t\t}\n\t\t\t\tthis.block_coord_updated()\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\tthis.error('Invalid chr: ' + s.chr)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\t// try\n\t\tawait this.block_jump_gene(s)\n\t}\n\n\tasync block_jump_gene(s) {\n\t\ttry {\n\t\t\tconst data = await dofetch3('genelookup', {\n\t\t\t\tbody: { genome: this.genome.name, input: s, deep: 1 }\n\t\t\t})\n\t\t\tif (data.error) throw data.error\n\t\t\tif (!data.gmlst || data.gmlst.length == 0) {\n\t\t\t\t// no gene match\n\t\t\t\tif (this.genome.hasSNP) {\n\t\t\t\t\tif (s.toLowerCase().startsWith('rs')) {\n\t\t\t\t\t\t// looks like a snp\n\t\t\t\t\t\tthis.block_jump_snp(s)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.inputerr('Not a gene or SNP: ' + s)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.inputerr('Unknown gene name: ' + s)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// \"s\" matches with a gene name\n\n\t\t\t// quick fix: update valid gene name to pgv\n\t\t\tfor (const t of this.tklst) {\n\t\t\t\tif (t.type == client.tkt.pgv) {\n\t\t\t\t\tt.genename = s\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// aggregate loci for all isoforms from data.gmlst[]\n\t\t\tconst locs = client.gmlst2loci(data.gmlst)\n\n\t\t\tif (locs.length == 1) {\n\t\t\t\t// all isoforms are on the same locus\n\t\t\t\tconst r = locs[0]\n\t\t\t\tconst e = coord.invalidcoord(this.genome, r.chr, r.start, r.stop)\n\t\t\t\tif (e) {\n\t\t\t\t\tthis.inputerr('this should not happen: gene error: ' + e)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.rglst = [\n\t\t\t\t\t{\n\t\t\t\t\t\tchr: r.chr,\n\t\t\t\t\t\tbstart: 0,\n\t\t\t\t\t\tbstop: this.genome.chrlookup[r.chr.toUpperCase()].len,\n\t\t\t\t\t\tstart: r.start,\n\t\t\t\t\t\tstop: r.stop,\n\t\t\t\t\t\treverse: this.showreverse\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t\tthis.startidx = this.stopidx = 0\n\t\t\t\tthis.block_coord_updated()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// isoforms are spread out on multiple locations\n\t\t\tthis.coord.inputtipshow()\n\t\t\tfor (const r of locs) {\n\t\t\t\tthis.coord.inputtip.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t.text(r.name + ' ' + r.chr + ':' + r.start + '-' + r.stop)\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tthis.coord.inputtip.hide()\n\t\t\t\t\t\tthis.rglst = [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tchr: r.chr,\n\t\t\t\t\t\t\t\tbstart: 0,\n\t\t\t\t\t\t\t\tbstop: this.genome.chrlookup[r.chr.toUpperCase()].len,\n\t\t\t\t\t\t\t\tstart: r.start,\n\t\t\t\t\t\t\t\tstop: r.stop,\n\t\t\t\t\t\t\t\treverse: this.showreverse\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t\tthis.startidx = this.stopidx = 0\n\t\t\t\t\t\tthis.block_coord_updated()\n\t\t\t\t\t})\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthis.inputerr(e.message || e)\n\t\t}\n\t}\n\n\tblock_jump_snp(s) {\n\t\tstring2snp(this.genome, s)\n\t\t\t.then(r => {\n\t\t\t\tconst span = Math.ceil(this.width / ntpxwidth)\n\t\t\t\tthis.rglst = [\n\t\t\t\t\t{\n\t\t\t\t\t\tchr: r.chr,\n\t\t\t\t\t\tbstart: 0,\n\t\t\t\t\t\tbstop: this.genome.chrlookup[r.chr.toUpperCase()].len,\n\t\t\t\t\t\tstart: Math.max(0, r.start - Math.ceil(span / 2)),\n\t\t\t\t\t\tstop: r.start + span,\n\t\t\t\t\t\treverse: this.showreverse\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t\tthis.startidx = this.stopidx = 0\n\t\t\t\tthis.addhlregion(r.chr, r.start, r.stop - 1)\n\t\t\t\tthis.block_coord_updated()\n\t\t\t})\n\t\t\t.catch(err => {\n\t\t\t\tthis.inputerr(s + ': not a gene or SNP')\n\t\t\t\tif (err.stack) console.log(err.stack)\n\t\t\t})\n\t}\n\n\tinputerr(msg) {\n\t\tthis.coord.inputtipshow()\n\t\tthis.coord.inputtip.d\n\t\t\t.append('div')\n\t\t\t// must not do .html(), msg is user-provided\n\t\t\t.text(msg)\n\t\t\t.style('border', 'solid 1px red')\n\t\t\t.style('padding', '10px 20px')\n\t}\n\n\tgenemenu() {\n\t\tfor (const tk of this.tklst) {\n\t\t\tif (tk.type == client.tkt.usegm) {\n\t\t\t\tif (tk.controller) {\n\t\t\t\t\t// hide gmtk controller\n\t\t\t\t\ttk.controller.paneoff()\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tconst gm = this.usegm\n\t\tif (!gm) {\n\t\t\tconsole.log('usegm missing!!')\n\t\t\treturn\n\t\t}\n\t\tthis.usegmtip.clear()\n\t\tconst menu = this.usegmtip.d\n\t\t// header\n\t\tconst sec1 = menu\n\t\t\t.append('div')\n\t\t\t.style('padding', '20px')\n\t\t\t.style('background-color', '#E6EEF5')\n\t\t\t.style('margin-bottom', '20px')\n\n\t\tconst description_div = sec1.append('div').style('width', '580px')\n\t\tif (!gm.description) {\n\t\t\tdescription_div.html(`${gm.name}: No description`)\n\t\t} else if (gm.description.length >= 120) {\n\t\t\t// Detect when the description is very long\n\t\t\tconst truncDescrip = gm.description.substring(0, 100)\n\t\t\tlet activeDesc = false\n\t\t\tdescription_div.html(`${gm.name}: <strong>${truncDescrip}</strong> ...`)\n\t\t\tconst a = sec1.append('a')\n\t\t\ta.text('Show More')\n\t\t\t\t// Add simple a tag. Should show and hide text on click\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tactiveDesc = !activeDesc\n\t\t\t\t\tdescription_div.html(\n\t\t\t\t\t\tactiveDesc == true\n\t\t\t\t\t\t\t? `${gm.name}: <strong>${gm.description}</strong>`\n\t\t\t\t\t\t\t: `${gm.name}: <strong>${truncDescrip}</strong> ...`\n\t\t\t\t\t)\n\t\t\t\t\ta.text(activeDesc == true ? 'Hide' : 'Show More')\n\t\t\t\t})\n\t\t} else {\n\t\t\tdescription_div.html(`${gm.name}: <strong>${gm.description}</strong>`)\n\t\t}\n\n\t\tconst p2 = sec1.append('div').style('margin-top', '10px')\n\n\t\tp2.append('span').text(gm.isoform).style('padding-right', '10px')\n\n\t\tp2.append('a')\n\t\t\t.attr('target', '_blank')\n\t\t\t.attr('href', 'https://www.ncbi.nlm.nih.gov/gene/?term=' + gm.isoform)\n\t\t\t.style('padding-right', '10px')\n\t\t\t.text('NCBI')\n\n\t\tp2.append('a')\n\t\t\t.attr('target', '_blank')\n\t\t\t.attr('href', 'https://genome.ucsc.edu/cgi-bin/hgTracks?db=' + this.genome.name + '&position=' + gm.isoform)\n\t\t\t.text('UCSC')\n\n\t\tp2.append('span')\n\t\t\t.style('padding-left', '30px')\n\t\t\t.html(\n\t\t\t\tgm.chr +\n\t\t\t\t\t':' +\n\t\t\t\t\t(gm.start + 1) +\n\t\t\t\t\t'-' +\n\t\t\t\t\tgm.stop +\n\t\t\t\t\t' <span style=\"font-size:.7em\">' +\n\t\t\t\t\t(gm.strand == '+' ? 'FORWARD' : 'REVERSE') +\n\t\t\t\t\t'</span>' +\n\t\t\t\t\t' <span style=\"color:#555\">' +\n\t\t\t\t\tcommon.bplen(gm.stop - gm.start) +\n\t\t\t\t\t'</span>'\n\t\t\t)\n\t\tconst sec2 = menu.append('div').style('margin', '20px 30px 40px 30px')\n\t\tsec2\n\t\t\t.append('div')\n\t\t\t.text('Switch display')\n\t\t\t.style('font-size', '1.5em')\n\t\t\t.style('color', '#555')\n\t\t\t.style('margin-bottom', '20px')\n\t\tthis.showgmmode4switch(sec2, true)\n\t\t// sec 3\n\t\tif (this.allgm.length > 1) {\n\t\t\tconst sec3 = menu\n\t\t\t\t.append('div')\n\t\t\t\t//.style('background-color','#F5F5F0')\n\t\t\t\t.style('padding', '20px 30px 40px 30px')\n\t\t\tsec3\n\t\t\t\t.append('div')\n\t\t\t\t.style('color', '#555')\n\t\t\t\t.style('font-size', '1.5em')\n\t\t\t\t.style('margin-bottom', '20px')\n\t\t\t\t.text('Switch isoform')\n\t\t\tthis.showisoform4switch(sec3, true)\n\t\t}\n\t\tthis.usegmtip.showunder(this.ctrl.namebutt.node())\n\t}\n\n\told_dshandle_new(dsname) {\n\t\t// for old official dataset, and mds3\n\t\t// won't add handle for either children or custom datasets\n\t\tlet ds = this.genome.datasets[dsname]\n\t\tif (!ds) {\n\t\t\tds = this.ownds[dsname]\n\t\t}\n\t\tif (!ds) {\n\t\t\tthis.error('unknown dsname ' + dsname)\n\t\t\treturn\n\t\t}\n\t\tconst box = this.ctrl.dshandleholder.append('div').attr('class', 'sjpp-dshandleholder')\n\t\tconst says = box\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_opaque8 sjpp-dslabel')\n\t\t\t.text(ds.label)\n\t\t\t.on('click', async () => {\n\t\t\t\tthis.pannedpx = undefined // important!\n\t\t\t\tthis.resized = false\n\t\t\t\tlet tk = this.tklst.find(t => {\n\t\t\t\t\tif (ds.isMds3) {\n\t\t\t\t\t\tif (t.type == client.tkt.mds3 && t.mds && t.mds.label == ds.label) return t\n\t\t\t\t\t} else if (t.type == client.tkt.ds && t.ds && t.ds.label == ds.label) {\n\t\t\t\t\t\treturn t\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tif (tk) {\n\t\t\t\t\tif (tk.hidden) {\n\t\t\t\t\t\ttk.hidden = false\n\t\t\t\t\t\tthis.tk_load(tk)\n\t\t\t\t\t\t//says.style('background-color','#ddd').style('color','black')\n\t\t\t\t\t\tthis.setllabel() // must do it here, not called in tk_load\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.tk_hide(tk)\n\t\t\t\t\t\t//says.style('background-color','#999').style('color','white')\n\t\t\t\t\t}\n\t\t\t\t\tthis.tkchangeaffectlegend(tk)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (ds.busy) return\n\t\t\t\tif (ds.isMds3) {\n\t\t\t\t\ttk = this.block_addtk_template({ type: client.tkt.mds3, dslabel: ds.label })\n\t\t\t\t\tthis.tk_load(tk)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// is legacy ds\n\t\t\t\tif (ds.legacyDsIsUninitiated) {\n\t\t\t\t\t/* only for legacy ds\n\t\t\t\t\tcan delete this step when migrated to mds3\n\t\t\t\t\t*/\n\t\t\t\t\tconst d = await dofetch3(`getDataset?genome=${this.genome.name}&dsname=${ds.label}`)\n\t\t\t\t\tif (d.error) throw 'invalid name'\n\t\t\t\t\tif (!d.ds) throw '.ds missing'\n\n\t\t\t\t\tObject.assign(ds, d.ds)\n\t\t\t\t\tconst _ = await import('./legacyDataset')\n\t\t\t\t\t_.validate_oldds(ds)\n\n\t\t\t\t\tdelete ds.legacyDsIsUninitiated\n\t\t\t\t}\n\n\t\t\t\ttk = this.block_addtk_template({ ds, type: client.tkt.ds })\n\t\t\t\tblockds.dstkload(tk, this)\n\t\t\t})\n\t\t\t.on('mouseover', event => {\n\t\t\t\tif (ds.iscustom) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (!ds.dsinfo) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.blocktip\n\t\t\t\t\t.showunder(event.target)\n\t\t\t\t\t.clear()\n\t\t\t\t\t.d.append('div')\n\t\t\t\t\t.style('font-size', '80%')\n\t\t\t\t\t.style('padding', '10px')\n\t\t\t\t\t.style('color', '#858585')\n\t\t\t\t\t.attr('class', 'sja_clb')\n\t\t\t\t\t.text('ABOUT')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tthis.blocktip.clear()\n\t\t\t\t\t\tclient.make_table_2col(this.blocktip.d, ds.dsinfo).style('padding', '10px')\n\t\t\t\t\t})\n\t\t\t})\n\t\tthis.ds2handle[dsname] = {\n\t\t\thandle: box,\n\t\t\thandlesays: says\n\t\t}\n\t}\n\n\tviewrangeabovelimit(span) {\n\t\tif (span == undefined) {\n\t\t\t// no upper limit was set\n\t\t\treturn false\n\t\t}\n\t\tlet len = 0\n\t\tfor (let i = this.startidx; i <= this.stopidx; i++) {\n\t\t\tconst r = this.rglst[i]\n\t\t\tlen += r.stop - r.start\n\t\t}\n\t\treturn len >= span\n\t}\n\n\tseekcoord(chr, pos) {\n\t\t/*\n\treturn px offset relative to view range start!!!\n\talso look at subpanels\n\n\tfind all hits\n\t*/\n\n\t\tpos += 0.5 // +.5 important!!!\n\n\t\tconst hits = []\n\t\tconst overgene = this.usegm && chr == this.usegm.chr && this.gmmode != client.gmmode.genomic\n\n\t\tfor (let i = 0; i < this.rglst.length; i++) {\n\t\t\tconst r = this.rglst[i]\n\t\t\tif (r.chr != chr) continue\n\t\t\tif (pos >= r.bstart && pos < r.bstop) {\n\t\t\t\t// inside region\n\t\t\t\thits.push({\n\t\t\t\t\tridx: i,\n\t\t\t\t\tx:\n\t\t\t\t\t\t(this.regioncumlen(i, true) + (r.reverse ? r.bstop - pos : pos - r.bstart)) * this.exonsf +\n\t\t\t\t\t\ti * this.regionspace\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t} else if (i > 0 && overgene) {\n\t\t\t\t// assuming that intron is always between regions\n\t\t\t\tconst r0 = this.rglst[i - 1]\n\t\t\t\tif (r0.chr != chr) continue\n\t\t\t\t// TODO need a way to exclude regulatory regions\n\t\t\t\t// assuming the same orientation of all exons\n\t\t\t\tif (r.reverse) {\n\t\t\t\t\tif (pos < r0.bstart && pos >= r.bstop) {\n\t\t\t\t\t\thits.push({\n\t\t\t\t\t\t\tridx: i,\n\t\t\t\t\t\t\tx: this.regioncumlen(i, true) * this.exonsf + i * this.regionspace - this.regionspace / 2\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (pos < r.bstart && pos >= r0.bstop) {\n\t\t\t\t\t\thits.push({\n\t\t\t\t\t\t\tridx: i,\n\t\t\t\t\t\t\tx: this.regioncumlen(i, true) * this.exonsf + i * this.regionspace - this.regionspace / 2\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hits.length == 0 && overgene) {\n\t\t\t// should be out of gene body range\n\t\t\t// cannot use just .usegm, maybe in gmsum\n\t\t\t// find out where gene body start/end in rglst\n\t\t\tlet startidx = null,\n\t\t\t\tstopidx = 0\n\t\t\tfor (let i = 0; i < this.rglst.length; i++) {\n\t\t\t\t// TODO exclude regulatory regions, appended regions\n\t\t\t\tif (startidx == null) {\n\t\t\t\t\tstartidx = i\n\t\t\t\t}\n\t\t\t\tstopidx = i\n\t\t\t}\n\t\t\tif (startidx == null) {\n\t\t\t\tconsole.error('seekcoord: null startidx')\n\t\t\t} else {\n\t\t\t\tconst r1 = this.rglst[startidx]\n\t\t\t\tconst r2 = this.rglst[stopidx]\n\t\t\t\tif (this.usegm.strand == '+') {\n\t\t\t\t\tif (pos < r1.bstart) {\n\t\t\t\t\t\thits.push({\n\t\t\t\t\t\t\tridx: startidx,\n\t\t\t\t\t\t\tx: this.regioncumlen(startidx, true) * this.exonsf + startidx * this.regionspace\n\t\t\t\t\t\t})\n\t\t\t\t\t} else if (pos >= r2.bstop) {\n\t\t\t\t\t\thits.push({\n\t\t\t\t\t\t\tridx: stopidx,\n\t\t\t\t\t\t\tx: this.exonsf * (this.regioncumlen(stopidx, true) + r2.bstop - r2.bstart) + stopidx * this.regionspace\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error(chr + ':' + pos + ' not mapped to gene')\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (pos < r2.bstart) {\n\t\t\t\t\t\thits.push({\n\t\t\t\t\t\t\tridx: stopidx,\n\t\t\t\t\t\t\tx: this.exonsf * (this.regioncumlen(stopidx, true) + r2.bstop - r2.bstart) + stopidx * this.regionspace\n\t\t\t\t\t\t})\n\t\t\t\t\t} else if (pos >= r1.bstop) {\n\t\t\t\t\t\thits.push({\n\t\t\t\t\t\t\tridx: startidx,\n\t\t\t\t\t\t\tx: this.regioncumlen(startidx, true) * this.exonsf + startidx * this.regionspace\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error(chr + ':' + pos + ' not mapped to gene')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst reduct = this.regioncumlen(this.startidx) * this.exonsf + this.startidx * this.regionspace\n\t\tfor (const h of hits) {\n\t\t\th.x -= reduct\n\t\t}\n\n\t\tif (this.subpanels.length) {\n\t\t\t// also search sub panels\n\t\t\tlet x = this.width\n\t\t\tfor (const [idx, r] of this.subpanels.entries()) {\n\t\t\t\tx += r.leftpad\n\t\t\t\tif (chr == r.chr && pos >= r.start && pos <= r.stop) {\n\t\t\t\t\thits.push({\n\t\t\t\t\t\tsubpanelidx: idx,\n\t\t\t\t\t\tx: x + r.exonsf * (pos - r.start)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tx += r.width\n\t\t\t}\n\t\t}\n\n\t\treturn hits\n\t}\n\n\t/*\nseekrange(chr,start,stop) {\n\t// not in use\n\tlet startpx=-1,\n\t\tstoppx=-1\n\tfor(let i=this.startidx; i<=this.stopidx; i++) {\n\t\tconst r=this.rglst[i]\n\t\tif(r.chr!=chr) continue\n\t\tconst start0=Math.max(start,r.start)\n\t\tconst stop0 =Math.min(stop,r.stop)\n\t\tif(start0 < stop0) {\n\t\t\tconst bp=this.regioncumlen(i)\n\t\t\tif(startpx==-1) {\n\t\t\t\tstartpx=(bp+(r.reverse ? r.stop-stop0 : start0-r.start))*this.exonsf+i*this.regionspace\n\t\t\t}\n\t\t\tstoppx=(bp+(r.reverse ? r.stop-start0 : stop0-r.start))*this.exonsf+i*this.regionspace\n\t\t}\n\t}\n\treturn [startpx,stoppx]\n}\n*/\n\n\t/** __tk__ **/\n\n\tsetllabel() {\n\t\t// from left labels of all tracks, derive .leftheadw\n\t\t// then set width of leftlabshade1/2 of all left labels\n\t\tlet w = 10\n\t\tfor (const tk of this.tklst) {\n\t\t\tif (tk.hidden) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tw = Math.max(w, 100, tk.leftLabelMaxwidth + 20)\n\t\t}\n\t\tthis.leftheadw = w\n\t\tthis.hlregion.g.transition().attr('transform', 'translate(' + (this.leftheadw + this.lpad) + ',0)')\n\t\tthis.coord.g0\n\t\t\t.transition()\n\t\t\t.attr('transform', 'translate(' + (this.leftheadw + this.lpad) + ',' + (this.coordyp1 + this.rulerheight) + ')')\n\n\t\tconst entirewidth =\n\t\t\tthis.leftheadw + this.lpad + this.width + this.subpanels.reduce((i, j) => i + j.leftpad + j.width, 0) + this.rpad\n\n\t\tfor (const tk of this.tklst) {\n\t\t\ttk.gleft.transition().attr('transform', 'translate(' + this.leftheadw + ',0)')\n\t\t\ttk.gmiddle.transition().attr('transform', 'translate(' + (this.leftheadw + this.lpad) + ',0)')\n\t\t\ttk.gright.transition().attr('transform', 'translate(' + entirewidth + ',0)')\n\t\t}\n\t\tthis.blocksetw()\n\t}\n\n\ttk_remove(i) {\n\t\tconst oldt = this.tklst[i]\n\t\tif (oldt.type == client.tkt.ds && oldt.ds && oldt.ds.iscustom) {\n\t\t\t// is a custom dstk, as the child from a official dstk\n\t\t\tdelete this.genome.datasets[oldt.ds.label]\n\t\t\tconst ds = this.ownds[oldt.ds.label]\n\t\t\tif (ds) {\n\t\t\t\t// registered in this.ownds{}\n\t\t\t\tdelete this.ownds[ds.label]\n\t\t\t\tif (ds.parentname) {\n\t\t\t\t\t// decrement children count in parent ds handle\n\t\t\t\t\tconst parenthandle = this.ds2handle[ds.parentname]\n\t\t\t\t\tif (parenthandle && parenthandle.childicon) {\n\t\t\t\t\t\tconst count = Number.parseInt(parenthandle.childicon.text())\n\t\t\t\t\t\tif (count == 1) {\n\t\t\t\t\t\t\tparenthandle.childicon.remove()\n\t\t\t\t\t\t\tdelete parenthandle.childicon\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparenthandle.childicon.text(count - 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.tklst[i].g.remove()\n\t\tthis.tklst.splice(i, 1)\n\t\tthis.setllabel()\n\t\tthis.block_setheight()\n\t\tif (oldt.type == client.tkt.ds) {\n\t\t\tconst dshandle = this.ds2handle[oldt.name]\n\t\t\tif (dshandle) {\n\t\t\t\tdshandle.handlesays.style('background-color', 'white').style('color', 'black')\n\t\t\t}\n\t\t\tif (oldt.eplst) {\n\t\t\t\tfor (const ep of oldt.eplst) {\n\t\t\t\t\tif (ep.handle) {\n\t\t\t\t\t\tep.handle.remove()\n\t\t\t\t\t}\n\t\t\t\t\tif (ep.pane) {\n\t\t\t\t\t\tep.pane.pane.remove()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (oldt.tr_legend) {\n\t\t\tdisappear(oldt.tr_legend, true)\n\t\t}\n\t\tif (this.onAddRemoveTk) this.onAddRemoveTk(oldt) // lack of 2nd arg for removing\n\t}\n\n\tdeletecustomdsbyname(dsname) {\n\t\t// this should not be in genome.datasets\n\t\tfor (let i = 0; i < this.tklst.length; i++) {\n\t\t\tconst t = this.tklst[i]\n\t\t\tif (t.type == client.tkt.ds && t.ds.label == dsname) {\n\t\t\t\tthis.tk_remove(i)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\taddchilddsnoload(childds) {\n\t\tconst paname = childds.parentname\n\t\tconst parenthandle = this.ds2handle[paname]\n\t\tif (parenthandle) {\n\t\t\tconst d = parenthandle.childicon\n\t\t\tif (d) {\n\t\t\t\td.text(Number.parseInt(d.text()) + 1)\n\t\t\t} else {\n\t\t\t\t// create new icon\n\t\t\t\tparenthandle.childicon = parenthandle.handle\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t.style('margin-left', '1px')\n\t\t\t\t\t.style('padding', '2px 5px')\n\t\t\t\t\t.style('background-color', '#ccc')\n\t\t\t\t\t.classed('sja_opaque8', true)\n\t\t\t\t\t.text(1)\n\t\t\t\t\t.on('click', event => {\n\t\t\t\t\t\tconst div = this.tip.clear().showunder(event.target).d.append('div').style('padding', '20px')\n\t\t\t\t\t\tdiv\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.text('Click to remove')\n\t\t\t\t\t\t\t.style('font-size', '.9em')\n\t\t\t\t\t\t\t.style('color', '#858585')\n\t\t\t\t\t\t\t.style('margin-bottom', '10px')\n\t\t\t\t\t\tfor (const tk of this.tklst) {\n\t\t\t\t\t\t\tif (!tk.ds || tk.ds.parentname != paname) continue\n\t\t\t\t\t\t\tconst row = div.append('div').classed('sja_menuoption', true).text(tk.ds.label)\n\t\t\t\t\t\t\trow.on('click', () => {\n\t\t\t\t\t\t\t\trow.remove()\n\t\t\t\t\t\t\t\tthis.deletecustomdsbyname(tk.ds.label)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tthis.ownds[childds.label] = childds\n\t}\n\n\tblock_addtk_template(template) {\n\t\t/*\n\tthis: init attributes\n\tcalls: block_maketk() to make dom/svg\n\tdo not load tk yet\n\t*/\n\t\tconst tk = {\n\t\t\theight_main: 25,\n\t\t\theight: 30,\n\t\t\t// template.tkid will override\n\t\t\ttkid: Math.random().toString(),\n\t\t\ttoppad: 5,\n\t\t\tbottompad: 5,\n\t\t\tyoff: 0,\n\t\t\taxisfontsize: 12,\n\t\t\tbusy: false,\n\t\t\tleftLabelMaxwidth: 0,\n\t\t\trightheadw_tk: this.rightheadw,\n\t\t\tsubpanels: [] // to keep in sync with block.subpanels\n\t\t}\n\t\tfor (const k in template) {\n\t\t\ttk[k] = template[k]\n\t\t}\n\n\t\tswitch (template.type) {\n\t\t\tcase client.tkt.bampile:\n\t\t\t\tbampilefromtemplate(tk, template)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.ds:\n\t\t\t\tif (!tk.ds) {\n\t\t\t\t\tthis.error('dstk template missing .ds')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (!tk.ds.label) {\n\t\t\t\t\tthis.error('dstk template missing .ds.label')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\ttk.name = tk.ds.label\n\t\t\t\t/*\n\t\ttell blockds.load2tk to insert it into .tklst and then remove this trigger\n\t\tso subsequent data request won't do the .tklst insert\n\t\t*/\n\t\t\t\ttk.dsuninitiated = true\n\t\t\t\tbreak\n\t\t\tcase client.tkt.pgv:\n\t\t\t\tconst e1 = pgvfromtemplate(tk, template)\n\t\t\t\tif (e1) {\n\t\t\t\t\tthis.error(e1)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase client.tkt.ld:\n\t\t\t\tconst e14 = ldfromtemplate(tk, template)\n\t\t\t\tif (e14) {\n\t\t\t\t\tthis.error(e14)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bam:\n\t\t\t\tconst e12 = bamfromtemplate(tk, template)\n\t\t\t\tif (e12) {\n\t\t\t\t\tthis.error(e12)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase client.tkt.usegm:\n\t\t\t\tgmtkfromtemplate(tk)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bedj:\n\t\t\t\tconst e2 = bedjfromtemplate(tk, template)\n\t\t\t\tif (e2) {\n\t\t\t\t\tthis.error(e2)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase client.tkt.junction:\n\t\t\t\tconst e3 = junctionfromtemplate(tk, template)\n\t\t\t\tif (e3) {\n\t\t\t\t\tthis.error(e3)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t/*\n\tcase client.tkt.ai:\n\t\ttk.covermax=tk.readdepthcutoff\n\t\tdelete tk.readdepthcutoff\n\t\tconst h=Math.max(60,(document.body.clientHeight-200)/12)\n\t\ttk.rowheight=Math.ceil(h)\n\t\ttk.barheight=Math.ceil(h/2)\n\t\ttk.rowspace=5\n\t\ttk.uninit=true\n\t\tbreak\n\t*/\n\t\t\tcase client.tkt.aicheck:\n\t\t\t\taicheckfromtemplate(tk, template)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bigwig:\n\t\t\t\tbigwigfromtemplate(tk, template)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bigwigstranded:\n\t\t\t\tbigwigstrandedfromtemplate(tk, template)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bam:\n\t\t\t\ttk.stackheight = tk.stackheight || 10\n\t\t\t\ttk.barheight = tk.barheight || 80\n\t\t\t\ttk.fcolor = tk.fcolor || '#005EBD'\n\t\t\t\ttk.rcolor = tk.rcolor || '#D66B00'\n\t\t\t\ttk.mmcolor = tk.mmcolor || '#FF3D3D'\n\t\t\t\tbreak\n\t\t\tcase client.tkt.mdsjunction:\n\t\t\t\tconst e6 = mdsjunctionfromtemplate(tk, template)\n\t\t\t\tif (e6) {\n\t\t\t\t\tthis.error(e6)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase client.tkt.mdssvcnv:\n\t\t\t\tconst e7 = mdssvcnvfromtemplate(tk, template)\n\t\t\t\tif (e7) {\n\t\t\t\t\tthis.error(e7)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase client.tkt.mds3:\n\t\t\t\tconst e13 = mds3_fromtemplate(tk, template)\n\t\t\t\tif (e13) {\n\t\t\t\t\tthis.error(e13)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bedgraphdot:\n\t\t\t\tconst e11 = bedgraphdot_fromtemplate(tk, template)\n\t\t\t\tif (e11) {\n\t\t\t\t\tthis.error(e11)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase client.tkt.mdsexpressionrank:\n\t\t\t\tconst e8 = mdsexpressionrankfromtemplate(tk, template, this)\n\t\t\t\tif (e8) {\n\t\t\t\t\tthis.error(e8)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase client.tkt.hicstraw:\n\t\t\t\tconst e4 = hicstrawfromtemplate(tk, template)\n\t\t\t\tif (e4) {\n\t\t\t\t\tthis.error(e4)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase client.tkt.ase:\n\t\t\t\tconst e9 = asefromtemplate(tk, template)\n\t\t\t\tif (e9) {\n\t\t\t\t\tthis.error(e9)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthis.error('addtk: unknown template tk type ' + template.type)\n\t\t}\n\n\t\t// upon breaking error, quit and do not add this track\n\t\tthis.tklst.push(tk)\n\n\t\tthis.block_maketk(tk)\n\t\tthis.blocksetw()\n\t\treturn tk\n\t}\n\n\tblock_maketk(tk) {\n\t\t// keep separate from addtk()\n\t\t// call each time to show a tk in .tklst\n\t\ttk.tktip = new Menu({ padding: '15px' })\n\t\ttk.tkconfigtip = new Menu({ padding: '15px' })\n\n\t\ttk.g = this.gbase.append('g').attr('data-testid', 'sja_sample_menu_opener').attr('transform', 'translate(0,0)')\n\t\t/*\n\torder of precedence:\n\tgtksubpanels < gmiddle < gleft and gright\n\tso that right-open axis in gleft can not be blocked by gmiddle\n\t*/\n\n\t\t/*\n\tholder for all subpanels\n\tmust not append to gmiddle, since gmiddle catches mousedown for panning the main panel, and subpanel must pan independently\n\t*/\n\t\ttk.gtksubpanels = tk.g.append('g')\n\n\t\ttk.gmiddle = tk.g.append('g').attr('transform', 'translate(' + (this.leftheadw + this.lpad) + ',0)')\n\n\t\ttk.tkbodybgrect = tk.gmiddle.append('rect').attr('fill', 'white').attr('fill-opacity', 0)\n\n\t\ttk.glider = tk.gmiddle.append('g').attr('transform', 'translate(0,0)').style('cursor', 'default')\n\n\t\ttk.gleft = tk.g.append('g').attr('transform', 'translate(' + this.leftheadw + ',0)')\n\t\ttk.gright = tk.g\n\t\t\t.append('g')\n\t\t\t.attr('transform', 'translate(' + (this.leftheadw + this.lpad + this.width + this.rpad) + ',0)')\n\n\t\ttk.tklabel = this.maketklefthandle(tk).attr('class', null).attr('font-weight', 'bold')\n\n\t\t// tk name may be available now or will be defined later\n\t\tif (tk.name) {\n\t\t\t// two conditions to show tooltip on hovering the label\n\t\t\t// 1. label truncated, hover to show full label\n\t\t\t// 2. list_description[{k,v}] provided:\n\t\t\t// a.hover to show table of details\n\t\t\t// b. click label to show and leave table of details\n\t\t\tconst labeltruncated = tk.name.length >= 25\n\t\t\tif (labeltruncated) {\n\t\t\t\t// to truncate name and also apply tooltip\n\t\t\t\ttk.tklabel.text(tk.name.substring(0, 20) + ' ...')\n\t\t\t} else {\n\t\t\t\t// no need to truncate label\n\t\t\t\ttk.tklabel.text(tk.name)\n\t\t\t}\n\t\t\tif (labeltruncated || tk.list_description) {\n\t\t\t\t// will show tooltip to display both info if available\n\n\t\t\t\t// detects if tooltip is in use or not\n\t\t\t\tlet tktip_active = false\n\t\t\t\ttk.tktip.onHide = () => {\n\t\t\t\t\ttktip_active = false\n\t\t\t\t}\n\t\t\t\ttk.tklabel.on('mouseover', event => {\n\t\t\t\t\t// Only fires if menu not active from click event\n\t\t\t\t\tif (tktip_active == true) return\n\t\t\t\t\tshowTkLabelTooltip(event, tk, labeltruncated)\n\t\t\t\t\ttktip_active = false\n\t\t\t\t})\n\t\t\t\ttk.tklabel.on('mouseout', () => {\n\t\t\t\t\tif (tktip_active == true) return\n\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t})\n\t\t\t\ttk.tklabel.on('click', event => {\n\t\t\t\t\ttktip_active = !tktip_active\n\t\t\t\t\tif (tktip_active == true) {\n\t\t\t\t\t\tshowTkLabelTooltip(event, tk, labeltruncated)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\t// tklabel content is set. initiate leftLabelMaxwidth with <text> width\n\t\t\t// this width may be overwritten (only by larger width) in individual tk maker scripts (adding sublabels or change tk.name ...)\n\t\t\t// when it's overwritten, must call block.setllabel() to update ui\n\t\t\ttk.leftLabelMaxwidth = tk.tklabel.node().getBBox().width\n\t\t} else {\n\t\t\t// tk.name is not provided, e.g. mds2\n\t\t\t// its maketk will be responsible for filling the tklabel and setting tk.leftLabelMaxwidth\n\t\t\t// fault is that the tooltip cannot be provided in this case\n\t\t}\n\t\tfunction showTkLabelTooltip(event, tk, labeltruncated) {\n\t\t\ttk.tktip.clear().show(event.clientX, event.clientY - 30)\n\t\t\tif (labeltruncated) {\n\t\t\t\tconst d = tk.tktip.d.append('div').text(tk.name)\n\t\t\t\tif (tk.list_description) d.style('margin-bottom', '5px')\n\t\t\t}\n\t\t\tif (tk.list_description) {\n\t\t\t\tclient.make_table_2col(tk.tktip.d.append('div'), tk.list_description).style('margin', '0px')\n\t\t\t}\n\t\t}\n\n\t\ttk.pica = {\n\t\t\tg: tk.gmiddle.append('g')\n\t\t}\n\t\ttk.cloak = tk.gmiddle.append('g').attr('transform', 'scale(0)')\n\t\ttk.cloakbox = tk.cloak.append('rect').attr('fill', 'white').attr('fill-opacity', 0)\n\t\ttk.cloaktext = tk.cloak\n\t\t\t.append('text')\n\t\t\t.attr('data-testid', 'loading_message')\n\t\t\t.text('Loading ...')\n\t\t\t.attr('fill', common.defaultcolor)\n\t\t\t.attr('fill-opacity', 0)\n\t\t\t.attr('font-weight', 'bold')\n\t\t\t.attr('font-size', '18px')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('dominant-baseline', 'middle')\n\t\ttk.cloakline = tk.cloak.append('line').attr('stroke', common.defaultcolor).attr('stroke-width', '2px')\n\t\t// set default if missing from template\n\t\tswitch (tk.type) {\n\t\t\tcase client.tkt.bampile:\n\t\t\t\tbampilemaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.ds:\n\t\t\t\tdsmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.pgv:\n\t\t\t\tpgvmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.ld:\n\t\t\t\tldmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bam:\n\t\t\t\tbammaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.usegm:\n\t\t\t\tgmtkmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bedj:\n\t\t\t\tbedjmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.junction:\n\t\t\t\tjunctionmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.aicheck:\n\t\t\t\taicheckmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bigwig:\n\t\t\t\tbigwigmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bigwigstranded:\n\t\t\t\tbigwigstrandedmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.mdsjunction:\n\t\t\t\tmdsjunctionmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.mdssvcnv:\n\t\t\t\tmdssvcnvmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.mds3:\n\t\t\t\tmds3_maketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bedgraphdot:\n\t\t\t\tbedgraphdot_maketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.mdsexpressionrank:\n\t\t\t\tmdsexpressionrankmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.hicstraw:\n\t\t\t\thicstrawmaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.ase:\n\t\t\t\tasemaketk(tk, this)\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthis.error('maketk: unknown template tk type ' + tk.type)\n\t\t}\n\t\tthis.setllabel()\n\n\t\t/******* pan *******/\n\n\t\ttk.gmiddle.on('mousedown', event => {\n\t\t\tif (this.busy) return\n\t\t\tif (event.which == 3) {\n\t\t\t\t// right click\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.busy = true\n\t\t\tthis.resized = false\n\n\t\t\tevent.preventDefault()\n\t\t\tconst body = d3select(document.body)\n\n\t\t\tconst x0 = this.rotated ? event.clientY : event.clientX\n\n\t\t\tbody.on('mousemove', event => {\n\t\t\t\tconst xoff = (this.rotated ? event.clientY : event.clientX) - x0\n\t\t\t\tthis.panning(xoff)\n\t\t\t})\n\t\t\tbody.on('mouseup', event => {\n\t\t\t\tbody.on('mousemove', null).on('mouseup', null)\n\t\t\t\tconst xoff = (this.rotated ? event.clientY : event.clientX) - x0\n\t\t\t\tthis.pannedby(xoff)\n\t\t\t})\n\t\t})\n\n\t\t/******* drag up down *******/\n\n\t\ttk.gleft.on('mousedown', event => {\n\t\t\tevent.preventDefault()\n\t\t\tconst body = d3select(document.body)\n\t\t\tlet y0 = event.clientY\n\t\t\tbody.on('mousemove', event => {\n\t\t\t\tconst dy = event.clientY - y0\n\n\t\t\t\ttk.g.attr('transform', 'translate(0,' + (tk.yoff + dy) + ')')\n\n\t\t\t\tlet tkidx = 0\n\t\t\t\tfor (let i = 0; i < this.tklst.length; i++) {\n\t\t\t\t\tif (this.tklst[i].tkid == tk.tkid) {\n\t\t\t\t\t\ttkidx = i\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (dy < 0 && tkidx > 0) {\n\t\t\t\t\tlet t2idx = tkidx - 1,\n\t\t\t\t\t\tt2 = this.tklst[t2idx]\n\t\t\t\t\twhile (t2.hidden) {\n\t\t\t\t\t\tt2idx--\n\t\t\t\t\t\tif (t2idx < 0) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tt2 = this.tklst[t2idx]\n\t\t\t\t\t}\n\t\t\t\t\tif (!t2) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tif (-dy >= t2.height) {\n\t\t\t\t\t\t// swap\n\t\t\t\t\t\tthis.tklst[t2idx] = tk\n\t\t\t\t\t\tthis.tklst[tkidx] = t2\n\t\t\t\t\t\ttk.yoff = t2.yoff - t2.toppad + tk.toppad // important since tk/t2 may have different toppad, and yoff does not include toppad\n\t\t\t\t\t\tt2.yoff += tk.height\n\n\t\t\t\t\t\tt2.g.transition().attr('transform', 'translate(0,' + t2.yoff + ')')\n\n\t\t\t\t\t\ty0 = event.clientY\n\t\t\t\t\t\tif (tk.type == client.tkt.usegm && t2.type == client.tkt.ds && t2.aboveprotein) {\n\t\t\t\t\t\t\t// t2 go down\n\t\t\t\t\t\t\tblockds.skewer_flip(t2)\n\t\t\t\t\t\t} else if (t2.type == client.tkt.usegm && tk.type == client.tkt.ds && !tk.aboveprotein) {\n\t\t\t\t\t\t\t// tk go up\n\t\t\t\t\t\t\tblockds.skewer_flip(tk)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (dy > 0 && tkidx < this.tklst.length - 1) {\n\t\t\t\t\tlet t2idx = tkidx + 1,\n\t\t\t\t\t\tt2 = this.tklst[t2idx]\n\t\t\t\t\twhile (t2.hidden) {\n\t\t\t\t\t\tt2idx++\n\t\t\t\t\t\tif (t2idx >= this.tklst.length) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tt2 = this.tklst[t2idx]\n\t\t\t\t\t}\n\t\t\t\t\tif (!t2) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tif (dy >= t2.height) {\n\t\t\t\t\t\t// swap\n\t\t\t\t\t\tthis.tklst[t2idx] = tk\n\t\t\t\t\t\tthis.tklst[tkidx] = t2\n\t\t\t\t\t\tt2.yoff = tk.yoff - tk.toppad + t2.toppad\n\t\t\t\t\t\ttk.yoff += t2.height\n\n\t\t\t\t\t\tt2.g.transition().attr('transform', 'translate(0,' + t2.yoff + ')')\n\n\t\t\t\t\t\ty0 = event.clientY\n\t\t\t\t\t\tif (tk.type == client.tkt.usegm && t2.type == client.tkt.ds && !t2.aboveprotein) {\n\t\t\t\t\t\t\t// t2 go up\n\t\t\t\t\t\t\tblockds.skewer_flip(t2)\n\t\t\t\t\t\t} else if (t2.type == client.tkt.usegm && tk.type == client.tkt.ds && tk.aboveprotein) {\n\t\t\t\t\t\t\t// tk go down\n\t\t\t\t\t\t\tblockds.skewer_flip(tk)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tbody.on('mouseup', () => {\n\t\t\t\ttk.g.transition().attr('transform', 'translate(0,' + tk.yoff + ')')\n\n\t\t\t\tbody.on('mousemove', null).on('mouseup', null)\n\t\t\t})\n\t\t})\n\t}\n\n\tpanning(xoff) {\n\t\tif (this.showreverse) {\n\t\t\txoff *= -1\n\t\t}\n\n\t\tthis.coord.g.attr('transform', 'translate(' + xoff + ',0)')\n\n\t\tfor (const tk of this.tklst) {\n\t\t\ttk.glider.attr('transform', 'translate(' + xoff + ',0)')\n\n\t\t\tif (tk.type == client.tkt.pgv) {\n\t\t\t\t// need to shift some part of its member tracks\n\t\t\t\tfor (const t of tk.tracks) {\n\t\t\t\t\tt.immobileg.attr('transform', 'translate(' + -xoff + ',0)')\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const r of this.hlregion.lst) {\n\t\t\tr.rect.attr('x', r.x + xoff)\n\t\t}\n\t\tif (this.onpanning) {\n\t\t\tthis.onpanning(xoff)\n\t\t}\n\t}\n\n\tpannedby(xoff) {\n\t\tif (xoff == 0) {\n\t\t\tthis.busy = false\n\t\t\tthis.pannedpx = undefined\n\t\t\treturn\n\t\t}\n\n\t\tif (this.showreverse) {\n\t\t\txoff *= -1\n\t\t}\n\n\t\tlet back = false\n\t\tif (xoff < 0) {\n\t\t\tif (this.stopidx == this.rglst.length - 1) {\n\t\t\t\tconst r = this.rglst[this.stopidx]\n\t\t\t\tif (r.reverse) {\n\t\t\t\t\tif (r.start <= r.bstart) back = true\n\t\t\t\t} else {\n\t\t\t\t\tif (r.stop >= r.bstop) back = true\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.startidx == 0) {\n\t\t\t\tconst r = this.rglst[0]\n\t\t\t\tif (r.reverse) {\n\t\t\t\t\tif (r.stop >= r.bstop) back = true\n\t\t\t\t} else {\n\t\t\t\t\tif (r.start <= r.bstart) back = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (back) {\n\t\t\tthis.coord.g.transition().attr('transform', 'translate(0,0)')\n\t\t\tfor (const t of this.tklst) {\n\t\t\t\tt.glider.transition().attr('transform', 'translate(0,0)')\n\t\t\t}\n\t\t\tthis.busy = false\n\t\t\tthis.pannedpx = undefined\n\t\t\tfor (const r of this.hlregion.lst) {\n\t\t\t\tr.rect.transition().attr('x', r.x)\n\t\t\t}\n\t\t\tif (this.onpanning) {\n\t\t\t\tthis.onpanning(0)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tthis.pannedpx = xoff\n\t\tthis.zoomedin = false\n\t\tthis.zoom2px(-xoff, this.width - xoff)\n\t}\n\n\ttk_hide(tk) {\n\t\ttk.hidden = true\n\t\ttk.g.remove()\n\t\tif (tk.eplst) {\n\t\t\t// ds tk that has epaint\n\t\t\tfor (const ep of tk.eplst) {\n\t\t\t\tif (ep.pane && ep.pane.pane && ep.pane.pane.style('display') != 'none') {\n\t\t\t\t\tep.epaintfold(this)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.setllabel()\n\t\tthis.block_setheight()\n\t\tif (tk.type == client.tkt.ds) {\n\t\t\tconst hd = this.ds2handle[tk.name]\n\t\t\tif (hd) {\n\t\t\t\thd.handlesays.style('background-color', '#999').style('color', 'white')\n\t\t\t}\n\t\t}\n\t\tif (tk.tr_legend) {\n\t\t\tdisappear(tk.tr_legend)\n\t\t}\n\t}\n\n\ttkchangeaffectlegend(tk) {\n\t\tif (!this.legend) return\n\t\t// tk has been turned shown/hidden\n\t\tif (tk.type == client.tkt.ds) {\n\t\t\t// mclass / morigin legend\n\t\t\tlet dsshown = false\n\t\t\tfor (const t of this.tklst) {\n\t\t\t\tif (!t.hidden && t.type == client.tkt.ds) {\n\t\t\t\t\tdsshown = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dsshown) {\n\t\t\t\tthis.legend.tr_mclass.style('display', 'table-row')\n\t\t\t\tLegend.legend_mclass(this)\n\t\t\t\tthis.legend.tr_morigin.style('display', 'table-row')\n\t\t\t\tLegend.legend_morigin(this)\n\t\t\t} else {\n\t\t\t\tthis.legend.tr_mclass.style('display', 'none')\n\t\t\t\tthis.legend.tr_morigin.style('display', 'none')\n\t\t\t}\n\t\t}\n\t}\n\n\ttk_load_all() {\n\t\t/*\n\ttk_load of individual tk is sync and blocking in nature\n\te.g.\n\twhen zooming in, a junction track will be rendered all in sync, and will attempt to run splice event analysis via onloadalltk()\n\tbut the gene tk following the junction tk still hasn't been set busy flag\n\tso results in the onloadalltk to be run on stale gene tk data\n\tso must set busy flag to all tk first, then call tk_load\n\t*/\n\t\tfor (const t of this.tklst) {\n\t\t\tt.busy = true\n\t\t}\n\t\tfor (const t of this.tklst) {\n\t\t\tthis.tk_load(t)\n\t\t}\n\t}\n\n\ttk_load(tk) {\n\t\t/*\n\tcalled when track first created\n\tand when view range updated\n\tdetection of viewrangeupperlimit is handled in the loader of each track type, so that each track can respond to beyond-limit in their own way\n\t*/\n\n\t\tif (tk.hidden) {\n\t\t\tif (tk.g) {\n\t\t\t\ttk.g.remove()\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\t// in case this tk is brought back from hidden\n\t\tif (!tk.g.node().parentNode) {\n\t\t\tthis.gbase.node().appendChild(tk.g.node())\n\t\t}\n\t\tif (tk.tr_legend && tk.tr_legend.style('display') == 'none') {\n\t\t\tappear(tk.tr_legend, 'table-row')\n\t\t}\n\t\ttk.busy = true\n\t\tswitch (tk.type) {\n\t\t\tcase client.tkt.bampile:\n\t\t\t\tbampileload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.pgv:\n\t\t\t\tpgvload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.ld:\n\t\t\t\tldload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bam:\n\t\t\t\tbamload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.ds:\n\t\t\t\tconst hd = this.ds2handle[tk.name]\n\t\t\t\tif (hd) {\n\t\t\t\t\thd.handlesays.style('background-color', '#ddd').style('color', 'black')\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\ttk.dsuninitiated ||\n\t\t\t\t\t!this.usegm ||\n\t\t\t\t\tthis.gmmode == client.gmmode.genomic ||\n\t\t\t\t\tthis.gmmodepast == client.gmmode.genomic\n\t\t\t\t) {\n\t\t\t\t\t// re-request data, only for range-queries, not for gene expression\n\t\t\t\t\tblockds.dstkload(tk, this)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tblockds.dstkrender(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.usegm:\n\t\t\t\tgmtkrender(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bigwig:\n\t\t\t\tbigwigload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.aicheck:\n\t\t\t\taicheckload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bigwigstranded:\n\t\t\t\tbigwigstrandedload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.junction:\n\t\t\t\tjunctionload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bam:\n\t\t\t\tthis.loadtk_bam(tk)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bedj:\n\t\t\t\tbedjload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.mdsjunction:\n\t\t\t\tmdsjunctionload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.mdssvcnv:\n\t\t\t\tmdssvcnvload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.mds3:\n\t\t\t\tmds3_load(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.bedgraphdot:\n\t\t\t\tbedgraphdot_load(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.mdsexpressionrank:\n\t\t\t\tmdsexpressionrankload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.hicstraw:\n\t\t\t\thicstrawload(tk, this)\n\t\t\t\tbreak\n\t\t\tcase client.tkt.ase:\n\t\t\t\taseload(tk, this)\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthis.error('tk_load: unknown tk type')\n\t\t}\n\t\tif (this.onAddRemoveTk) this.onAddRemoveTk(tk, true)\n\t}\n\n\tcloakOn() {\n\t\t// will cloak the entire svg\n\t\t// right now not called in block, but is called by external code on a block instance\n\t\tconst w = Number(this.svg.attr('width')),\n\t\t\th = Number(this.svg.attr('height'))\n\t\tthis.gCloak.attr('transform', 'scale(1)')\n\t\tthis.gCloakRect.attr('width', w).attr('height', h).transition().duration(600).attr('fill-opacity', 0.5)\n\t\tthis.gCloakWord\n\t\t\t.attr('x', w / 2)\n\t\t\t.attr('y', h / 2)\n\t\t\t.transition()\n\t\t\t.duration(600)\n\t\t\t.attr('fill-opacity', 1)\n\t}\n\tcloakOff() {\n\t\tthis.gCloak.attr('transform', 'scale(0)')\n\t}\n\n\ttkcloakon(tk) {\n\t\ttk.busy = true\n\t\tthis.busy = true\n\t\ttk.cloak.attr('transform', 'scale(1)')\n\t\ttk.cloakbox.attr('width', this.width).attr('height', tk.height).transition().duration(600).attr('fill-opacity', 0.5)\n\t\ttk.cloaktext\n\t\t\t.attr('x', this.width / 2)\n\t\t\t.attr('y', tk.height / 2)\n\t\t\t.transition()\n\t\t\t.duration(600)\n\t\t\t.attr('fill-opacity', 1)\n\t\ttk.cloakline.attr('y1', tk.height).attr('y2', tk.height).attr('x2', 0)\n\t\tif (tk.gerror) {\n\t\t\ttk.gerror.remove()\n\t\t}\n\t}\n\n\ttkcloakoff(tk, data) {\n\t\ttk.busy = false\n\t\tthis.ifbusy()\n\t\ttk.cloak.attr('transform', 'scale(0)')\n\t\ttk.cloakbox.attr('fill-opacity', 0).attr('height', 0) //This is a fix for issue #259. Set to 0. Otherwise Safari will not detect event.listeners for the first few track rows.\n\t\ttk.cloaktext.attr('fill-opacity', 0)\n\t\ttk.cloakline.attr('x2', 0)\n\t\ttk.glider.attr('transform', 'translate(0,0)')\n\n\t\tif (tk.gerror) {\n\t\t\t// must do this before tkerror\n\t\t\ttk.gerror.remove()\n\t\t}\n\n\t\tif (!data) {\n\t\t\tthis.tkerror(tk, 'Server error ...')\n\t\t} else if (data.error) {\n\t\t\tthis.tkerror(tk, data.error)\n\t\t}\n\t}\n\n\tifbusy() {\n\t\tlet quiet = true\n\t\tfor (const t of this.tklst) {\n\t\t\tif (!t.hidden && t.busy) quiet = false\n\t\t}\n\t\tfor (const r of this.rglst) {\n\t\t\tif (r.busy) quiet = false\n\t\t}\n\t\tif (quiet) {\n\t\t\tthis.busy = false\n\n\t\t\t// insert subpanels\n\t\t\tthis.add_subpanel()\n\n\t\t\t/*\n\t\tspecial actions only when it finishes loading all tracks\n\t\t*/\n\t\t\twhile (this.onloadalltk.length > 0) {\n\t\t\t\tconst task = this.onloadalltk.pop()\n\t\t\t\ttask()\n\t\t\t}\n\n\t\t\tif (this.onloadalltk_always) {\n\t\t\t\tthis.onloadalltk_always(this)\n\t\t\t}\n\t\t}\n\t}\n\n\ttkprogress(tk, percent) {\n\t\ttk.cloakline.attr('x2', this.width * percent)\n\t}\n\n\ttkerror(tk, msg, y) {\n\t\t// only works for main track, not subpanel\n\t\t// FIXME when printing new error old error register is overwritten!!\n\t\ttk.gerror = tk.glider\n\t\t\t.append('text')\n\t\t\t.text(msg.length > this.width / 10 ? msg.substring(0, this.width / 10 - 20) + '...' : msg)\n\t\t\t.attr('x', this.width / 2)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('y', y ? y : (tk.height_main - tk.toppad - tk.bottompad) / 2)\n\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t.attr('font-size', '14px')\n\t}\n\n\tblock_setheight() {\n\t\t/*\n\teach track has height_main and heights from each subpanel\n\tset tk.height for each track\n\tthen set tk.yoff\n\t*/\n\t\tlet h = this.coord.height\n\n\t\tfor (const t of this.tklst) {\n\t\t\tif (t.hidden) continue\n\n\t\t\tt.yoff = h + t.toppad\n\t\t\tt.g.transition().attr('transform', 'translate(0,' + t.yoff + ')')\n\n\t\t\tif (!Number.isFinite(t.height_main)) {\n\t\t\t\t// should not happen\n\t\t\t\tif (this.debugmode) {\n\t\t\t\t\tconsole.log('block_setheight: invalid height_main for ' + t.name)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// heights to be considered: subpanels, and main track\n\t\t\t{\n\t\t\t\tconst lst = t.subpanels.map(i => i.height)\n\t\t\t\tlst.push(t.height_main)\n\t\t\t\tt.height = Math.max(...lst)\n\t\t\t}\n\n\t\t\th += t.height\n\t\t\tt.tkbodybgrect.attr('width', this.width).attr('height', t.height)\n\n\t\t\tfor (const [i, p] of t.subpanels.entries()) {\n\t\t\t\tp.subpaneltkbgrect.attr('width', this.subpanels[i].width).attr('height', t.height)\n\t\t\t}\n\t\t}\n\n\t\tfor (const p of this.subpanels) {\n\t\t\tp.subpanelbgrect.attr('height', h)\n\t\t\tp.subpanelleftborder.attr('height', h)\n\t\t}\n\n\t\tthis.svg.transition().attr('height', h)\n\n\t\tfor (const r of this.hlregion.lst) {\n\t\t\tr.rect.attr('height', h)\n\t\t}\n\n\t\tif (this.onsetheight) {\n\t\t\tthis.onsetheight(h)\n\t\t}\n\t}\n\n\ttkarg_bedj(tk) {\n\t\tconst par = {\n\t\t\tname: tk.name,\n\t\t\tgenome: this.genome.name,\n\t\t\trglst: this.tkarg_rglst(),\n\t\t\tstackheight: tk.stackheight,\n\t\t\tstackspace: tk.stackspace,\n\t\t\tregionspace: this.regionspace,\n\t\t\twidth: this.width,\n\t\t\tdevicePixelRatio: window.devicePixelRatio > 1 ? window.devicePixelRatio : 1\n\t\t}\n\t\tif (tk.bedItems) {\n\t\t\tpar.bedItems = tk.bedItems\n\t\t} else if (tk.file) {\n\t\t\tpar.file = tk.file\n\t\t} else {\n\t\t\tpar.url = tk.url\n\t\t\tif (tk.indexURL) par.indexURL = tk.indexURL\n\t\t}\n\t\tif (tk.color) par.color = tk.color\n\t\tif (tk.categories) par.categories = tk.categories\n\t\tif (tk.translatecoding) par.translatecoding = 1\n\t\tif (tk.onerow) par.onerow = 1\n\t\tif (tk.usevalue) par.usevalue = tk.usevalue\n\t\tif (tk.bplengthUpperLimit) par.bplengthUpperLimit = tk.bplengthUpperLimit\n\t\tif (tk.hideItemNames) par.hideItemNames = tk.hideItemNames\n\t\tif (tk.filterByName) par.filterByName = tk.filterByName\n\t\tif (this.usegm && this.gmmode != client.gmmode.genomic) {\n\t\t\t// important, will render a gene in a single row across rglst\n\t\t\tpar.gmregion = this.tkarg_maygm(tk)[0]\n\t\t\tpar.isoform = this.usegm.isoform\n\t\t}\n\t\treturn par\n\t}\n\n\tbedj_tooltip(tk, data, panel) {\n\t\t// process data loaded from main tk and subpanel\n\t\t// TODO move this to bedj.js as this is type-specific logic\n\t\tlet tipnum = 0\n\t\tif (data.mapisoform) tipnum += data.mapisoform.length\n\t\tif (data.mapexon) tipnum += data.mapexon.length\n\t\tif (data.mapaa) tipnum += data.mapaa.length\n\n\t\tconst img = (panel || tk).img\n\n\t\tif (tipnum) {\n\t\t\timg\n\t\t\t\t.on('mousemove', event => {\n\t\t\t\t\tif (this.busy) return\n\t\t\t\t\tconst lst = []\n\t\t\t\t\tconst p = pointer(event, img.node())\n\t\t\t\t\tlet stacknumber\n\t\t\t\t\tif (data.mapisoform) {\n\t\t\t\t\t\tfor (const i of data.mapisoform) {\n\t\t\t\t\t\t\tconst y = (i.y - 1) * (tk.stackheight + tk.stackspace)\n\t\t\t\t\t\t\tif (i.x1 < p[0] && i.x2 > p[0] && y < p[1] && y + tk.stackheight > p[1]) {\n\t\t\t\t\t\t\t\tstacknumber = i.y\n\t\t\t\t\t\t\t\tlst.push(\n\t\t\t\t\t\t\t\t\ti.name +\n\t\t\t\t\t\t\t\t\t\t' <span style=\"font-size:.7em\">' +\n\t\t\t\t\t\t\t\t\t\ti.chr +\n\t\t\t\t\t\t\t\t\t\t':' +\n\t\t\t\t\t\t\t\t\t\t(i.start + 1) +\n\t\t\t\t\t\t\t\t\t\t'-' +\n\t\t\t\t\t\t\t\t\t\ti.stop +\n\t\t\t\t\t\t\t\t\t\t' ' +\n\t\t\t\t\t\t\t\t\t\tcommon.bplen(i.stop - i.start) +\n\t\t\t\t\t\t\t\t\t\t'</span>'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (data.mapexon) {\n\t\t\t\t\t\tfor (const i of data.mapexon) {\n\t\t\t\t\t\t\tconst y = (i.y - 1) * (tk.stackheight + tk.stackspace)\n\t\t\t\t\t\t\tif (i.x1 < p[0] && i.x2 > p[0] && y < p[1] && y + tk.stackheight > p[1]) {\n\t\t\t\t\t\t\t\tstacknumber = i.y\n\t\t\t\t\t\t\t\tlst.push(\n\t\t\t\t\t\t\t\t\ti.name +\n\t\t\t\t\t\t\t\t\t\t' <span style=\"font-size:.7em\">' +\n\t\t\t\t\t\t\t\t\t\ti.chr +\n\t\t\t\t\t\t\t\t\t\t':' +\n\t\t\t\t\t\t\t\t\t\t(i.start + 1) +\n\t\t\t\t\t\t\t\t\t\t'-' +\n\t\t\t\t\t\t\t\t\t\ti.stop +\n\t\t\t\t\t\t\t\t\t\t' ' +\n\t\t\t\t\t\t\t\t\t\tcommon.bplen(i.stop - i.start) +\n\t\t\t\t\t\t\t\t\t\t'</span>'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (data.mapaa) {\n\t\t\t\t\t\tfor (const i of data.mapaa) {\n\t\t\t\t\t\t\tconst y = (i.y - 1) * (tk.stackheight + tk.stackspace)\n\t\t\t\t\t\t\tif (i.x1 < p[0] && i.x2 > p[0] && y < p[1] && y + tk.stackheight > p[1]) {\n\t\t\t\t\t\t\t\tstacknumber = i.y\n\t\t\t\t\t\t\t\tlst.push(i.name)\n\t\t\t\t\t\t\t\t// break: a hack to resolve issue that sometimes two aa show at cursor position\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lst.length) {\n\t\t\t\t\t\ttk.tktip.clear()\n\t\t\t\t\t\tfor (const i of lst) {\n\t\t\t\t\t\t\ttk.tktip.d.append('div').html(i)\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttk.tktip.show(\n\t\t\t\t\t\t\tevent.clientX,\n\t\t\t\t\t\t\timg.node().getBoundingClientRect().top + stacknumber * (tk.stackheight + tk.stackspace) - 10\n\t\t\t\t\t\t)\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\ttk.tktip.hide()\n\t\t\t\t})\n\n\t\t\t/*\n\t\tisoform is also for singular bed item\n\t\t*/\n\t\t\tif (data.mapisoform) {\n\t\t\t\t// has isoform, may enable clicking for different reasons\n\n\t\t\t\tif (tk.itemurl_appendname) {\n\t\t\t\t\t// append item name to url for clicking\n\t\t\t\t\timg.on('click', event => {\n\t\t\t\t\t\tconst p = pointer(event, img.node())\n\t\t\t\t\t\tfor (const i of data.mapisoform) {\n\t\t\t\t\t\t\tconst y = (i.y - 1) * (tk.stackheight + tk.stackspace)\n\t\t\t\t\t\t\tif (i.x1 < p[0] && i.x2 > p[0] && y < p[1] && y + tk.stackheight > p[1] && i.name) {\n\t\t\t\t\t\t\t\t// hit an item with name\n\t\t\t\t\t\t\t\twindow.open(tk.itemurl_appendname + i.name)\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t} else if (data.mapisoform.find(i => i.isoform)) {\n\t\t\t\t\t// has isoform name, enable clicking on a isoform to launch protein view\n\n\t\t\t\t\tif (tk.__isgene) {\n\t\t\t\t\t\t// this flag is true for native gene tracks\n\t\t\t\t\t\t// only allow this menu option for these tracks, and won't show it for custom gene tracks\n\n\t\t\t\t\t\tif (this.tklst.find(i => i.type == 'bam')) {\n\t\t\t\t\t\t\t// currently there's a bam tk showing in block; as it does not work for protein view yet, disable this option\n\t\t\t\t\t\t\t// this check can be deleted with a fix e.g. when bam tk is able to properly show pileup-only and no alignment over whole gene\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\timg.on('click', event => {\n\t\t\t\t\t\t\t\tconst p = pointer(event, img.node())\n\t\t\t\t\t\t\t\tfor (const i of data.mapisoform) {\n\t\t\t\t\t\t\t\t\tconst y = (i.y - 1) * (tk.stackheight + tk.stackspace)\n\t\t\t\t\t\t\t\t\tif (i.x1 < p[0] && i.x2 > p[0] && y < p[1] && y + tk.stackheight > p[1] && i.isoform) {\n\t\t\t\t\t\t\t\t\t\t// hit an isoform\n\t\t\t\t\t\t\t\t\t\ttk.tkconfigtip\n\t\t\t\t\t\t\t\t\t\t\t.clear()\n\t\t\t\t\t\t\t\t\t\t\t.show(event.clientX - 40, event.clientY)\n\t\t\t\t\t\t\t\t\t\t\t.d.append('div')\n\t\t\t\t\t\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t\t\t\t\t\t.text('Gene/protein view for ' + i.isoform)\n\t\t\t\t\t\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t\t\t\t\t\ttk.tkconfigtip.hide()\n\t\t\t\t\t\t\t\t\t\t\t\tthis.to_proteinview(i.isoform, tk)\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\timg.on('click', null)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\timg.on('click', null)\n\t\t\t}\n\t\t} else {\n\t\t\timg.on('mouseover', null).on('click', null)\n\t\t}\n\t}\n\n\t/* show protein view for a given isoform\n\tand bring along current tracks\n\tif fromgenetk is provided, will skip this track\n\t*/\n\tto_proteinview(isoform, fromgenetk) {\n\t\t// when a mds3 tk is part of genomebrowser app in mass ui, this special folder exists; create sandbox into it to make it look nice that the new sandbox is on top of existing genomebrowser sandbox, rather than inside it which looks bad\n\t\tconst sandbox = newSandboxDiv(this.tklst.find(i => i.type == 'mds3')?.newChartHolder || this.holder0)\n\t\tsandbox.header.text(isoform)\n\t\tconst arg = {\n\t\t\tgenome: this.genome,\n\t\t\tdebugmode: this.debugmode,\n\t\t\tholder: sandbox.body,\n\t\t\ttklst: [],\n\t\t\tquery: isoform\n\t\t}\n\t\t// bring along current tracks\n\t\tfor (const tk of this.tklst) {\n\t\t\tif (fromgenetk && tk.tkid == fromgenetk.tkid) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (tk.type == common.tkt.mdsexpressionrank) {\n\t\t\t\t// somehow this track won't work (no need to fix)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (tk.type == 'mds3') {\n\t\t\t\targ.tklst.push(tk.duplicateTk())\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\targ.tklst.push(tk)\n\t\t\tconsole.log('tk used as-is')\n\t\t}\n\t\tblockinit(arg)\n\t}\n\n\ttkarg_rglst() {\n\t\t// per region/exon, should be used for bigwig and bedj\n\t\tconst lst = []\n\t\tfor (let i = this.startidx; i <= this.stopidx; i++) {\n\t\t\tconst r = this.rglst[i]\n\t\t\tlst.push({\n\t\t\t\tchr: r.chr,\n\t\t\t\tstart: r.start,\n\t\t\t\tstop: r.stop,\n\t\t\t\twidth: r.width,\n\t\t\t\treverse: r.reverse\n\t\t\t})\n\t\t}\n\t\treturn lst\n\t}\n\n\ttkarg_maygm(tk) {\n\t\tif (!this.usegm || this.gmmode == client.gmmode.genomic) {\n\t\t\treturn this.tkarg_rglst()\n\t\t}\n\t\tconst r = this.rglst[this.startidx]\n\t\tconst reverse = r.reverse\n\t\tif (tk.type == client.tkt.ds || tk.mds) {\n\t\t\t/* use entire gm for:\n\t\t1. old official ds, vcf\n\t\t2. any track from mds\n\t\t*/\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tchr: this.usegm.chr,\n\t\t\t\t\tstart: this.usegm.start,\n\t\t\t\t\tstop: this.usegm.stop,\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\treverse: reverse\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t\t// for bedj/junction\n\t\t// restrict by current view range\n\t\t// will include entire gm span in view range including hidden introns in exon mode\n\t\tlet min = Math.min(r.start, r.stop)\n\t\tlet max = Math.max(r.start, r.stop)\n\t\tfor (let i = this.startidx + 1; i <= this.stopidx; i++) {\n\t\t\tconst r = this.rglst[i]\n\t\t\tmin = Math.min(min, r.start, r.stop)\n\t\t\tmax = Math.max(max, r.start, r.stop)\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\tchr: this.usegm.chr,\n\t\t\t\tstart: min,\n\t\t\t\tstop: max,\n\t\t\t\twidth: this.width,\n\t\t\t\treverse: reverse\n\t\t\t}\n\t\t]\n\t}\n\n\ttkarg_q(tk) {\n\t\t// bigwig track\n\t\tconst a = {\n\t\t\tjwt: this.jwt,\n\t\t\tgenome: this.genome.name,\n\t\t\tname: tk.name,\n\t\t\trglst: this.tkarg_rglst(),\n\t\t\tregionspace: this.regionspace,\n\t\t\twidth: this.width,\n\t\t\tfile: tk.file,\n\t\t\turl: tk.url,\n\t\t\tindexURL: tk.indexURL, // for bedgraph\n\t\t\tbarheight: tk.barheight,\n\t\t\tminv: tk.scale.min,\n\t\t\tmaxv: tk.scale.max,\n\t\t\tpercentile: tk.scale.percentile,\n\t\t\tautoscale: tk.scale.auto,\n\t\t\tpcolor: tk.pcolor,\n\t\t\tpcolor2: tk.pcolor2,\n\t\t\tncolor: tk.ncolor,\n\t\t\tncolor2: tk.ncolor2,\n\t\t\tdevicePixelRatio: window.devicePixelRatio > 1 ? window.devicePixelRatio : 1\n\t\t}\n\t\tif (tk.normalize && !tk.normalize.disable) {\n\t\t\ta.dividefactor = tk.normalize.dividefactor\n\t\t}\n\t\treturn a\n\t}\n\n\tmaketkconfighandle(tk) {\n\t\treturn tk.gright\n\t\t\t.append('text')\n\t\t\t.text('CONFIG')\n\t\t\t.attr('fill', '#555')\n\t\t\t.attr('font-size', this.labelfontsize)\n\t\t\t.attr('y', this.labelfontsize)\n\t\t\t.attr('class', 'sja_clbtext2')\n\t}\n\n\tmaketklefthandle(tk, y) {\n\t\treturn tk.gleft\n\t\t\t.append('text')\n\t\t\t.attr('font-size', this.labelfontsize)\n\t\t\t.attr('y', this.labelfontsize / 2 + (y || 0))\n\t\t\t.attr('text-anchor', 'end')\n\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t.attr('class', 'sja_clbtext2')\n\t\t\t.attr('fill', 'black')\n\t\t\t.attr('x', this.tkleftlabel_xshift)\n\t}\n\n\t/** __tk__ end **/\n\n\t/** __gm__ **/\n\n\tsetgmmode(mode, willupdate) {\n\t\tif (!mode) return this.error('setgmmode: no given mode')\n\t\tif (typeof mode != 'string') return this.error('setgmmode: mode value is not string')\n\t\tif (!this.usegm) return this.error('setgmmode: this.usegm missing')\n\n\t\tthis.rglst = []\n\t\tconst c = this.genome.chrlookup[this.usegm.chr.toUpperCase()]\n\t\tif (!c) {\n\t\t\tthis.error('invalid chr of usegm: ' + this.usegm.chr)\n\t\t\treturn true\n\t\t}\n\t\tif (this.gmmode == mode) {\n\t\t\treturn\n\t\t}\n\t\tif (this.gmmode) {\n\t\t\tthis.gmmodepast = this.gmmode\n\t\t}\n\t\tthis.gmmode = mode\n\t\tlet addgene = false\n\t\tswitch (this.gmmode) {\n\t\t\tcase client.gmmode.genomic:\n\t\t\t\tthis.rglst = [\n\t\t\t\t\t{\n\t\t\t\t\t\tchr: this.usegm.chr,\n\t\t\t\t\t\tbstart: 0,\n\t\t\t\t\t\tbstop: c.len,\n\t\t\t\t\t\tstart: this.usegm.start,\n\t\t\t\t\t\tstop: this.usegm.stop,\n\t\t\t\t\t\treverse: this.usegm.strand == '-'\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t\tthis.regionspace = 0\n\t\t\t\taddgene = true\n\t\t\t\tbreak\n\t\t\tcase client.gmmode.splicingrna:\n\t\t\t\t// TODO allow padding bases\n\t\t\t\tfor (const e of this.usegm.exon) {\n\t\t\t\t\tthis.rglst.push({\n\t\t\t\t\t\tchr: this.usegm.chr,\n\t\t\t\t\t\tbstart: e[0],\n\t\t\t\t\t\tbstop: e[1],\n\t\t\t\t\t\tstart: e[0],\n\t\t\t\t\t\tstop: e[1],\n\t\t\t\t\t\treverse: this.usegm.strand == '-'\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tthis.regionspace = 10\n\t\t\t\tbreak\n\t\t\tcase client.gmmode.exononly:\n\t\t\t\tfor (const e of this.usegm.exon) {\n\t\t\t\t\tthis.rglst.push({\n\t\t\t\t\t\tchr: this.usegm.chr,\n\t\t\t\t\t\tbstart: e[0],\n\t\t\t\t\t\tbstop: e[1],\n\t\t\t\t\t\tstart: e[0],\n\t\t\t\t\t\tstop: e[1],\n\t\t\t\t\t\treverse: this.usegm.strand == '-'\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tthis.regionspace = 0\n\t\t\t\tbreak\n\t\t\tcase client.gmmode.protein:\n\t\t\t\tfor (const e of this.usegm.coding) {\n\t\t\t\t\tthis.rglst.push({\n\t\t\t\t\t\tchr: this.usegm.chr,\n\t\t\t\t\t\tbstart: e[0],\n\t\t\t\t\t\tbstop: e[1],\n\t\t\t\t\t\tstart: e[0],\n\t\t\t\t\t\tstop: e[1],\n\t\t\t\t\t\treverse: this.usegm.strand == '-'\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tthis.regionspace = 0\n\t\t\t\tbreak\n\t\t\tcase client.gmmode.gmsum:\n\t\t\t\tthis.rglst = allgm2sum(this.allgm)[0]\n\t\t\t\tthis.regionspace = 10\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthis.error('setgmmode: unknown mode ' + this.gmmode)\n\t\t\t\tthis.gmmode = this.gmmodepast\n\t\t\t\treturn\n\t\t}\n\t\tthis.startidx = 0\n\t\tthis.stopidx = this.rglst.length - 1\n\t\tif (this.rglst.length > 1 && this.regionspace > 0) {\n\t\t\t// adjust width\n\t\t\tif (this.regionspace * (this.rglst.length - 1) > this.width * 0.3) {\n\t\t\t\tthis.regionspace = Math.max(2, (this.width * 0.3) / (this.rglst.length - 1))\n\t\t\t}\n\t\t\tconst inw = this.regionspace * (this.rglst.length - 1)\n\t\t\tconst exonlen = this.rglst.reduce((a, b) => a + b.stop - b.start, 0)\n\t\t\tthis.exonsf = (this.width - (inw > this.width * 0.4 ? 0 : inw)) / exonlen\n\t\t\tthis.width = exonlen * this.exonsf + inw\n\t\t}\n\n\t\tif (this.gbase) {\n\t\t\tlet hasgene = false\n\t\t\tfor (const tk of this.tklst) {\n\t\t\t\tif (tk.__isgene) hasgene = true\n\t\t\t}\n\t\t\tif (addgene) {\n\t\t\t\tif (!hasgene) {\n\t\t\t\t\t// add\n\t\t\t\t\tfor (const tk of this.genome.tracks) {\n\t\t\t\t\t\tif (tk.__isgene) {\n\t\t\t\t\t\t\tthis.block_addtk_template(tk)\n\t\t\t\t\t\t\t// by breaking, block will only add the first gene track, but not more than 1\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (hasgene) {\n\t\t\t\t\t// remove\n\t\t\t\t\twhile (hasgene) {\n\t\t\t\t\t\tfor (let i = 0; i < this.tklst.length; i++) {\n\t\t\t\t\t\t\tif (this.tklst[i].__isgene) {\n\t\t\t\t\t\t\t\tthis.tk_remove(i)\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\thasgene = false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (willupdate) {\n\t\t\t\tdelete this.pannedpx\n\t\t\t\tthis.block_coord_updated()\n\t\t\t}\n\t\t} else {\n\t\t\t// gbase is missing\n\t\t\t// this is setting gmmode at init\n\t\t\t// somehow this will also prevent from adding default gene track\n\t\t}\n\t}\n\n\tshowgmmode4switch(holder, hideuponselect) {\n\t\tlet row1, row2, row3, row4, row5\n\n\t\tconst width = 400\n\n\t\tif (this.allowGenomeMode()) {\n\t\t\t// 1 - genomic\n\t\t\trow1 = holder\n\t\t\t\t.append('div')\n\t\t\t\t.style('margin', '1px')\n\t\t\t\t.attr('class', this.gmmode == client.gmmode.genomic ? 'sja_inset_a' : 'sja_menuoption')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tthis.setgmmode(client.gmmode.genomic, true)\n\t\t\t\t\tif (hideuponselect) {\n\t\t\t\t\t\tthis.usegmtip.fadeout()\n\t\t\t\t\t} else {\n\t\t\t\t\t\trow1.attr('class', 'sja_inset_a')\n\t\t\t\t\t\tif (row2) row2.attr('class', 'sja_menuoption')\n\t\t\t\t\t\tif (row3) row3.attr('class', 'sja_menuoption')\n\t\t\t\t\t\tif (row4) row4.attr('class', 'sja_menuoption')\n\t\t\t\t\t\tif (row5) row5.attr('class', 'sja_menuoption')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\tsketchGene(\n\t\t\t\trow1.append('div').style('vertical-align', 'middle').style('display', 'inline-block'),\n\t\t\t\tthis.usegm,\n\t\t\t\twidth,\n\t\t\t\t20,\n\t\t\t\tthis.usegm.start,\n\t\t\t\tthis.usegm.stop,\n\t\t\t\tcommon.exoncolor,\n\t\t\t\ttrue,\n\t\t\t\tthis.usegm.strand == '-'\n\t\t\t)\n\t\t\trow1.append('div').style('display', 'inline-block').style('padding', '13px').text(client.gmmode.genomic)\n\t\t}\n\n\t\t// 2 - splicing rna\n\t\tif (this.usegm.exon.length > 1) {\n\t\t\trow2 = holder\n\t\t\t\t.append('div')\n\t\t\t\t.style('margin', '1px')\n\t\t\t\t.attr('class', this.gmmode == client.gmmode.splicingrna ? 'sja_inset_a' : 'sja_menuoption')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tthis.setgmmode(client.gmmode.splicingrna, true)\n\t\t\t\t\tif (hideuponselect) {\n\t\t\t\t\t\tthis.usegmtip.fadeout()\n\t\t\t\t\t} else {\n\t\t\t\t\t\trow2.attr('class', 'sja_inset_a')\n\t\t\t\t\t\tif (row1) row1.attr('class', 'sja_menuoption')\n\t\t\t\t\t\tif (row3) row3.attr('class', 'sja_menuoption')\n\t\t\t\t\t\tif (row4) row4.attr('class', 'sja_menuoption')\n\t\t\t\t\t\tif (row5) row5.attr('class', 'sja_menuoption')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\tsketchSplicerna(\n\t\t\t\trow2.append('div').style('vertical-align', 'middle').style('display', 'inline-block').style('padding', '0px'),\n\t\t\t\tthis.usegm,\n\t\t\t\twidth,\n\t\t\t\tcommon.exoncolor\n\t\t\t)\n\t\t\trow2.append('div').style('display', 'inline-block').style('padding', '13px').text(client.gmmode.splicingrna)\n\t\t}\n\t\t// 3 - whole rna\n\t\trow3 = holder\n\t\t\t.append('div')\n\t\t\t.style('margin', '1px')\n\t\t\t.attr('class', this.gmmode == client.gmmode.exononly ? 'sja_inset_a' : 'sja_menuoption')\n\t\t\t.on('click', () => {\n\t\t\t\tif (hideuponselect) {\n\t\t\t\t\tthis.usegmtip.fadeout()\n\t\t\t\t} else {\n\t\t\t\t\trow3.attr('class', 'sja_inset_a')\n\t\t\t\t\tif (row1) row1.attr('class', 'sja_menuoption')\n\t\t\t\t\tif (row2) row2.attr('class', 'sja_menuoption')\n\t\t\t\t\tif (row4) row4.attr('class', 'sja_menuoption')\n\t\t\t\t\tif (row5) row5.attr('class', 'sja_menuoption')\n\t\t\t\t}\n\t\t\t\tthis.setgmmode(client.gmmode.exononly, true)\n\t\t\t})\n\t\tsketchRna(\n\t\t\trow3.append('div').style('vertical-align', 'middle').style('display', 'inline-block').style('padding', '0px'),\n\t\t\tthis.usegm,\n\t\t\twidth,\n\t\t\tcommon.exoncolor\n\t\t)\n\t\trow3\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('padding', '13px')\n\t\t\t.text(this.usegm.exon.length == 1 ? 'RNA' : client.gmmode.exononly)\n\t\t// 4 - protein\n\t\tif (this.usegm.coding) {\n\t\t\trow4 = holder\n\t\t\t\t.append('div')\n\t\t\t\t.style('margin', '1px')\n\t\t\t\t.attr('class', this.gmmode == client.gmmode.protein ? 'sja_inset_a' : 'sja_menuoption')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tif (hideuponselect) {\n\t\t\t\t\t\tthis.usegmtip.fadeout()\n\t\t\t\t\t} else {\n\t\t\t\t\t\trow4.attr('class', 'sja_inset_a')\n\t\t\t\t\t\tif (row1) row1.attr('class', 'sja_menuoption')\n\t\t\t\t\t\tif (row2) row2.attr('class', 'sja_menuoption')\n\t\t\t\t\t\tif (row3) row3.attr('class', 'sja_menuoption')\n\t\t\t\t\t\tif (row5) row5.attr('class', 'sja_menuoption')\n\t\t\t\t\t}\n\t\t\t\t\tthis.setgmmode(client.gmmode.protein, true)\n\t\t\t\t})\n\t\t\tsketchProtein2(\n\t\t\t\trow4.append('div').style('vertical-align', 'middle').style('display', 'inline-block').style('padding', '0px'),\n\t\t\t\tthis.usegm,\n\t\t\t\twidth\n\t\t\t)\n\t\t\trow4.append('div').style('display', 'inline-block').style('padding', '13px').text(client.gmmode.protein)\n\t\t}\n\t\tif (this.allgm.length > 1) {\n\t\t\trow5 = holder\n\t\t\t\t.append('div')\n\t\t\t\t.style('margin', '1px')\n\t\t\t\t.attr('class', this.gmmode == client.gmmode.gmsum ? 'sja_inset_a' : 'sja_menuoption')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tif (hideuponselect) {\n\t\t\t\t\t\tthis.usegmtip.fadeout()\n\t\t\t\t\t} else {\n\t\t\t\t\t\trow5.attr('class', 'sja_inset_a')\n\t\t\t\t\t\tif (row1) row1.attr('class', 'sja_menuoption')\n\t\t\t\t\t\tif (row2) row2.attr('class', 'sja_menuoption')\n\t\t\t\t\t\tif (row3) row3.attr('class', 'sja_menuoption')\n\t\t\t\t\t\tif (row4) row4.attr('class', 'sja_menuoption')\n\t\t\t\t\t}\n\t\t\t\t\tthis.setgmmode(client.gmmode.gmsum, true)\n\t\t\t\t})\n\t\t\trow5\n\t\t\t\t.append('div')\n\t\t\t\t.style('padding', '13px')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.text('Aggregation of ' + this.allgm.length + ' isoforms')\n\t\t}\n\t}\n\n\tallowGenomeMode() {\n\t\t/*\n\t\tallow some mds3 tk to disable genomic view mode, due to gdc ssm genomic range query is not working yet\n\t\t*/\n\t\tfor (const t of this.tklst) {\n\t\t\tif (t.type == 'mds3' && t.mds?.noGenomicMode4lollipopTk) return false\n\t\t}\n\t\treturn true\n\t}\n\n\tshowisoform4switch(holder, hideuponselect) {\n\t\t/*\n\t\tshowing gene in gmmode\n\t\tlist all isoforms to allow switching isoform\n\t\tnow delegates to the reusable isoformSelect component in dom/\n\t\t*/\n\t\tif (!this.allgm) {\n\t\t\tthis.error('this.allgm[] missing')\n\t\t\treturn\n\t\t}\n\t\tif (!this.usegm) {\n\t\t\tthis.error('this.usegm missing')\n\t\t\treturn\n\t\t}\n\n\t\tisoformSelect({\n\t\t\tholder,\n\t\t\tallgm: this.allgm,\n\t\t\tusegm: this.usegm,\n\t\t\tonSelect: async gm1 => {\n\t\t\t\tif (hideuponselect) {\n\t\t\t\t\tthis.usegmtip.fadeout()\n\t\t\t\t}\n\t\t\t\tthis.holder0.selectAll('*').remove()\n\n\t\t\t\t/*\n\t\t\t\tthis selected isoform may not have genomic sequence loaded\n\t\t\t\twhich is initially only loaded in block.init for bb.usegm\n\t\t\t\tnow may need to load it\n\t\t\t\t*/\n\t\t\t\tif (!gm1.genomicseq) {\n\t\t\t\t\tconst data = await dofetch3('ntseq', {\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\t\tgenome: this.genome.name,\n\t\t\t\t\t\t\tcoord: gm1.chr + ':' + (gm1.start + 1) + '-' + gm1.stop\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\tif (data.error) {\n\t\t\t\t\t\tthis.error(data.error)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tgm1.genomicseq = data.seq\n\t\t\t\t\tgm1.aaseq = common.nt2aa(gm1)\n\t\t\t\t}\n\n\t\t\t\t// quick fix based on changes to mds3/maketk\n\t\t\t\tconst tklst = []\n\t\t\t\tfor (const t of this.tklst) {\n\t\t\t\t\tif (t.type == client.tkt.usegm) continue\n\t\t\t\t\tif (t.type == client.tkt.mds3) delete t.mds\n\t\t\t\t\ttklst.push(t)\n\t\t\t\t}\n\t\t\t\tnew Block({\n\t\t\t\t\tholder: this.holder0,\n\t\t\t\t\tgenome: this.genome,\n\t\t\t\t\thostURL: this.hostURL,\n\t\t\t\t\tnobox: true,\n\t\t\t\t\tgmstackheight: 37,\n\t\t\t\t\tusegm: gm1,\n\t\t\t\t\tallgm: this.allgm,\n\t\t\t\t\ttklst,\n\t\t\t\t\tgmmode: gm1.cdslen ? client.gmmode.protein : client.gmmode.exononly,\n\t\t\t\t\thidedatasetexpression: this.hidedatasetexpression,\n\t\t\t\t\thidegenecontrol: this.hidegenecontrol,\n\t\t\t\t\thidegenelegend: this.hidegenelegend,\n\t\t\t\t\tvariantPageCall_snv: this.variantPageCall_snv,\n\t\t\t\t\tsamplecart: this.samplecart,\n\t\t\t\t\tdebugmode: this.debugmode\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t}\n\n\t/** __gm__ ends **/\n\n\t/** __subpanel **/\n\n\tadd_subpanel() {\n\t\t/*\n\tcalled by:\n\t- in ifbusy(), when all tracks of the browser finish loading\n\t- when changing view range for one subpanel (by panning, zooming)\n\t*/\n\n\t\tif (this.subpanels.length == 0) {\n\t\t\tthis.clean_subpanel()\n\t\t\treturn\n\t\t}\n\t\tfor (let panelidx = 0; panelidx < this.subpanels.length; panelidx++) {\n\t\t\tconst panelrecord = this.subpanels[panelidx]\n\n\t\t\tfor (const tk of this.tklst) {\n\t\t\t\tif (tk.hidden) continue\n\n\t\t\t\tif (!tk.subpanels[panelidx]) {\n\t\t\t\t\t/*\n\t\t\t\tmust not closure the panelidx with each tk's subpanel\n\t\t\t\tsince panels from block.subpanels[] can be deleted and array index shifted\n\t\t\t\t*/\n\t\t\t\t\ttk.subpanels[panelidx] = this.new_tk_subpanel(tk, panelrecord)\n\t\t\t\t}\n\n\t\t\t\tconst thispanel = tk.subpanels[panelidx]\n\n\t\t\t\t// position this panel\n\t\t\t\t{\n\t\t\t\t\tlet x = panelrecord.leftpad\n\t\t\t\t\tfor (let i = 0; i < panelidx; i++) {\n\t\t\t\t\t\tx += this.subpanels[i].leftpad + this.subpanels[i].width\n\t\t\t\t\t}\n\t\t\t\t\tthispanel.gtksubpanel.transition().attr('transform', 'translate(' + x + ',0)')\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tthispanel.chr == panelrecord.chr &&\n\t\t\t\t\tthispanel.start == panelrecord.start &&\n\t\t\t\t\tthispanel.stop == panelrecord.stop &&\n\t\t\t\t\tthispanel.width == panelrecord.width\n\t\t\t\t) {\n\t\t\t\t\t// no need to update this panel\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// update this panel in this track\n\t\t\t\tthispanel.chr = panelrecord.chr\n\t\t\t\tthispanel.start = panelrecord.start\n\t\t\t\tthispanel.stop = panelrecord.stop\n\t\t\t\tthispanel.width = panelrecord.width\n\t\t\t\tthispanel.leftpad = panelrecord.leftpad\n\n\t\t\t\tthis.updateruler_subpanel(panelrecord)\n\n\t\t\t\tswitch (tk.type) {\n\t\t\t\t\tcase client.tkt.bam:\n\t\t\t\t\t\tbamload(tk, this)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase client.tkt.bedj:\n\t\t\t\t\t\tbedjloadsubpanel(tk, this, thispanel)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase client.tkt.bigwig:\n\t\t\t\t\t\tbigwigloadsubpanel(tk, this, thispanel)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase client.tkt.bigwigstranded:\n\t\t\t\t\t\tbigwigstrandedloadsubpanel(tk, this, thispanel)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase client.tkt.hicstraw:\n\t\t\t\t\t\thicstrawload(tk, this)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase client.tkt.ase:\n\t\t\t\t\t\taseload(tk, this)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase client.tkt.mdsjunction:\n\t\t\t\t\t\tmdsjunctionload(tk, this)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase client.tkt.mdssvcnv:\n\t\t\t\t\t\tmdssvcnvload(tk, this)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase client.tkt.mds3:\n\t\t\t\t\t\tmds3_load(tk, this)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase client.tkt.bedgraphdot:\n\t\t\t\t\t\tbedgraphdot_load(tk, this)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase client.tkt.mdsexpressionrank:\n\t\t\t\t\t\tmdsexpressionrankload(tk, this)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase client.tkt.aicheck:\n\t\t\t\t\t\taicheckloadsubpanel(tk, this, thispanel)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.clean_subpanel()\n\t}\n\n\tnew_tk_subpanel(tk, panelrecord) {\n\t\t/*\n\tpanelrecord is from block.subpanels[]\n\tcreate an instance of it for this track\n\tokay to keep closure between paneltkinstance with panelrecord\n\t*/\n\n\t\t// panel instance in this track\n\t\t// do not assign chr/start so that it won't match and will trigger track loading\n\t\tconst obj = {\n\t\t\theight: 30 // default dummy height\n\t\t}\n\n\t\tobj.gtksubpanel = tk.gtksubpanels.append('g').on('mousedown', event => {\n\t\t\t// scrolling a sub panel\n\n\t\t\tevent.preventDefault()\n\t\t\tconst body = d3select(document.body)\n\t\t\tconst x = event.clientX\n\n\t\t\tbody\n\t\t\t\t.on('mousemove', event => {\n\t\t\t\t\tpanelrecord.coord.g.attr('transform', 'translate(' + (event.clientX - x) + ',0)')\n\n\t\t\t\t\tfor (const t2 of this.tklst) {\n\t\t\t\t\t\tif (t2.hidden) continue\n\t\t\t\t\t\tconst t2panel = t2.subpanels.find(\n\t\t\t\t\t\t\ti => i.chr == panelrecord.chr && i.start == panelrecord.start && i.stop == panelrecord.stop\n\t\t\t\t\t\t)\n\t\t\t\t\t\tif (t2panel) {\n\t\t\t\t\t\t\tt2panel.glider.attr('transform', 'translate(' + (event.clientX - x) + ',0)')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.log(panelrecord.chr, panelrecord.start, panelrecord.stop)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('mouseup', event => {\n\t\t\t\t\tbody.on('mousemove', null).on('mouseup', null)\n\t\t\t\t\tconst xoff = event.clientX - x\n\t\t\t\t\tif (xoff == 0) return\n\t\t\t\t\t// set new view range\n\t\t\t\t\tconst bpspan = panelrecord.stop - panelrecord.start // bp span won't change when panning\n\t\t\t\t\tconst dist = Math.ceil((Math.abs(xoff) * bpspan) / panelrecord.width)\n\t\t\t\t\tlet shiftback = false\n\t\t\t\t\tif (xoff > 0) {\n\t\t\t\t\t\t// to left\n\t\t\t\t\t\tif (panelrecord.start <= 0) {\n\t\t\t\t\t\t\tshiftback = true\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (panelrecord.start < dist) {\n\t\t\t\t\t\t\t\tpanelrecord.start = 0\n\t\t\t\t\t\t\t\tpanelrecord.stop = dist\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpanelrecord.start -= dist\n\t\t\t\t\t\t\t\tpanelrecord.stop -= dist\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// to right\n\t\t\t\t\t\tconst l = this.genome.chrlookup[panelrecord.chr.toUpperCase()].len\n\t\t\t\t\t\tif (panelrecord.stop >= l) {\n\t\t\t\t\t\t\tshiftback = true\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (panelrecord.stop + dist > l) {\n\t\t\t\t\t\t\t\tpanelrecord.stop = l\n\t\t\t\t\t\t\t\tpanelrecord.start = panelrecord.stop - bpspan\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpanelrecord.start += dist\n\t\t\t\t\t\t\t\tpanelrecord.stop += dist\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (shiftback) {\n\t\t\t\t\t\tpanelrecord.coord.g.transition().attr('transform', 'translate(0,0)')\n\t\t\t\t\t\tfor (const t2 of this.tklst) {\n\t\t\t\t\t\t\tif (t2.hidden) continue\n\t\t\t\t\t\t\tconst t2panel = t2.subpanels.find(\n\t\t\t\t\t\t\t\ti => i.chr == panelrecord.chr && i.start == panelrecord.start && i.stop == panelrecord.stop\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tif (t2panel) {\n\t\t\t\t\t\t\t\tt2panel.glider.transition().attr('transform', 'translate(0,0)')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\t// subpanel panned, reload tracks\n\t\t\t\t\t// for this, must cancel block pan memory so reloading some client-rendered tracks (junction) won't be affected\n\t\t\t\t\tdelete this.pannedpx\n\t\t\t\t\tthis.add_subpanel()\n\t\t\t\t})\n\t\t})\n\n\t\tobj.subpaneltkbgrect = obj.gtksubpanel.append('rect').attr('fill', 'white').attr('fill-opacity', 0)\n\n\t\tobj.glider = obj.gtksubpanel.append('g')\n\n\t\t// important!\n\n\t\tif (tk.type == client.tkt.bedj) {\n\t\t\tobj.img = obj.glider.append('image')\n\t\t} else if (tk.type == client.tkt.bigwig) {\n\t\t\tobj.img = obj.glider.append('image')\n\t\t} else if (tk.type == client.tkt.bigwigstranded) {\n\t\t\tobj.strand1 = {\n\t\t\t\timg: obj.glider.append('image')\n\t\t\t}\n\t\t\tobj.strand2 = {\n\t\t\t\timg: obj.glider.append('image')\n\t\t\t}\n\t\t} else if (tk.type == client.tkt.aicheck) {\n\t\t\tobj.img = obj.glider.append('image')\n\t\t}\n\n\t\tobj.cloak = obj.gtksubpanel.append('g').attr('transform', 'scale(0)')\n\t\tobj.cloakbox = obj.cloak.append('rect').attr('fill', 'white').attr('fill-opacity', 0)\n\t\tobj.cloaktext = obj.cloak\n\t\t\t.append('text')\n\t\t\t.attr('id', 'loadingCloak2')\n\t\t\t.text('Loading ...')\n\t\t\t.attr('fill', common.defaultcolor)\n\t\t\t.attr('fill-opacity', 0)\n\t\t\t.attr('font-weight', 'bold')\n\t\t\t.attr('font-size', '18px')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('dominant-baseline', 'middle')\n\n\t\treturn obj\n\t}\n\n\tclean_subpanel() {\n\t\t// remove excess panels\n\t\tlet removed = false\n\t\tfor (const tk of this.tklst) {\n\t\t\tif (tk.hidden) continue\n\t\t\twhile (tk.subpanels.length > this.subpanels.length) {\n\t\t\t\tconst p = tk.subpanels.pop()\n\t\t\t\tp.gtksubpanel.remove()\n\t\t\t\tremoved = true\n\t\t\t}\n\t\t}\n\t\tif (removed) {\n\t\t\tthis.blocksetw()\n\t\t}\n\t}\n\n\ttkcloakon_subpanel(panel) {\n\t\tpanel.cloak.attr('transform', 'scale(1)')\n\t\tpanel.cloakbox\n\t\t\t.attr('width', panel.width)\n\t\t\t.attr('height', panel.height)\n\t\t\t.transition()\n\t\t\t.duration(600)\n\t\t\t.attr('fill-opacity', 0.5)\n\t\tpanel.cloaktext\n\t\t\t.attr('x', panel.width / 2)\n\t\t\t.attr('y', panel.height / 2)\n\t\t\t.transition()\n\t\t\t.duration(600)\n\t\t\t.attr('fill-opacity', 1)\n\t\tif (panel.gerror) {\n\t\t\tpanel.gerror.remove()\n\t\t}\n\t}\n\n\ttkcloakoff_subpanel(panel, data) {\n\t\tpanel.cloak.attr('transform', 'scale(0)')\n\t\tpanel.cloakbox.attr('fill-opacity', 0)\n\t\tpanel.cloaktext.attr('fill-opacity', 0)\n\t\tpanel.glider.attr('transform', 'translate(0,0)')\n\t\tif (!data) {\n\t\t\tthis.tkerror_subpanel(panel, 'Server error ...')\n\t\t} else if (data.error) {\n\t\t\tthis.tkerror_subpanel(panel, data.error)\n\t\t}\n\t}\n\n\ttkerror_subpanel(panel, msg) {\n\t\tpanel.gerror = panel.glider\n\t\t\t.append('text')\n\t\t\t.text(msg)\n\t\t\t.attr('x', panel.width / 2)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('y', panel.height / 2)\n\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t.attr('font-size', '14px')\n\t}\n\n\tzoombutton_mouseover(fold, zoomout, button) {\n\t\t/* mouse over zoom button\n\tif there are subpanels, show button for subpanels to allow zoom that panel instead of main rglst\n\t*/\n\n\t\tif (this.subpanels.length == 0) return\n\t\t// has subpanels, show options for zooming subpanels\n\n\t\t{\n\t\t\tconst p = button.getBoundingClientRect()\n\t\t\tthis.blocktip\n\t\t\t\t.clear()\n\t\t\t\t.showunder(button)\n\t\t\t\t.d.style('top', null)\n\t\t\t\t.style('bottom', window.innerHeight - p.top - window.pageYOffset + 3 + 'px')\n\t\t}\n\n\t\tthis.blocktip.d\n\t\t\t.append('div')\n\t\t\t.html('ZOOM ' + (zoomout ? 'OUT' : 'IN') + ' ' + fold + ' FOLDS ON A SUB PANEL')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('color', '#858585')\n\t\t\t.style('margin', '5px')\n\n\t\tconst table = this.blocktip.d.append('table')\n\n\t\tfor (const [panelidx, panel] of this.subpanels.entries()) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.text(panel.chr + ':' + panel.start + '-' + panel.stop)\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tconst mid = Math.ceil((panel.start + panel.stop) / 2)\n\t\t\t\t\tconst span = Math.ceil(\n\t\t\t\t\t\tMath.max((panel.stop - panel.start) * (zoomout ? fold : 1 / fold), panel.width / ntpxwidth)\n\t\t\t\t\t)\n\t\t\t\t\tconst chrlen = this.genome.chrlookup[panel.chr.toUpperCase()].len\n\n\t\t\t\t\t// buggy!\n\t\t\t\t\tif (mid < span / 2) {\n\t\t\t\t\t\tpanel.start = 0\n\t\t\t\t\t\tpanel.stop = span\n\t\t\t\t\t} else if (mid + span / 2 > chrlen) {\n\t\t\t\t\t\tpanel.stop = chrlen\n\t\t\t\t\t\tpanel.start = chrlen - span\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpanel.start = mid - Math.ceil(span / 2)\n\t\t\t\t\t\tpanel.stop = panel.start + span\n\t\t\t\t\t}\n\n\t\t\t\t\tpanel.start = Math.max(0, panel.start)\n\t\t\t\t\tpanel.stop = Math.min(panel.stop, chrlen)\n\n\t\t\t\t\tpanel.exonsf = panel.width / (panel.stop - panel.start)\n\n\t\t\t\t\tthis.blocktip.hide()\n\t\t\t\t\tthis.add_subpanel()\n\t\t\t\t})\n\n\t\t\t/*\n\t\ttr.append('td')\n\t\t\t.text('DELETE')\n\t\t\t.attr('class','sja_clbtext')\n\t\t\t.style('font-size','.7em')\n\t\t\t.on('click',()=>{\n\t\t\t\tthis.blocktip.hide()\n\n\t\t\t\tconst _p = this.subpanels.splice(panelidx,1)[0]\n\t\t\t\t_p.coord.g0.remove()\n\n\t\t\t\t// remove instances of this panel from tracks\n\t\t\t\tfor(const t of this.tklst) {\n\t\t\t\t\tif(t.hidden) continue\n\t\t\t\t\tconst thispanel = t.subpanels.splice( panelidx, 1)[0]\n\t\t\t\t\tthispanel.gtksubpanel.remove()\n\t\t\t\t}\n\n\t\t\t\tthis.blocksetw()\n\t\t\t\tthis.block_setheight()\n\t\t\t})\n\t\t\t*/\n\t\t}\n\t}\n\n\tinit_coord_subpanel(panel) {\n\t\t/*\n\tinitialize subpanel\n\tan element from block.subpanels[]\n\t*/\n\t\tpanel.coord = {}\n\t\tpanel.coord.g0 = this.coord.gcoordsubpanels.append('g') // immobile\n\n\t\t// background box works for drag and move\n\t\tpanel.subpanelbgrect = panel.coord.g0.append('rect').attr('y', -this.coordyp1 - this.rulerheight)\n\t\tif (panel.background) {\n\t\t\tpanel.subpanelbgrect.attr('fill', panel.background)\n\t\t} else {\n\t\t\tpanel.subpanelbgrect.attr('fill', 'white').attr('fill-opacity', 0)\n\t\t}\n\n\t\tpanel.subpanelleftborder = panel.coord.g0\n\t\t\t.append('rect')\n\t\t\t.attr('y', -this.coordyp1 - this.rulerheight)\n\t\t\t.attr('x', -panel.leftpad)\n\t\t\t.attr('width', panel.leftpad)\n\t\tif (panel.leftborder) {\n\t\t\tpanel.subpanelleftborder.attr('fill', panel.leftborder)\n\t\t} else {\n\t\t\tpanel.subpanelleftborder.attr('fill', 'white').attr('fill-opacity', 0)\n\t\t}\n\n\t\tpanel.coord.g = panel.coord.g0.append('g') // scrolls\n\t\tpanel.coord.axesg = panel.coord.g.append('g')\n\t\tpanel.coord.grab = panel.coord.g\n\t\t\t.append('rect')\n\t\t\t.attr('fill', 'white')\n\t\t\t.attr('fill-opacity', 0)\n\t\t\t.attr('y', -this.coordyp1 - this.rulerheight)\n\t\t\t.on('mousedown', event => {\n\t\t\t\tthis.rulermousedown(event, panel)\n\t\t\t\t\t.then(tmp => {\n\t\t\t\t\t\tpanel.busy = false\n\t\t\t\t\t\tconst [toofine, startpx, spanpx] = tmp\n\t\t\t\t\t\t/*\n\t\t\t\tif(panel.toselecthlregion) {\n\t\t\t\t\tthis.busy=false\n\t\t\t\t\tdelete this.toselecthlregion\n\t\t\t\t\tconst [startidx,startpos] = this.pxoff2region(startpx)\n\t\t\t\t\tconst [stopidx, stoppos] = this.pxoff2region(startpx+spanpx)\n\t\t\t\t\tconst chr=this.rglst[startidx].chr\n\t\t\t\t\tif(chr==this.rglst[stopidx].chr) {\n\t\t\t\t\t\tthis.addhlregion( chr, Math.min(startpos, stoppos), Math.max(startpos, stoppos) )\n\t\t\t\t\t}\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t*/\n\t\t\t\t\t\t// zoom in\n\t\t\t\t\t\tif (toofine) {\n\t\t\t\t\t\t\t// too fine won't zoom in\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpanel.zoomedin = true\n\t\t\t\t\t\tpanel.start += Math.ceil(startpx / panel.exonsf)\n\t\t\t\t\t\tpanel.stop = panel.start + Math.ceil(spanpx / panel.exonsf)\n\t\t\t\t\t\tpanel.exonsf = panel.width / (panel.stop - panel.start)\n\n\t\t\t\t\t\t// must cancel block pan memory so reloading some client-rendered tracks (junction) won't be affected\n\t\t\t\t\t\tdelete this.pannedpx\n\t\t\t\t\t\tthis.add_subpanel()\n\t\t\t\t\t})\n\t\t\t\t\t.catch(e => {\n\t\t\t\t\t\tif (e == 'busy') return\n\t\t\t\t\t\tthis.error(e.message)\n\t\t\t\t\t\tconsole.log(e.stack)\n\t\t\t\t\t})\n\t\t\t})\n\t}\n\n\tupdateruler_subpanel(panel) {\n\t\t// panel is element from block.subpanels[]\n\n\t\tpanel.coord.g.attr('transform', 'translate(0,0)')\n\n\t\t// if at bplevel, will show nt seq\n\t\tpanel.coord.height =\n\t\t\tthis.coordyp1 + this.rulerheight + this.coordyp2 + (panel.stop - panel.start <= panel.width ? baseheight + 2 : 0)\n\t\tthis.update_ruler_height()\n\n\t\tpanel.coord.grab.attr('height', panel.coord.height)\n\t\tpanel.coord.axesg.selectAll('*').remove()\n\n\t\tconst pxpernt = panel.width / (panel.stop - panel.start) // # pixel per nt\n\n\t\t{\n\t\t\tconst rulerg = panel.coord.axesg.append('g')\n\t\t\t// 0-based to 1-based\n\t\t\tconst domain = [panel.start + 1, panel.stop + 1]\n\t\t\tconst range = [pxpernt / 2, panel.width - pxpernt / 2] // ADJUST shift half nt px width to right\n\n\t\t\t// measure coordinate text width to decide how many ticks to use\n\t\t\tlet maxticknumber\n\t\t\t{\n\t\t\t\tlet w\n\t\t\t\tconst pos = panel.stop\n\t\t\t\trulerg\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.text(pos > 1000000 ? d3format('s')(pos) : d3format(',d')(pos))\n\t\t\t\t\t.attr('font-size', this.rulerfontsize)\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\tw = this.getBBox().width\n\t\t\t\t\t})\n\t\t\t\t\t.remove()\n\t\t\t\tmaxticknumber = Math.floor(panel.width / (w + 60))\n\t\t\t}\n\n\t\t\tconst scale = scaleLinear().domain(domain).range(range)\n\t\t\tconst axis = axisTop().scale(scale).tickSize(this.rulerticksize).ticks(maxticknumber)\n\t\t\tif (panel.stop - panel.start > 1000000) {\n\t\t\t\taxis.tickFormat(d3format('s'))\n\t\t\t} else {\n\t\t\t\taxis.tickFormat(d3format(',d'))\n\t\t\t}\n\t\t\taxisstyle({\n\t\t\t\taxis: rulerg.call(axis),\n\t\t\t\tcolor: 'black',\n\t\t\t\tshowline: true,\n\t\t\t\tfontsize: this.rulerfontsize\n\t\t\t})\n\t\t}\n\n\t\tif (panel.stop - panel.start <= panel.width) {\n\t\t\t// get nt sequence\n\t\t\tconst seqg = panel.coord.axesg.append('g').attr('transform', 'translate(0,' + this.coordyp2 + ')')\n\t\t\tthis.getntsequence4ruler(panel, seqg)\n\t\t}\n\t}\n\n\t/** __subpanel ends **/\n\n\terror(m) {\n\t\tsayerror(this.errdiv, m)\n\t}\n\n\tmoremenu(tip) {\n\t\t// a row of buttons\n\t\t{\n\t\t\tconst row = tip.d.append('div').style('margin-bottom', '10px')\n\n\t\t\t// svg\n\t\t\trow\n\t\t\t\t.append('button')\n\t\t\t\t.text('Export SVG')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ttip.hide()\n\t\t\t\t\timport('./block.svg').then(p => {\n\t\t\t\t\t\tp.default(this)\n\t\t\t\t\t})\n\t\t\t\t})\n\n\t\t\t// dna\n\t\t\trow\n\t\t\t\t.append('button')\n\t\t\t\t.text('Reference DNA sequence')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tmaygetdna(this, tip)\n\t\t\t\t})\n\n\t\t\t// ideogram\n\t\t\tif (this.genome.hasIdeogram) {\n\t\t\t\trow\n\t\t\t\t\t.append('button')\n\t\t\t\t\t.text((this.ideogram.visible ? 'Hide' : 'Show') + ' ideogram')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tthis.toggleIdeogram()\n\t\t\t\t\t\ttip.hide()\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// highlight region\n\t\t{\n\t\t\tconst div = tip.d\n\t\t\t\t.append('div')\n\t\t\t\t.style('border', 'solid 1px #eee')\n\t\t\t\t.style('padding', '10px')\n\t\t\t\t.style('margin', '20px 0px 20px 0px')\n\t\t\tconst row = div.append('div')\n\t\t\trow.append('span').text('Highlight').style('opacity', 0.75).style('padding-right', '10px')\n\t\t\trow\n\t\t\t\t.append('button')\n\t\t\t\t.text('Select a region')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ttip.clear()\n\t\t\t\t\ttip.d.append('div').html('▼ drag on the ruler')\n\t\t\t\t\ttip.d.transition().style('top', Number.parseInt(tip.d.style('top')) - 60 + 'px')\n\t\t\t\t\tthis.toselecthlregion = true\n\t\t\t\t})\n\t\t\trow\n\t\t\t\t.append('button')\n\t\t\t\t.text('Enter regions')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ttip.clear()\n\t\t\t\t\tconst ta = tip.d.append('textarea').attr('rows', 5).attr('cols', 30)\n\t\t\t\t\tconst row = tip.d.append('div').style('margin-top', '3px')\n\t\t\t\t\trow\n\t\t\t\t\t\t.append('button')\n\t\t\t\t\t\t.text('Submit')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tconst str = ta.property('value').trim()\n\t\t\t\t\t\t\tif (!str) return\n\t\t\t\t\t\t\tfor (const line of str.split('\\n')) {\n\t\t\t\t\t\t\t\tconst l = line.split(' ')\n\t\t\t\t\t\t\t\tif (!l[0]) continue\n\t\t\t\t\t\t\t\tconst r = coord.string2pos(\n\t\t\t\t\t\t\t\t\tl[0],\n\t\t\t\t\t\t\t\t\tthis.genome,\n\t\t\t\t\t\t\t\t\ttrue // do not extend\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tif (!r) continue\n\t\t\t\t\t\t\t\tthis.addhlregion(r.chr, r.start, r.stop, l[1] || hlregioncolor)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.moremenu(tip.clear())\n\t\t\t\t\t\t})\n\t\t\t\t\trow\n\t\t\t\t\t\t.append('button')\n\t\t\t\t\t\t.text('Clear')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tta.property('value', '')\n\t\t\t\t\t\t})\n\t\t\t\t\ttip.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.html(\n\t\t\t\t\t\t\t'<ul><li>Limited to adding regions to the current chromosome</li><li>One row per region</li><li>Example row: \"chr1:123-456 #96FAF8\"</li><li>Color is optional, must be hex format</li><li>If provided, separate coordinate and color by space</ul>'\n\t\t\t\t\t\t)\n\t\t\t\t})\n\n\t\t\t// list for editing\n\t\t\tif (this.hlregion.lst.length) {\n\t\t\t\tconst div2 = div.append('div').style('margin-top', '10px')\n\t\t\t\tfor (const h of this.hlregion.lst) {\n\t\t\t\t\tconst row = div2.append('div')\n\t\t\t\t\trow\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.html('✕')\n\t\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tfor (let i = 0; i < this.hlregion.lst.length; i++) {\n\t\t\t\t\t\t\t\tconst h2 = this.hlregion.lst[i]\n\t\t\t\t\t\t\t\tif (h2.chr == h.chr && h2.start == h.start && h2.stop == h.stop) {\n\t\t\t\t\t\t\t\t\tthis.hlregion.lst.splice(i, 1)\n\t\t\t\t\t\t\t\t\th2.rect.remove()\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trow.remove()\n\t\t\t\t\t\t})\n\t\t\t\t\trow\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('color', '#858585')\n\t\t\t\t\t\t.html(' ' + h.chr + ':' + h.start + '-' + h.stop + ' ')\n\t\t\t\t\trow\n\t\t\t\t\t\t.append('input')\n\t\t\t\t\t\t.attr('type', 'color')\n\t\t\t\t\t\t.property('value', h.color)\n\t\t\t\t\t\t.on('change', event => {\n\t\t\t\t\t\t\th.color = event.target.value\n\t\t\t\t\t\t\th.rect.transition().attr('fill', h.color)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// experimental\n\t\tif (!JSON.parse(sessionStorage.getItem('optionalFeatures')).disableBlockExperimentFeatures) {\n\t\t\ttip.d\n\t\t\t\t.append('div')\n\t\t\t\t.text('EXPERIMENTAL')\n\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t.style('margin', '10px 0px 2px 0px')\n\t\t\t\t.style('opacity', 0.5)\n\t\t\ttip.d\n\t\t\t\t.append('button')\n\t\t\t\t.text('Customize mutation class color')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ttip.clear()\n\t\t\t\t\tclient.mclasscolorchangeui(tip)\n\t\t\t\t})\n\t\t}\n\t}\n\n\tinitIdeogram(arg) {\n\t\tconst vpad = 5\n\t\tthis.ideogram = {\n\t\t\twidth: 800,\n\t\t\theight: 20,\n\t\t\tvisible: arg.showIdeogram, // boolean, if ideogram is showing or not\n\t\t\tchr: null // current chr, to be set when rglst is available\n\t\t}\n\t\tthis.ideogram.div = this.holder\n\t\t\t.append('div') // place to show ideogram\n\t\t\t.style('position', 'relative')\n\t\t\t.style('width', this.ideogram.width + 'px')\n\t\t\t.style('margin', '5px')\n\n\t\tthis.ideogram.canvas = this.ideogram.div\n\t\t\t.append('canvas')\n\t\t\t.attr('width', this.ideogram.width)\n\t\t\t.attr('height', this.ideogram.height)\n\t\t\t.style('margin-top', vpad + 'px')\n\n\t\tthis.ideogram.ctx = this.ideogram.canvas.node().getContext('2d')\n\t\tthis.ideogram.blueBox = this.ideogram.div\n\t\t\t.append('div')\n\t\t\t.style('border', 'solid 1px blue')\n\t\t\t.style('position', 'absolute')\n\t\t\t.style('height', this.ideogram.height + vpad * 2 + 'px')\n\t\t\t.style('top', '0px')\n\t}\n\ttoggleIdeogram() {\n\t\tif (!this.ideogram) return\n\t\tthis.ideogram.visible = !this.ideogram.visible\n\t\tif (!this.ideogram.visible) {\n\t\t\tdisappear(this.ideogram.div)\n\t\t\treturn\n\t\t}\n\t\tappear(this.ideogram.div)\n\t\tthis.updateIdeogram()\n\t}\n\tasync updateIdeogram() {\n\t\tif (!this.ideogram) return\n\t\tconst currentChr = this.rglst[0].chr\n\t\tif (currentChr != this.ideogram.chr) await this.plotIdeogram(currentChr)\n\t\t// TODO move blueBox\n\t}\n\tasync plotIdeogram(chr) {\n\t\tif (!this.ideogram) return\n\t\ttry {\n\t\t\tif (!chr) throw 'unknonw chr to show ideogram'\n\t\t\tthis.ideogram.chr = chr\n\t\t\tconst data = await dofetch3('ideogram?genome=' + this.genome.name + '&chr=' + chr)\n\t\t\tif (data.error) throw data.error\n\t\t\tif (!Array.isArray(data)) throw 'data is not array'\n\t\t\tconsole.log(data)\n\t\t\t// TODO plot on canvas\n\t\t} catch (e) {\n\t\t\tthis.error(e.message || e)\n\t\t}\n\t}\n\n\tmds_handle_make(key) {\n\t\t// make handle for a mds dataset, also the click menu for that handle\n\t\tconst ds = this.genome.datasets[key]\n\t\tif (!ds) return\n\t\tconst d0 = this.ctrl.mdsHandleHolder\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('margin-right', '2px')\n\t\t\t.style('border', 'solid 1px black')\n\t\tds.handle = {\n\t\t\tholder: d0\n\t\t}\n\t\tds.handle.labelButton = d0\n\t\t\t.append('div')\n\t\t\t.text(ds.label)\n\t\t\t.attr('class', 'sja_handle_green')\n\t\t\t.on('click', async event => {\n\t\t\t\tthis.blocktip.clear().showunder(event.target)\n\n\t\t\t\tif (ds.mdsIsUninitiated) {\n\t\t\t\t\tconst d = await dofetch3(`getDataset?genome=${this.genome.name}&dsname=${ds.label}`)\n\t\t\t\t\tif (d.error) throw d.error\n\t\t\t\t\tif (!d.ds) throw 'ds missing'\n\t\t\t\t\tObject.assign(ds, d.ds)\n\t\t\t\t\tdelete ds.mdsIsUninitiated\n\t\t\t\t}\n\n\t\t\t\tif (ds.queries) {\n\t\t\t\t\tconst table = this.blocktip.d.append('table')\n\t\t\t\t\t// one tk per tr\n\n\t\t\t\t\tfor (const querykey in ds.queries) {\n\t\t\t\t\t\tif (ds.queries[querykey].hideforthemoment) continue\n\n\t\t\t\t\t\tconst findtkindex = this.tklst.findIndex(t => t.mds && t.mds.label == key && t.querykey == querykey)\n\n\t\t\t\t\t\tconst tr = table.append('tr')\n\t\t\t\t\t\tconst td1 = tr.append('td')\n\t\t\t\t\t\tif (findtkindex != -1) {\n\t\t\t\t\t\t\ttd1.html(' SHOWN').style('color', '#858585').style('font-size', '.8em')\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('padding', '10px 15px')\n\t\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t\t.text(ds.queries[querykey].name)\n\t\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t\tthis.blocktip.hide()\n\t\t\t\t\t\t\t\tif (findtkindex != -1) {\n\t\t\t\t\t\t\t\t\t// shown, to drop\n\t\t\t\t\t\t\t\t\tthis.tk_remove(findtkindex)\n\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.mds_load_query_bykey(ds, { querykey: querykey })\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (ds.about) {\n\t\t\t\t\tthis.blocktip.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('margin', '10px')\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t\t.style('color', '#858585')\n\t\t\t\t\t\t.text('About this dataset')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tthis.blocktip.clear()\n\t\t\t\t\t\t\tclient.make_table_2col(this.blocktip.d, ds.about)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\tasync mds_load_query_bykey(ds, q) {\n\t\t/*\n\t\tofficial ds\n\t\tq comes from datasetqueries of embedding, with customizations\n\t\t*/\n\n\t\tif (ds.mdsIsUninitiated) {\n\t\t\tconst d = await dofetch3(`getDataset?genome=${this.genome.name}&dsname=${ds.label}`)\n\t\t\tif (d.error) throw d.error\n\t\t\tif (!d.ds) throw 'ds missing'\n\t\t\tObject.assign(ds, d.ds)\n\t\t\tdelete ds.mdsIsUninitiated\n\t\t}\n\n\t\tif (!ds.queries) return console.log('ds.queries{} missing')\n\t\tconst tk0 = ds.queries[q.querykey]\n\t\tif (!tk0) return console.log('querykey not found in ds.queries: ' + q.querykey)\n\n\t\tif (tk0.isgenenumeric) {\n\t\t\t// gene numeric values, show gene search box\n\t\t\t// TODO not doing anything yet\n\t\t\treturn\n\t\t}\n\n\t\tif (this.tklst.find(t => t.mds && t.mds.label == ds.label && t.querykey == q.querykey)) {\n\t\t\t// already shown\n\t\t\treturn\n\t\t}\n\n\t\tif (q.singlesample && q.getsampletrackquickfix) {\n\t\t\tconst data = await dofetch3('mdssvcnv', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tgenome: this.genome.name,\n\t\t\t\t\tdslabel: ds.label,\n\t\t\t\t\tquerykey: q.querykey,\n\t\t\t\t\tgettrack4singlesample: q.singlesample.name\n\t\t\t\t})\n\t\t\t})\n\t\t\tif (data.error) throw data.error\n\t\t\tif (data.tracks) {\n\t\t\t\tfor (const t of data.tracks) {\n\t\t\t\t\tconst tk = this.block_addtk_template(t)\n\t\t\t\t\tthis.tk_load(tk)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst tk = this.block_addtk_template(tk0)\n\t\ttk.mds = ds\n\t\ttk.querykey = q.querykey\n\t\tif (q.singlesample) {\n\t\t\t// in sampleview, to show all cnvs, not just focal ones\n\t\t\ttk.bplengthUpperLimit = 0\n\t\t}\n\t\ttk.customization = q\n\n\t\tthis.tk_load(tk)\n\t}\n\n\ttotalheight() {\n\t\tlet h = this.coord.height\n\t\tfor (const t of this.tklst) {\n\t\t\tif (t.hidden) continue\n\t\t\th += t.height\n\t\t}\n\t\treturn h\n\t}\n\n\tnewblock(arg) {\n\t\tif (!arg.holder) return this.error('holder missing')\n\t\targ.genome = this.genome\n\t\targ.hostURL = this.hostURL\n\t\targ.jwt = this.jwt\n\t\targ.nobox = true\n\t\treturn new Block(arg)\n\t}\n\n\tturnOnTrack(arg) {\n\t\tconst lst = Array.isArray(arg) ? arg : [arg]\n\t\tconst toadd = []\n\t\tfor (const t of lst) {\n\t\t\t{\n\t\t\t\tconst [i, tt] = findtrack(this.tklst, t)\n\t\t\t\tif (tt) {\n\t\t\t\t\t// already shown\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst [i, f] = findtrack(this.genome.tracks, t)\n\t\t\tif (f) {\n\t\t\t\ttoadd.push(f)\n\t\t\t} else {\n\t\t\t\ttoadd.push(t)\n\t\t\t}\n\t\t}\n\t\tfor (const f of toadd) {\n\t\t\tdelete f.hidden\n\t\t\tconst t = this.block_addtk_template(f)\n\t\t\tthis.tk_load(t)\n\t\t}\n\t}\n\tturnOffTrack(arg) {\n\t\tconst lst = Array.isArray(arg) ? arg : [arg]\n\t\tfor (const t of lst) {\n\t\t\tconst [idx, f] = findtrack(this.tklst, t)\n\t\t\tif (idx != -1) this.tk_remove(idx)\n\t\t}\n\t}\n\n\tshowTrackByFile(files) {\n\t\tif (!Array.isArray(files)) {\n\t\t\tthis.error('showTrackByFile() argument must be array')\n\t\t\treturn\n\t\t}\n\t\tconst type2files = new Map()\n\t\tfor (const f of files) {\n\t\t\tif (!f.type) {\n\t\t\t\tthis.error('.type missing from a file')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!f.file) {\n\t\t\t\tthis.error('.file missing from a file')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!type2files.has(f.type)) type2files.set(f.type, new Set())\n\t\t\ttype2files.get(f.type).add(f.file)\n\t\t}\n\t\tconst toremove = this.tklst.filter(t => type2files.has(t.type) && !type2files.get(t.type).has(t.file))\n\t\tconst toadd = []\n\t\tfor (const [type, files] of type2files) {\n\t\t\tfor (const file of files) {\n\t\t\t\tconst gt = this.genome.tracks.find(t => t.type == type && t.file == file)\n\t\t\t\tif (gt && !this.tklst.find(t => t.type == type && t.file == file)) {\n\t\t\t\t\t// in genome.tracks but not tklst, to show\n\t\t\t\t\ttoadd.push(gt)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const f of toremove) {\n\t\t\tthis.tk_remove(this.tklst.findIndex(t => t.type == f.type && t.file == f.file))\n\t\t}\n\t\tfor (const f of toadd) {\n\t\t\tconst t = this.block_addtk_template(f)\n\t\t\tthis.tk_load(t)\n\t\t}\n\t}\n\n\t/*********** end of class:Block ************/\n}\n\nfunction findtrack(lst, t) {\n\t// given track object t, find the identical one in lst[]\n\tfor (const [i, f] of lst.entries()) {\n\t\tif (f.type != t.type) continue\n\t\tif (t.type == client.tkt.junction) {\n\t\t\tif (t.file || t.url) {\n\t\t\t\t// t is a single-sample track\n\t\t\t\tif (f.tracks.length == 1) {\n\t\t\t\t\tif (f.tracks[0].file ? f.tracks[0].file == t.file : f.tracks[0].url == t.url) {\n\t\t\t\t\t\treturn [i, f]\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// a multi-sample track,\n\t\t\t\t}\n\t\t\t} else if (t.tracks) {\n\t\t\t\tif (t.tracks.length == 1 && f.tracks.length == 1) {\n\t\t\t\t\t// both single sample\n\t\t\t\t\tif (f.tracks[0].file ? f.tracks[0].file == t.tracks[0].file : f.tracks[0].url == t.tracks[0].url) {\n\t\t\t\t\t\treturn [i, f]\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// number of samples not matching\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// should throw exception\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\t// all other track types\n\t\tif (f.type == t.type && (f.file ? f.file == t.file : f.url == t.url)) {\n\t\t\treturn [i, f]\n\t\t}\n\t}\n\treturn [-1, null]\n}\n\nfunction getrulerunit(span, ticks) {\n\t// not in use\n\tconst u = []\n\tfor (let i = 0; i < 10; i++) {\n\t\tconst p = Math.pow(10, i)\n\t\tu.push(p)\n\t\tu.push(2 * p)\n\t\tu.push(5 * p)\n\t}\n\tfor (let j of u) {\n\t\tif (Math.floor(span / j) <= ticks) {\n\t\t\treturn j\n\t\t}\n\t}\n}\n\nfunction makecoordinput(bb, butrow) {\n\tbb.coord.inputtip = new Menu({\n\t\tpadding: '0px',\n\t\toffsetX: 0,\n\t\toffsetY: 0\n\t})\n\n\tbb.coord.input = butrow\n\t\t.append('input')\n\t\t.attr('type', 'text')\n\t\t.attr('size', 20)\n\t\t.style('margin-left', '10px')\n\t\t.style('padding-right', '20px')\n\t\t.attr('aria-label', 'Genome browser coordinates')\n\n\tbb.coord.inputtipshow = () => {\n\t\tbb.coord.inputtip.clear()\n\t\tconst p = bb.coord.input.node().getBoundingClientRect()\n\t\tbb.coord.inputtip.show(p.left, p.top + p.height + 5)\n\t}\n\n\tbb.coord.input\n\t\t.on('focus', event => {\n\t\t\tevent.target.select()\n\t\t})\n\t\t.on('keyup', event => {\n\t\t\tbb.zoomedin = false\n\t\t\tbb.pannedpx = undefined\n\t\t\tbb.resized = false\n\t\t\tconst input = event.target\n\t\t\tconst v = input.value.trim()\n\t\t\tif (v.length <= 1) {\n\t\t\t\tbb.coord.inputtip.hide()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (client.keyupEnter(event)) {\n\t\t\t\tbb.coord.inputtip.hide()\n\t\t\t\tinput.blur()\n\t\t\t\tbb.jump_1basedcoordinate(v)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (event.code == 'Escape') {\n\t\t\t\tbb.coord.inputtip.hide()\n\t\t\t\tif (bb.rglst.length == 1) {\n\t\t\t\t\tconst r = bb.rglst[0]\n\t\t\t\t\tinput.value = r.chr + ':' + (r.start + 1) + '-' + (r.stop + 1)\n\t\t\t\t}\n\t\t\t\tinput.blur()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (v.length > 6) return\n\t\t\tdebouncer()\n\t\t})\n\n\tasync function genesearch() {\n\t\t// gene name lookup\n\t\tconst v = bb.coord.input.property('value')\n\t\tif (!v) return\n\t\tbb.coord.inputtipshow()\n\t\ttry {\n\t\t\tconst data = await dofetch3('genelookup', {\n\t\t\t\tbody: { genome: bb.genome.name, input: v }\n\t\t\t})\n\t\t\tif (data.error) throw data.error\n\t\t\tif (!data.hits || data.hits.length == 0) return bb.coord.inputtip.hide()\n\t\t\tfor (const s of data.hits) {\n\t\t\t\tbb.coord.inputtip.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t.text(s)\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tbb.coord.inputtip.hide()\n\t\t\t\t\t\tbb.block_jump_gene(s)\n\t\t\t\t\t})\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tbb.inputerr(e.message || e)\n\t\t}\n\t}\n\n\tconst debouncer = debounce(genesearch, 300)\n}\n\n// allgm2sum is now imported from #dom (dom/isoformSelect.ts)\n\nconst dnalenlimit = 100000\n\nasync function maygetdna(block, tip) {\n\ttip.clear()\n\tconst regions = []\n\tfor (let i = block.startidx; i <= block.stopidx; i++) {\n\t\tconst r = block.rglst[i]\n\t\tregions.push({\n\t\t\tchr: r.chr,\n\t\t\tstart: r.start,\n\t\t\tstop: r.stop\n\t\t})\n\t}\n\tconst totallen = regions.reduce((i, j) => i + j.stop - j.start, 0)\n\tif (totallen > dnalenlimit) {\n\t\ttip.d.append('div').text('Please zoom in under ' + common.bplen(dnalenlimit) + ' to get DNA sequence.')\n\t\treturn\n\t}\n\tconst lst = []\n\tfor (const r of regions) {\n\t\tconst coord = r.chr + ':' + (r.start + 1) + '-' + r.stop\n\t\tconst data = await dofetch3('ntseq', {\n\t\t\tmethod: 'POST',\n\t\t\tbody: JSON.stringify({ genome: block.genome.name, coord })\n\t\t})\n\t\tlst.push('>' + coord + '\\n' + data.seq)\n\t}\n\tclient.export_data(\n\t\t'Reference DNA from ' + block.genome.name,\n\t\t[{ text: lst.join('\\n') }],\n\t\t1,\n\t\t1,\n\t\t10,\n\t\t100,\n\t\ttip.d.style('left', '100px')\n\t)\n}\n\nfunction init_cursorhlbar(block) {\n\t// highlight bar under the cursor\n\t// default fill color is registered on block, as the bar can be changed by actions in certain tracks\n\t// eg hover over splice junction. this allows the style to be restored to the bar\n\tblock.cursorhlbarFillColor = '#FFFF99'\n\tblock.cursorhlbar = block.gbase.append('rect').attr('fill', block.cursorhlbarFillColor)\n\n\tblock.gbase\n\t\t.on('mousemove', event => {\n\t\t\t// pointer() accounts for whether block is rotated or not\n\t\t\tconst x = pointer(event, block.gbase.node())[0]\n\n\t\t\tlet xoffset = block.leftheadw + block.lpad\n\n\t\t\tif (x < xoffset) {\n\t\t\t\tblock.cursorhlbar.attr('width', 0)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// if cursor in main block or sub panels, light up bar\n\t\t\tlet barx, barw\n\n\t\t\tif (x < xoffset + block.width) {\n\t\t\t\t// in main block\n\t\t\t\tbarw = Math.max(2, block.exonsf)\n\t\t\t\tbarx = x\n\t\t\t\tif (block.exonsf >= 2) {\n\t\t\t\t\t// at bp level, highlight to a bp\n\t\t\t\t\tbarx -= (x - xoffset) % block.exonsf\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\txoffset += block.width\n\t\t\t\tfor (const panel of block.subpanels) {\n\t\t\t\t\txoffset += panel.leftpad\n\t\t\t\t\tif (x < xoffset + panel.leftpad) {\n\t\t\t\t\t\t// inside left padding, no show\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tif (x < xoffset + panel.leftpad + panel.width) {\n\t\t\t\t\t\t// inside this panel\n\t\t\t\t\t\tbarw = Math.max(2, panel.exonsf)\n\t\t\t\t\t\tbarx = x\n\t\t\t\t\t\tif (panel.exonsf >= 2) {\n\t\t\t\t\t\t\tbarx -= (x - xoffset - panel.leftpad) % panel.exonsf\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\txoffset += panel.leftpad + panel.width\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (barx) {\n\t\t\t\tblock.cursorhlbar.attr('x', barx).attr('width', barw).attr('height', block.totalheight())\n\t\t\t}\n\t\t})\n\t\t.on('mouseout', () => {\n\t\t\tblock.cursorhlbar.attr('width', 0)\n\t\t})\n}\n", "export function bamfromtemplate(tk, template) {\n\tif (!template.file && !template.url && !template.gdcFile) return 'neither file or url given'\n\treturn null\n}\n\nexport function bammaketk(tk, block) {\n\ttk.uninitialized = true\n}\n\nexport function bamload(tk, block) {\n\timport('./block.tk.bam').then(_ => {\n\t\t_.loadTk(tk, block)\n\t})\n}\n", "export function pgvfromtemplate(tk, template) {\n\ttk._template = template\n}\n\nexport function pgvmaketk(tk, block) {\n\ttk.uninitiated = 1\n}\n\nexport function pgvload(tk, block) {\n\timport('./block.tk.pgv').then(p => {\n\t\tp.loadTk(tk, block)\n\t})\n}\n", "export function ldfromtemplate(tk, template) {\n\ttk._template = template\n}\n\nexport function ldmaketk(tk, block) {\n\ttk.uninitiated = 1\n}\n\nexport function ldload(tk, block) {\n\timport('./block.tk.ld').then(p => {\n\t\tp.loadTk(tk, block)\n\t})\n}\n", "export function junctionfromtemplate(tk, template) {\n\tif (!template.tracks) {\n\t\tif (template.file || template.url) {\n\t\t\t/*\n\t\t\tno .tracks[] but has .file/.url\n\t\t\told format of defining single track\n\t\t\tor for adding a member track by clicking a dot in beeswarm plot\n\t\t\t*/\n\t\t\ttemplate.tracks = [\n\t\t\t\t{\n\t\t\t\t\tfile: template.file,\n\t\t\t\t\turl: template.url,\n\t\t\t\t\tindexURL: template.indexURL\n\t\t\t\t}\n\t\t\t]\n\t\t\tdelete template.file\n\t\t\tdelete template.url\n\t\t\tdelete template.indexURL\n\t\t\tdelete tk.file\n\t\t\tdelete tk.url\n\t\t\tdelete tk.indexURL\n\t\t} else {\n\t\t\t// no tracks\n\t\t\treturn '.tracks[] missing from junction track template'\n\t\t}\n\t}\n\ttk.tracks = []\n\tfor (const t0 of template.tracks) {\n\t\tconst t1 = {}\n\t\tfor (const k in t0) {\n\t\t\tt1[k] = t0[k]\n\t\t}\n\t\ttk.tracks.push(t1)\n\t}\n\tif (tk.tracks.length == 0) {\n\t\treturn '.tracks[] has 0 length for junction track'\n\t}\n\n\t/*\n\tINITSETSIZE\n\taxisheight and other size remains undefined\n\tfor it needs to know if the track is single sample or multi-sample\n\tupon first time data load, it will be able to tell that and set size accordingly\n\t*/\n\n\tif (template.categories) {\n\t\ttk.categories = {}\n\t\tfor (const k in template.categories) {\n\t\t\tconst t = template.categories[k]\n\t\t\ttk.categories[k] = {\n\t\t\t\tcolor: t.color,\n\t\t\t\tlabel: t.label\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// no category preconfig, if found .type from data, will create on the fly\n\t\ttk.nocatepreconfig = true\n\t}\n\treturn null\n}\n\nexport function junctionmaketk(tk, block) {\n\ttk.uninitialized = true\n}\n\nexport function junctionload(tk, block) {\n\timport('./block.tk.junction').then(_ => {\n\t\t_.junctionload(tk, block)\n\t})\n}\n", "import { scaleLinear } from 'd3-scale'\nimport { axisLeft, axisRight } from 'd3-axis'\nimport * as client from './client'\nimport { basecolor } from '#shared/common.js'\n\nexport function bampilefromtemplate(tk, template) {\n\tif (!tk.fineheight) {\n\t\ttk.fineheight = 200\n\t}\n\tif (!tk.allheight) {\n\t\ttk.allheight = 100\n\t}\n\tif (!tk.midpad) {\n\t\ttk.midpad = 15\n\t}\n\tif (!tk.fineymax) {\n\t\ttk.fineymax = 50\n\t}\n}\n\nexport function bampilemaketk(tk, block) {\n\ttk.img = tk.glider.append('image').on('click', event => {\n\t\tif (!tk.link) return\n\t\t// if tk.link is provided, will work\n\t\tif (block.exonsf < 1) return\n\t\tconst x = event.clientX - block.svg.node().getBoundingClientRect().left - block.leftheadw - block.lpad\n\t\tconst [ridx, pos] = block.pxoff2region(x)\n\t\tconst chr = block.rglst[ridx].chr\n\t\tconst link = tk.link.replace('__CHR__', chr).replace('__POS__', pos + 1)\n\t\twindow.open(link)\n\t})\n\n\ttk.allaxis = tk.gleft.append('g')\n\ttk.fineaxis = tk.gleft.append('g').attr('transform', 'translate(0,' + (tk.allheight + tk.midpad) + ')')\n\n\ttk.config_handle = block.maketkconfighandle(tk).on('click', event => {\n\t\tconfigpanel(tk, block)\n\t})\n}\n\nexport function bampileload(tk, block) {\n\tblock.tkcloakon(tk)\n\tconst par = [\n\t\t'genome=' + block.genome.name,\n\t\t'fineheight=' + tk.fineheight,\n\t\t'allheight=' + tk.allheight,\n\t\t'midpad=' + tk.midpad,\n\t\t'fineymax=' + tk.fineymax,\n\t\t'regionspace=' + block.regionspace,\n\t\t'width=' + block.width,\n\t\t'rglst=' + JSON.stringify(block.tkarg_rglst())\n\t]\n\tif (tk.usegrade) par.push('usegrade=' + tk.usegrade)\n\tif (tk.file) par.push('file=' + tk.file)\n\telse par.push('url=' + tk.url)\n\tclient\n\t\t.dofetch2('tkbampile?' + par.join('&'))\n\t\t.then(data => {\n\t\t\tif (data.error) throw { message: data.error }\n\n\t\t\tif (data.allgrades) {\n\t\t\t\ttk.grades = data.allgrades\n\t\t\t\ttk.usegrade = data.usegrade\n\t\t\t\t// show controls\n\t\t\t}\n\t\t\ttk.img\n\t\t\t\t.attr('width', block.width)\n\t\t\t\t.attr('height', tk.allheight + tk.midpad + tk.fineheight)\n\t\t\t\t.attr('xlink:href', data.src)\n\t\t\ttk.allaxis.selectAll('*').remove()\n\t\t\tif (data.allmax) {\n\t\t\t\tconst scale = scaleLinear().domain([0, data.allmax]).range([tk.allheight, 0])\n\t\t\t\tclient.axisstyle({\n\t\t\t\t\taxis: tk.allaxis.call(axisRight().scale(scale).ticks(4)),\n\t\t\t\t\tcolor: 'black',\n\t\t\t\t\tshowline: true\n\t\t\t\t})\n\t\t\t}\n\t\t\tconst scale = scaleLinear().domain([0, tk.fineymax]).range([tk.fineheight, 0])\n\t\t\tclient.axisstyle({\n\t\t\t\taxis: tk.fineaxis.call(axisLeft().scale(scale)),\n\t\t\t\tcolor: 'black',\n\t\t\t\tshowline: true\n\t\t\t})\n\t\t})\n\t\t.catch(err => {\n\t\t\tif (err.stack) console.log(err.stack)\n\t\t\treturn err.message\n\t\t})\n\t\t.then(errmsg => {\n\t\t\ttk.height_main = tk.toppad + tk.allheight + tk.midpad + tk.fineheight + tk.bottompad\n\t\t\tblock.tkcloakoff(tk, { error: errmsg })\n\t\t\tblock.block_setheight()\n\t\t})\n}\n\nfunction configpanel(tk, block) {\n\ttk.tkconfigtip.clear().showunder(tk.config_handle.node())\n\tconst holder = tk.tkconfigtip.d\n\n\tif (tk.grades) {\n\t\tconst table = holder.append('table').style('margin-bottom', '10px')\n\t\tfor (const g of tk.grades) {\n\t\t\tconst tr = table.append('tr')\n\t\t\ttr.append('td').html(g == tk.usegrade ? '✔' : '')\n\t\t\ttr.append('td')\n\t\t\t\t.text(g)\n\t\t\t\t.classed('sja_menuoption', true)\n\t\t\t\t.on('click', event => {\n\t\t\t\t\ttk.usegrade = g\n\t\t\t\t\tbampileload(tk, block)\n\t\t\t\t\ttk.tkconfigtip.hide()\n\t\t\t\t})\n\t\t}\n\t} else {\n\t\tholder.append('div').style('margin', '10px').text('No grades yet.')\n\t}\n\t// read depth cutoff\n\t{\n\t\tconst row = holder.append('div').style('margin-bottom', '10px')\n\t\trow.append('div').text('Read depth cutoff:').style('font-size', '.8em')\n\t\tconst input = row\n\t\t\t.append('input')\n\t\t\t.attr('size', 5)\n\t\t\t.on('keyup', event => {\n\t\t\t\tif (event.code != 'Enter') return\n\t\t\t\tconst s = event.target.value\n\t\t\t\tif (!s) return\n\t\t\t\tconst v = Number.parseInt(s)\n\t\t\t\tif (Number.isNaN(v)) return\n\t\t\t\tif (v <= 0) return\n\t\t\t\ttk.fineymax = v\n\t\t\t\tbampileload(tk, block)\n\t\t\t})\n\t\trow\n\t\t\t.append('button')\n\t\t\t.text('Set')\n\t\t\t.style('margin-left', '3px')\n\t\t\t.on('click', event => {\n\t\t\t\tconst s = input.property('value')\n\t\t\t\tif (!s) return\n\t\t\t\tconst v = Number.parseInt(s)\n\t\t\t\tif (Number.isNaN(v)) return\n\t\t\t\tif (v <= 0) return\n\t\t\t\ttk.fineymax = v\n\t\t\t\tbampileload(tk, block)\n\t\t\t})\n\t}\n\tfor (const nt in basecolor) {\n\t\tconst row = holder.append('div').style('margin-bottom', '3px')\n\t\trow\n\t\t\t.append('div')\n\t\t\t.style('width', '12px')\n\t\t\t.style('height', '12px')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('background-color', basecolor[nt])\n\t\t\t.style('margin-right', '10px')\n\t\trow.append('span').text(nt)\n\t}\n}\n", "export function aicheckfromtemplate(tk,template) {\n\tif(!template.file && !template.url) return 'no file or url'\n\treturn null\n}\n\n\nexport function aicheckmaketk(tk,block) {\n\ttk.uninitialized=true\n}\n\n\nexport function aicheckload(tk,block) {\n\timport('./block.tk.aicheck').then(_=>{\n\t\t_.loadTk(tk,block)\n\t})\n}\nexport function aicheckloadsubpanel(tk,block,panel) {\n\timport('./block.tk.aicheck').then(_=>{\n\t\t_.loadTksubpanel(tk,block,panel)\n\t})\n}\n", "import { scaleLinear } from 'd3-scale'\nimport * as d3axis from 'd3-axis'\nimport * as client from './client'\nimport { defaultcolor } from '#shared/common.js'\nimport { format as d3format } from 'd3-format'\nimport { bigwigconfigpanel } from './block.tk.bigwig'\n\nexport function bigwigstrandedfromtemplate(tk, template) {\n\tif (template.strand1) {\n\t\tconst s = {}\n\t\tfor (const k in template.strand1) {\n\t\t\ts[k] = template.strand1[k]\n\t\t}\n\t\ts.scale = {}\n\t\tif (template.strand1.scale) {\n\t\t\tfor (const k in template.strand1.scale) {\n\t\t\t\ts.scale[k] = template.strand1.scale[k]\n\t\t\t}\n\t\t} else {\n\t\t\ts.scale.auto = 1\n\t\t}\n\t\ts.barheight = template.strand1.height || 50\n\t\tif (!s.ncolor) s.ncolor = '#BD005E'\n\t\tif (!s.ncolor2) s.ncolor2 = '#5E00BD'\n\t\tif (!s.pcolor) s.pcolor = '#005EBD'\n\t\tif (!s.pcolor2) s.pcolor2 = '#FA7D00'\n\n\t\tif (s.normalize) {\n\t\t} else {\n\t\t\t// disable by default\n\t\t\ts.normalize = {\n\t\t\t\tdividefactor: 1,\n\t\t\t\tdisable: 1\n\t\t\t}\n\t\t}\n\t\ttk.strand1 = s\n\n\t\tif (!tk.strand1.name) tk.strand1.name = 'Forward'\n\t}\n\tif (template.strand2) {\n\t\tconst s = {}\n\t\tfor (const k in template.strand2) {\n\t\t\ts[k] = template.strand2[k]\n\t\t}\n\t\ts.scale = {}\n\t\tif (template.strand2.scale) {\n\t\t\tfor (const k in template.strand2.scale) {\n\t\t\t\ts.scale[k] = template.strand2.scale[k]\n\t\t\t}\n\t\t} else {\n\t\t\ts.scale.auto = 1\n\t\t}\n\t\ts.barheight = template.strand2.height || 50\n\t\tif (!s.ncolor) s.ncolor = '#BD005E'\n\t\tif (!s.ncolor2) s.ncolor2 = '#5E00BD'\n\t\tif (!s.pcolor) s.pcolor = '#005EBD'\n\t\tif (!s.pcolor2) s.pcolor2 = '#FA7D00'\n\n\t\tif (s.normalize) {\n\t\t} else {\n\t\t\t// disable by default\n\t\t\ts.normalize = {\n\t\t\t\tdividefactor: 1,\n\t\t\t\tdisable: 1\n\t\t\t}\n\t\t}\n\t\ttk.strand2 = s\n\n\t\tif (!tk.strand2.name) tk.strand2.name = 'Reverse'\n\t}\n\n\ttk.height_main =\n\t\ttk.toppad + (tk.strand1 ? tk.strand1.barheight : 0) + (tk.strand2 ? tk.strand2.barheight : 0) + tk.bottompad\n}\n\nexport function bigwigstrandedmaketk(tk, block) {\n\tconst collectlabelw = []\n\n\ttk.tklabel\n\t\t.attr('y', 1) // tk label y position is fixed\n\t\t.each(function () {\n\t\t\tcollectlabelw.push(this.getBBox().width)\n\t\t})\n\n\ttk.labforward = block\n\t\t.maketklefthandle(tk)\n\t\t.text(tk.strand1.name)\n\t\t.each(function () {\n\t\t\tcollectlabelw.push(this.getBBox().width)\n\t\t})\n\ttk.labreverse = block\n\t\t.maketklefthandle(tk)\n\t\t.text(tk.strand2.name)\n\t\t.each(function () {\n\t\t\tcollectlabelw.push(this.getBBox().width)\n\t\t})\n\n\ttk.leftLabelMaxwidth = Math.max(...collectlabelw)\n\n\ttk.leftaxis = tk.gleft.append('g').attr('transform', 'translate(' + block.lpad + ',0)')\n\tif (tk.strand1) {\n\t\ttk.strand1.img = tk.glider.append('image')\n\t}\n\tif (tk.strand2) {\n\t\ttk.strand2.img = tk.glider.append('image')\n\t}\n\n\ttk.config_handle = block.maketkconfighandle(tk).on('click', () => {\n\t\ttk.tkconfigtip.clear().showunder(tk.config_handle.node())\n\t\tconfigpanel(tk, block)\n\t})\n}\n\nexport function bigwigstrandedload(tk, block) {\n\tif (!tk.strand1) {\n\t\ttk.height_main = 50\n\t\tblock.tkcloakoff(tk, { error: tk.name + ': forward strand track missing' })\n\t\tblock.block_setheight()\n\t\treturn\n\t}\n\tif (!tk.strand2) {\n\t\ttk.height_main = 50\n\t\tblock.tkcloakoff(tk, { error: tk.name + ': reverse strand track missing' })\n\t\tblock.block_setheight()\n\t\treturn\n\t}\n\tblock.tkcloakon(tk)\n\n\ttk.strand1.img.attr('width', block.width).attr('height', tk.strand1.barheight)\n\ttk.strand2.img.attr('width', block.width).attr('height', tk.strand2.barheight).attr('y', tk.strand1.barheight)\n\n\t// load strand1\n\n\tconst par1 = block.tkarg_q(tk.strand1)\n\tpar1.name = tk.name + ' forward strand'\n\n\tclient\n\t\t.dofetch('tkbigwig', par1)\n\t\t.then(data => {\n\t\t\tif (data.error) throw 'forward strand error: ' + data.error\n\n\t\t\ttk.strand1.img.attr('xlink:href', data.src)\n\t\t\tif (block.pannedpx != undefined) {\n\t\t\t\t// offset panned distance\n\t\t\t\ttk.strand1.img.attr('x', -block.pannedpx)\n\t\t\t}\n\t\t\tif (data.minv != undefined) {\n\t\t\t\ttk.strand1.scale.min = data.minv\n\t\t\t}\n\t\t\tif (data.maxv != undefined) {\n\t\t\t\ttk.strand1.scale.max = data.maxv\n\t\t\t}\n\t\t\ttk.strand1.nodata = data.nodata\n\n\t\t\t// load strand2\n\n\t\t\tconst par2 = block.tkarg_q(tk.strand2)\n\t\t\tpar2.name = tk.name + ' reverse strand'\n\n\t\t\treturn client.dofetch('tkbigwig', par2).then(data => {\n\t\t\t\tif (data.error) throw 'reverse strand error: ' + data.error\n\t\t\t\ttk.strand2.img.attr('xlink:href', data.src)\n\t\t\t\tif (data.minv != undefined) {\n\t\t\t\t\ttk.strand2.scale.min = data.minv\n\t\t\t\t}\n\t\t\t\tif (data.maxv != undefined) {\n\t\t\t\t\ttk.strand2.scale.max = data.maxv\n\t\t\t\t}\n\t\t\t\ttk.strand2.nodata = data.nodata\n\t\t\t})\n\t\t})\n\t\t.then(() => {\n\t\t\ttk.strand1.img.attr('x', 0) // shift back\n\t\t\tblock.tkcloakoff(tk, {})\n\t\t\ttk.leftaxis.selectAll('*').remove()\n\n\t\t\tconst minvalue = tk.strand2.nodata ? 0 : tk.strand2.scale.min\n\t\t\tconst maxvalue = tk.strand1.nodata ? 0 : tk.strand1.scale.max\n\n\t\t\tconst scale = scaleLinear()\n\t\t\t\t.domain([minvalue, 0, maxvalue])\n\t\t\t\t.range([tk.strand1.barheight + tk.strand2.barheight, tk.strand1.barheight, 0])\n\n\t\t\tlet formatstr = 'r'\n\t\t\tif (tk.integer4axis) {\n\t\t\t\t// show integer\n\t\t\t\tformatstr = 'd'\n\t\t\t}\n\n\t\t\tconst axis = d3axis.axisRight().scale(scale).tickFormat(d3format(formatstr)).tickValues([minvalue, 0, maxvalue])\n\n\t\t\tclient.axisstyle({\n\t\t\t\taxis: tk.leftaxis.call(axis),\n\t\t\t\tcolor: 'black',\n\t\t\t\tshowline: true\n\t\t\t})\n\t\t\ttk.height_main = tk.toppad + tk.strand1.barheight + tk.strand2.barheight + tk.bottompad\n\t\t\ttk.labforward.transition().attr('y', tk.strand1.barheight / 2)\n\t\t\ttk.labreverse.transition().attr('y', tk.strand1.barheight + tk.strand2.barheight / 2)\n\t\t\tblock.block_setheight()\n\n\t\t\tfor (const panel of tk.subpanels) {\n\t\t\t\tbigwigstrandedloadsubpanel(tk, block, panel)\n\t\t\t}\n\t\t})\n\t\t.catch(err => {\n\t\t\ttk.strand1.img.attr('x', 0) // shift back\n\t\t\ttk.height_main = 50\n\t\t\tblock.tkcloakoff(tk, { error: typeof err == 'string' ? err : err.message })\n\t\t\tif (err.stack) console.log(err.stack)\n\t\t\tblock.block_setheight()\n\t\t})\n}\n\nexport function bigwigstrandedloadsubpanel(tk, block, panel) {\n\tblock.tkcloakon_subpanel(panel)\n\n\tpanel.strand1.img.attr('width', panel.width).attr('height', tk.strand1.barheight)\n\tpanel.strand2.img.attr('width', panel.width).attr('height', tk.strand2.barheight).attr('y', tk.strand1.barheight)\n\n\tconst par1 = block.tkarg_q(tk.strand1)\n\tpar1.width = panel.width\n\tpar1.rglst = [\n\t\t{\n\t\t\tchr: panel.chr,\n\t\t\tstart: panel.start,\n\t\t\tstop: panel.stop,\n\t\t\twidth: panel.width\n\t\t}\n\t]\n\tpar1.maxv = tk.strand1.scale.max\n\tpar1.minv = tk.strand1.scale.min\n\tdelete par1.autoscale\n\tdelete par1.percentile\n\n\tclient\n\t\t.dofetch('tkbigwig', par1)\n\t\t.then(data => {\n\t\t\tif (data.error) throw data.error\n\t\t\tpanel.strand1.img.attr('xlink:href', data.src)\n\n\t\t\tconst par2 = block.tkarg_q(tk.strand2)\n\t\t\tpar2.width = panel.width\n\t\t\tpar2.rglst = [\n\t\t\t\t{\n\t\t\t\t\tchr: panel.chr,\n\t\t\t\t\tstart: panel.start,\n\t\t\t\t\tstop: panel.stop,\n\t\t\t\t\twidth: panel.width\n\t\t\t\t}\n\t\t\t]\n\t\t\tpar2.maxv = tk.strand2.scale.max\n\t\t\tpar2.minv = tk.strand2.scale.min\n\t\t\tdelete par2.autoscale\n\t\t\tdelete par2.percentile\n\n\t\t\treturn client.dofetch('tkbigwig', par2).then(data => {\n\t\t\t\tif (data.error) throw data.error\n\t\t\t\tpanel.strand2.img.attr('xlink:href', data.src)\n\t\t\t})\n\t\t})\n\t\t.catch(obj => {\n\t\t\tif (obj.stack) {\n\t\t\t\t// error\n\t\t\t\tconsole.log(obj.stack)\n\t\t\t}\n\t\t\treturn typeof obj == 'string' ? obj : obj.message\n\t\t})\n\t\t.then(errtext => {\n\t\t\tblock.tkcloakoff_subpanel(panel, { error: errtext })\n\t\t})\n}\n\nfunction configpanel(tk, block) {\n\tconst holder = tk.tkconfigtip.d\n\t{\n\t\tconst div = client.labelbox({\n\t\t\tholder: holder,\n\t\t\tmargin: '0px 0px 15px 0px',\n\t\t\tlabel: tk.strand1.name\n\t\t})\n\t\tconst obj = bigwigconfigpanel(tk.strand1, block, div, () => bigwigstrandedload(tk, block))\n\t\tobj.ncolor.row.remove()\n\t\tobj.dotplot.row.remove()\n\t\tif (obj.ncolor2.row) {\n\t\t\tobj.ncolor2.row.remove()\n\t\t}\n\t\tobj.pcolor.lab.text('Color')\n\t\tif (obj.pcolor2.lab) {\n\t\t\tobj.pcolor2.lab.text('Beyond threshold')\n\t\t}\n\t}\n\t{\n\t\tconst div = client.labelbox({\n\t\t\tholder: holder,\n\t\t\tlabel: tk.strand2.name\n\t\t})\n\t\tconst obj = bigwigconfigpanel(tk.strand2, block, div, () => bigwigstrandedload(tk, block))\n\t\tobj.pcolor.row.remove()\n\t\tobj.dotplot.row.remove()\n\t\tif (obj.pcolor2.row) {\n\t\t\tobj.pcolor2.row.remove()\n\t\t}\n\t\tobj.ncolor.lab.text('Color')\n\t\tif (obj.ncolor2.lab) {\n\t\t\tobj.ncolor2.lab.text('Beyong threshold')\n\t\t}\n\t}\n}\n", "import { dofetch3 } from '#common/dofetch'\nimport { bplen, gmmode } from '#shared/common.js'\nimport { legend_newrow } from './block.legend'\nimport { make_one_checkbox } from '#dom'\n\n/*\ntk {\n\t_td_legend\n\n\tcategories{}\n\t\tkey: category key\n\t\tvalue: {color,label}\n\t\tpredefined by gencode tk\n\n\tmainRegionCategory2count{}\n\t\tkey: category key\n\t\tvalue: integer\n\t\treturned from server for main region\n\n\tsubpanels[]\n\t\t.category2count{}\n\t\t\treturned from server for each panel\n}\n\nbedj can only be loaded from POST but not GET\nthe rglst parameter is generated by tkarg_bedj()\nwhich under the protein mode of a big gene, will generate very long parameter string\nand cause url too long error\n\nsolution is for tkarg_bedj or related function to use following parameter:\n{genetrack:'refgene', isoform:'NM_xxx',start:123,stop:456,width:800}\n\nthen the backend needs to recreate rglst[]. all the GET handlers need to do this\n\nthis hardcodes the rglst building logic with backend gene tracks and not extendable to arbitrary rglst from client\n\n*** may not worth the trouble ***\n*/\n\nexport function bedjfromtemplate(tk, template) {\n\ttk.stackheight = template.stackheight || 12\n\ttk.stackspace = template.stackspace || 1\n\ttk.color = tk.color || '#2c9c96'\n\n\tif (template.usevalue) {\n\t\tif (!template.usevalue.key) {\n\t\t\treturn '.usevalue.key missing'\n\t\t}\n\t\ttk.usevalue = {}\n\t\tfor (const k in template.usevalue) {\n\t\t\ttk.usevalue[k] = template.usevalue[k]\n\t\t}\n\t}\n\t/*\n\tsince bedj tk is always loaded via ajax from server\n\twon't break if set it busy here\n\tthis is important for junction tracks\n\tsince somehow some junction tk will finish loading so fast (e.g. with built-in data)\n\tand the gene bedj track hasn't been loaded yet...\n\tthe splice event finder won't run since no gene data loaded!!!\n\t*** this is legacy!! remove once new junction track replaced old TODO\n\t*/\n\ttk.busy = true\n\treturn null\n}\n\nexport function bedjmaketk(tk, block) {\n\ttk.img = tk.glider.append('image')\n\n\tif (tk.categories && block.legend && block.legend.holder) {\n\t\t// has categories, block supports legend, show entry\n\t\tconst [tr, td] = legend_newrow(block, tk.name)\n\t\ttk.tr_legend = tr\n\t\ttk._td_legend = td // private to bedj tk, hardcoded to only show category2count\n\t}\n\n\ttk.config_handle = block.maketkconfighandle(tk).on('click', () => {\n\t\tconfigpanel(tk, block)\n\t})\n}\n\nexport function bedjload(tk, block) {\n\tif (block.viewrangeabovelimit(tk.viewrangeupperlimit)) {\n\t\tblock.tkcloakoff(tk, { error: tk.name + ': zoom in under ' + bplen(tk.viewrangeupperlimit) + ' to view data' })\n\t\ttk.height_main = 30\n\t\ttk.img.attr('width', 1).attr('height', 1)\n\t\tblock.block_setheight()\n\t\treturn\n\t}\n\n\tblock.tkcloakon(tk)\n\tconst arg = block.tkarg_bedj(tk)\n\tif (tk.__isgene) {\n\t\t// is native gene track\n\t\tif (!block.gmmode || block.gmmode == gmmode.genomic) {\n\t\t\t/*\n\t\t\tnot in gene-view\n\t\t\twill provide the flag to server to request gene model data for client use:\n\t\t\t- junction\n\t\t\t*/\n\t\t\targ.__isgene = true\n\t\t}\n\t}\n\n\tdofetch3('tkbedj', { method: 'POST', body: JSON.stringify(arg) }) // to add serverdata\n\t\t.then(data => {\n\t\t\tif (tk.__isgene) {\n\t\t\t\t/*\n\t\t\t\tmay receive gene data\n\t\t\t\t!! gene data must be appended prior to tkcloakoff()\n\t\t\t\twhich calls block.ifbusy(), and will trigger the gene data-based tk-specific actions\n\t\t\t\twhich cannot run if tk.gmdata[] is not updated\n\t\t\t\t*/\n\t\t\t\tif (data.returngmdata) {\n\t\t\t\t\ttk.gmdata = data.returngmdata\n\t\t\t\t} else {\n\t\t\t\t\t// TODO tell if there is too many genes or no gene\n\t\t\t\t\tdelete tk.gmdata\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (data.error) throw { message: data.error }\n\n\t\t\t// always clear data from last query; data from subpanel query will be appended to it to generate legend\n\t\t\ttk.mainRegionCategory2count = data.category2count\n\n\t\t\ttk.img.attr('width', block.width).attr('height', data.height).attr('xlink:href', data.src)\n\n\t\t\ttk.height_main = tk.toppad + data.height + tk.bottompad\n\t\t\treturn data\n\t\t})\n\t\t.catch(err => {\n\t\t\ttk.height_main = 30\n\t\t\tif (err.stack) {\n\t\t\t\tconsole.log(err.stack)\n\t\t\t}\n\t\t\treturn { error: err.message }\n\t\t})\n\t\t.then(data => {\n\t\t\tmayShowCategoryLegend(tk)\n\t\t\tblock.tkcloakoff(tk, data)\n\t\t\tblock.block_setheight()\n\t\t\tblock.bedj_tooltip(tk, data)\n\t\t})\n}\n\nfunction mayShowCategoryLegend(tk) {\n\ttk._td_legend?.selectAll('*').remove()\n\tif (!tk.categories) return // simple fix to require this setting, may fix to support custom tk\n\tconst categories = []\n\t{\n\t\tconst c2c = {} // accumulate category2count data from both main region and all sub panels\n\t\tconst lst = [tk.mainRegionCategory2count]\n\t\tif (tk.subpanels) {\n\t\t\tfor (const p of tk.subpanels) lst.push(p.category2count)\n\t\t}\n\t\tfor (const m of lst) {\n\t\t\tif (!m) continue\n\t\t\tfor (const key in m) {\n\t\t\t\tif (!c2c[key]) c2c[key] = 0\n\t\t\t\tc2c[key] += m[key]\n\t\t\t}\n\t\t}\n\t\tfor (const k in c2c) categories.push([k, c2c[k]])\n\t\tcategories.sort((a, b) => b[1] - a[1])\n\t}\n\tfor (const [key, count] of categories) {\n\t\tconst d = tk._td_legend.append('div').style('display', 'inline-block').style('white-space', 'nowrap')\n\t\td.append('span')\n\t\t\t.style('background', tk.categories[key]?.color || 'black')\n\t\t\t.style('padding', '1px 3px')\n\t\t\t.style('color', 'white')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.text(count)\n\t\td.append('span')\n\t\t\t.style('color', tk.categories[key]?.color || 'black')\n\t\t\t.text(tk.categories[key]?.label || key)\n\t\t\t.style('margin', '0px 20px 0px 5px')\n\t}\n}\n\nexport function bedjloadsubpanel(tk, block, panel) {\n\tif (tk.viewrangeupperlimit && tk.viewrangeupperlimit >= panel.stop - panel.start) {\n\t\tpanel.height = 30\n\t\tpanel.img.attr('width', 1).attr('height', 1)\n\t\tblock.block_setheight()\n\t\treturn\n\t}\n\n\tconst arg = block.tkarg_bedj(tk)\n\targ.width = panel.width\n\targ.rglst = [\n\t\t{\n\t\t\tchr: panel.chr,\n\t\t\tstart: panel.start,\n\t\t\tstop: panel.stop,\n\t\t\twidth: panel.width\n\t\t}\n\t]\n\n\tif (tk.__isgene) {\n\t\t// is native gene track\n\t\tif (!block.gmmode || block.gmmode == gmmode.genomic) {\n\t\t\t/*\n\t\t\tnot in gene-view\n\t\t\twill provide the flag to server to request gene model data for client use:\n\t\t\t- junction\n\t\t\t*/\n\t\t\targ.__isgene = true\n\t\t}\n\t}\n\n\tblock.tkcloakon_subpanel(panel)\n\n\tdofetch3('tkbedj', { method: 'POST', body: JSON.stringify(arg) })\n\t\t.then(data => {\n\t\t\tif (tk.__isgene) {\n\t\t\t\t/*\n\t\t\tmay receive gene data\n\t\t\t!! gene data must be appended prior to tkcloakoff()\n\t\t\twhich calls block.ifbusy(), and will trigger the gene data-based tk-specific actions\n\t\t\twhich cannot run if tk.gmdata[] is not updated\n\t\t\t*/\n\t\t\t\tif (data.returngmdata) {\n\t\t\t\t\tpanel.gmdata = data.returngmdata\n\t\t\t\t} else {\n\t\t\t\t\tdelete panel.gmdata\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (data.error) throw { message: data.error }\n\n\t\t\tpanel.img.attr('width', panel.width).attr('height', data.height).attr('xlink:href', data.src)\n\n\t\t\tpanel.height = data.height + tk.toppad + tk.bottompad\n\n\t\t\t// register updated data on this panel\n\t\t\tpanel.category2count = data.category2count\n\n\t\t\treturn data\n\t\t})\n\t\t.catch(err => {\n\t\t\tpanel.height = 30\n\t\t\tif (err.stack) {\n\t\t\t\tconsole.log(err.stack)\n\t\t\t}\n\t\t\treturn { error: err.message }\n\t\t})\n\t\t.then(data => {\n\t\t\tmayShowCategoryLegend(tk) // rerenders legend with updated data\n\t\t\tblock.tkcloakoff_subpanel(panel, data)\n\t\t\tblock.block_setheight()\n\t\t\tblock.bedj_tooltip(tk, data, panel)\n\t\t})\n}\n\nfunction configpanel(tk, block) {\n\ttk.tkconfigtip.clear().showunder(tk.config_handle.node())\n\tconst holder = tk.tkconfigtip.d\n\n\t// height\n\t{\n\t\tconst row = holder.append('div').style('margin-bottom', '10px')\n\t\trow.append('span').html('Item height ')\n\t\trow\n\t\t\t.append('input')\n\t\t\t.attr('type', 'number')\n\t\t\t.property('value', tk.stackheight)\n\t\t\t.style('width', '50px')\n\t\t\t.on('keyup', event => {\n\t\t\t\tif (event.code != 'Enter' && event.code != 'NumpadEnter') return\n\t\t\t\tconst s = event.target.value\n\t\t\t\tif (s == '') return\n\t\t\t\tconst v = Number.parseInt(s)\n\t\t\t\tif (Number.isNaN(v) || v <= 0) {\n\t\t\t\t\talert('please use positive integer for height')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\ttk.stackheight = v\n\t\t\t\tbedjload(tk, block)\n\t\t\t})\n\t}\n\tif (!tk.categories) {\n\t\t// color\n\t\tconst row = holder.append('div').style('margin-bottom', '10px')\n\t\trow.append('span').html('Color ')\n\t\trow\n\t\t\t.append('input')\n\t\t\t.property('value', tk.color)\n\t\t\t.attr('type', 'color')\n\t\t\t.on('change', event => {\n\t\t\t\ttk.color = event.target.value\n\t\t\t\tbedjload(tk, block)\n\t\t\t})\n\t}\n\t{\n\t\t// hide names\n\t\tconst row = holder.append('div').style('margin-bottom', '10px')\n\t\tmake_one_checkbox({\n\t\t\tholder: row,\n\t\t\tlabeltext: 'Hide item names',\n\t\t\tchecked: tk.hideItemNames,\n\t\t\tcallback: () => {\n\t\t\t\ttk.hideItemNames = !tk.hideItemNames\n\t\t\t\tbedjload(tk, block)\n\t\t\t}\n\t\t})\n\t}\n\t{\n\t\t// filter items\n\t\tconst row = holder.append('div').style('margin-bottom', '10px')\n\t\tmake_one_checkbox({\n\t\t\tholder: row,\n\t\t\tlabeltext: 'Show items by names',\n\t\t\tchecked: tk.filterByName ? true : false,\n\t\t\tcallback: () => {\n\t\t\t\tif (div.style('display') == 'none') {\n\t\t\t\t\t// show ui\n\t\t\t\t\tdiv.style('display', 'block')\n\t\t\t\t} else {\n\t\t\t\t\t// hide ui, also disable filtering\n\t\t\t\t\tdiv.style('display', 'none')\n\t\t\t\t\tdelete tk.filterByName\n\t\t\t\t\tbedjload(tk, block)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tconst div = holder\n\t\t\t.append('div')\n\t\t\t.style('margin', '0px 0px 10px 25px')\n\t\t\t.style('display', tk.filterByName ? 'block' : 'none')\n\t\tconst ta = div.append('textarea').property('rows', 4)\n\t\tif (tk.filterByName) ta.property('value', tk.filterByName)\n\t\tta.property('placeholder', 'One name per row. Case sensitive. Use isoform names for gene track.')\n\t\tdiv\n\t\t\t.append('button')\n\t\t\t.style('display', 'block')\n\t\t\t.text('Submit')\n\t\t\t.on('click', () => {\n\t\t\t\tconst v = ta.property('value').trim()\n\t\t\t\tif (!v) return\n\t\t\t\ttk.filterByName = v\n\t\t\t\tbedjload(tk, block)\n\t\t\t})\n\t}\n}\n", "import * as client from './client'\nimport { table2col } from '#dom'\nimport { scaleLinear } from 'd3-scale'\nimport { axisBottom } from 'd3-axis'\nimport { format as d3format } from 'd3-format'\nimport { select as d3select } from 'd3-selection'\nimport * as coord from './coord'\nimport { legend_newrow } from './block.legend'\nimport { basecompliment, default_text_color } from '#shared/common.js'\nimport { rgb } from 'd3-color'\n\n/*\nthe \"gene model\" track, showing in one of four modes:\n- genomic\n- splicing RNA\n- exon only\n- protein\n- aggregated isoforms\n\n\n\n********************** EXPORTED\n\ngmtkfromtemplate()\ngmtkmaketk()\ngmtkrender()\n\n\n\n********************** INTERNAL\n\nconfigpanel()\nconfigpanel_gmsum()\nrender1gm()\ndomainlegend()\n\n\nTODO make adaptor and split from block bundle\n\n*/\n\nconst linecolor = 'black'\n\nconst exonboundaryclass = 'exonboundaryclass'\n\nexport function gmtkfromtemplate(tk) {\n\ttk.stackheight = tk.stackheight0 = tk.stackheight || 30\n\ttk.stackspace = 5\n\tif (!tk.noncodingcolor) {\n\t\ttk.noncodingcolor = '#ccc'\n\t}\n}\n\nexport function gmtkmaketk(tk, block) {\n\ttk.tklabel.text(block.usegm.name)\n\ttk.isoformlabel = block.maketklefthandle(tk, 13).attr('class', null).text(block.usegm.isoform)\n\tdomainlegend(tk, block)\n\ttk.config_handle = block.maketkconfighandle(tk).on('click', () => {\n\t\tconfigpanel(tk, block)\n\t})\n}\n\nfunction configpanel(tk, block) {\n\t// config panel for gm track\n\ttk.tkconfigtip.clear().showunder(tk.config_handle.node())\n\tconst holder = tk.tkconfigtip.d\n\n\tconst table = holder.append('table')\n\n\t// display mode\n\tconst tr1 = table.append('tr')\n\ttr1.append('td').text(block.gmmode)\n\ttr1\n\t\t.append('td')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.text('switch display mode')\n\t\t.on('click', () => {\n\t\t\ttable.remove()\n\t\t\tblock.showgmmode4switch(holder)\n\t\t})\n\n\t// change isoform\n\tconst tr2 = table.append('tr')\n\tif (block.allgm.length > 1) {\n\t\ttr2.append('td').text(block.usegm.isoform)\n\t\ttr2\n\t\t\t.append('td')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.text('switch isoform')\n\t\t\t.on('click', () => {\n\t\t\t\ttable.remove()\n\t\t\t\tblock.showisoform4switch(holder)\n\t\t\t})\n\t}\n\tif (block.gmmode == client.gmmode.gmsum) {\n\t\t// in gmsum mode, customize isoform\n\t\tconst tr3 = table.append('tr')\n\t\tlet usecount = 0\n\t\tfor (const m of block.allgm) {\n\t\t\tif (!m.hidden) usecount++\n\t\t}\n\t\ttr3\n\t\t\t.append('td')\n\t\t\t.text(\n\t\t\t\tusecount == block.allgm.length\n\t\t\t\t\t? 'Showing all ' + usecount + ' isoforms'\n\t\t\t\t\t: 'Showing ' + usecount + ' of ' + block.allgm.length + ' isoforms'\n\t\t\t)\n\t\ttr3\n\t\t\t.append('td')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.text('show/hide isoforms')\n\t\t\t.on('click', () => {\n\t\t\t\ttable.remove()\n\t\t\t\tconfigpanel_gmsum(block, holder)\n\t\t\t})\n\t\ttable\n\t\t\t.append('tr')\n\t\t\t.append('td')\n\t\t\t.attr('colspan', 2)\n\t\t\t.style('padding-top', '15px')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.html('To rearrange isoforms, drag and move<br>isoform names on the left of the track.')\n\t}\n\n\tif (\n\t\tblock.usegm.exon.length > 1 &&\n\t\t(block.gmmode == client.gmmode.protein || block.gmmode == client.gmmode.exononly)\n\t) {\n\t\t// show/hide exon boundary lines\n\t\tconst tr = table.append('tr')\n\t\ttr.append('td').text('Exon boundary')\n\t\ttr.append('td')\n\t\t\t.append('button')\n\t\t\t.text(tk.exonboundaryhide ? 'show lines' : 'hide lines')\n\t\t\t.on('click', event => {\n\t\t\t\ttk.exonboundaryhide = !tk.exonboundaryhide\n\t\t\t\tevent.target.innerHTML = tk.exonboundaryhide ? 'show lines' : 'hide lines'\n\t\t\t\tblock.usegm.__tkg.selectAll('.' + exonboundaryclass).attr('stroke-opacity', tk.exonboundaryhide ? 0 : 1)\n\t\t\t})\n\t}\n\tif (block.gmmode == client.gmmode.protein || block.gmmode == client.gmmode.exononly) {\n\t\tconst tr = table.append('tr')\n\t\tconst label = tr.append('td').attr('colspan', 2).append('label')\n\t\tlabel\n\t\t\t.append('input')\n\t\t\t.attr('type', 'checkbox')\n\t\t\t.property('checked', tk.noCodonNumberInsideBox)\n\t\t\t.on('change', () => {\n\t\t\t\ttk.noCodonNumberInsideBox = !tk.noCodonNumberInsideBox\n\t\t\t\tgmtkrender(tk, block)\n\t\t\t})\n\t\tlabel.append('span').style('margin-left', '10px').text('Hide codon numbers')\n\t}\n}\n\nfunction configpanel_gmsum(block, holder) {\n\t// group isoforms by gene track name\n\tconst genetkset = new Map()\n\tfor (const g of block.allgm) {\n\t\tif (!g.trackname) {\n\t\t\tclient.sayerror(holder, '.trackname missing for ' + g.isoform)\n\t\t\tcontinue\n\t\t}\n\t\tif (!genetkset.has(g.trackname)) {\n\t\t\tgenetkset.set(g.trackname, new Map())\n\t\t}\n\t\tgenetkset.get(g.trackname).set(g, { hidden: g.hidden })\n\t}\n\tif (genetkset.size == 0) {\n\t\tclient.sayerror(holder, 'no gene track names!')\n\t\treturn\n\t}\n\tfor (const [genetkname, isoformset] of genetkset) {\n\t\tconst row = holder.append('div').style('margin', '5px')\n\t\t// if all isoforms of this track are hidden\n\t\tconst id = Math.random()\n\t\tconst tkcheckbox = row\n\t\t\t.append('input')\n\t\t\t.attr('type', 'checkbox')\n\t\t\t.attr('id', id)\n\t\t\t.on('change', () => {\n\t\t\t\tfor (const obj of isoformset.values()) {\n\t\t\t\t\tobj.checkbox.node().checked = tkcheckbox.node().checked\n\t\t\t\t}\n\t\t\t})\n\t\tlet allhidden = true\n\t\tfor (const obj of isoformset.values()) {\n\t\t\tif (!obj.hidden) {\n\t\t\t\tallhidden = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (!allhidden) {\n\t\t\ttkcheckbox.property('checked', true)\n\t\t}\n\t\trow\n\t\t\t.append('label')\n\t\t\t.html(' ' + genetkname)\n\t\t\t.attr('for', id)\n\t\t\t.attr('class', 'sja_clbtext')\n\t\tfor (const [isoform, obj] of isoformset) {\n\t\t\tconst row = holder.append('div').style('margin', '3px 5px 3px 30px')\n\t\t\tconst id = Math.random()\n\t\t\tobj.checkbox = row.append('input').attr('type', 'checkbox').attr('id', id)\n\t\t\tif (!obj.hidden) {\n\t\t\t\tobj.checkbox.property('checked', true)\n\t\t\t}\n\t\t\trow\n\t\t\t\t.append('label')\n\t\t\t\t.html(\n\t\t\t\t\t' ' +\n\t\t\t\t\t\tisoform.isoform +\n\t\t\t\t\t\t' <span style=\"color:#858585\">' +\n\t\t\t\t\t\t(isoform.cdslen ? Math.ceil(isoform.cdslen / 3) + ' AA' : 'noncoding') +\n\t\t\t\t\t\t'</span>'\n\t\t\t\t)\n\t\t\t\t.attr('for', id)\n\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t}\n\t}\n\tholder\n\t\t.append('button')\n\t\t.style('display', 'block')\n\t\t.style('margin-top', '5px')\n\t\t.text('Apply changes')\n\t\t.on('click', () => {\n\t\t\tlet usecount = 0\n\t\t\tconst isoform2hide = new Set()\n\t\t\tfor (const isoformset of genetkset.values()) {\n\t\t\t\tfor (const [isoform, obj] of isoformset) {\n\t\t\t\t\tconst show = obj.checkbox.node().checked\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\tusecount++\n\t\t\t\t\t} else {\n\t\t\t\t\t\tisoform2hide.add(isoform)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (usecount <= 1) {\n\t\t\t\twindow.alert('Must select at least two isoforms')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfor (const gm of block.allgm) {\n\t\t\t\tgm.hidden = isoform2hide.has(gm)\n\t\t\t}\n\t\t\tdelete block.gmmode\n\t\t\tblock.setgmmode(client.gmmode.gmsum, true)\n\t\t})\n}\n\nexport function gmtkrender(tk, block) {\n\ttk.busy = false\n\tblock.ifbusy()\n\ttk.glider.attr('transform', 'translate(0,0)').selectAll('*').remove()\n\tif (!block.gmmode) {\n\t\tblock.tkerror(tk, 'running usegm track but gmmode not set')\n\t\treturn\n\t}\n\n\tconst collectlabw = []\n\n\tif (block.gmmode == client.gmmode.gmsum) {\n\t\ttk.tklabel.text('')\n\t\ttk.isoformlabel.text('')\n\t\ttk.isoformnames = []\n\t\tconst h = tk.stackheight * 0.7\n\n\t\tlet y = 0\n\t\tfor (const gm of block.allgm) {\n\t\t\tif (gm.hidden) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgm.__tkg = tk.glider.append('g').attr('transform', 'translate(0,' + y + ')')\n\t\t\tgm.__tky = y\n\t\t\trender1gm(gm, h, tk, block)\n\t\t\tconst thislab = gm.__tkg\n\t\t\t\t.append('text')\n\t\t\t\t.text(gm.isoform)\n\t\t\t\t.attr('y', h / 2)\n\t\t\t\t.attr('x', -12)\n\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t.attr('fill', 'black')\n\t\t\t\t.attr('font-size', block.labelfontsize)\n\t\t\t\t.each(function () {\n\t\t\t\t\tcollectlabw.push(this.getBBox().width)\n\t\t\t\t})\n\t\t\t\t.on('mousedown', event => {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tmoveisoform(gm, block, event.clientY, h + tk.stackspace)\n\t\t\t\t})\n\t\t\ttk.isoformnames.push(thislab)\n\t\t\ty += h + tk.stackspace\n\t\t}\n\t\ttk.height_main = y + tk.bottompad\n\t} else {\n\t\ttk.isoformnames = null\n\t\tblock.usegm.__tkg = tk.glider.append('g')\n\t\trender1gm(block.usegm, tk.stackheight, tk, block)\n\t\ttk.height_main = tk.toppad + tk.stackheight + tk.bottompad\n\t\ttk.tklabel.text(block.usegm.name).each(function () {\n\t\t\tcollectlabw.push(this.getBBox().width)\n\t\t})\n\t\ttk.isoformlabel.text(block.usegm.isoform).each(function () {\n\t\t\tcollectlabw.push(this.getBBox().width)\n\t\t})\n\t}\n\ttk.leftLabelMaxwidth = Math.max(...collectlabw)\n\tblock.block_setheight()\n\tblock.setllabel()\n}\n\nfunction render1gm(gm, h, tk, block) {\n\t/*\ngm:\nh: coding exon height, reduced for noncoding exons\ntk:\nblock:\n*/\n\n\t// overall container\n\tconst tkg = gm.__tkg\n\n\t// thickness reduction for noncoding exons\n\tconst thinpad = Math.floor(h / 5)\n\n\t// 1 - get onscreen start/stop for gm in view range\n\n\t// left side of visible part of gm\n\tlet start = null\n\tlet x = 0 // cumulate\n\tfor (let i = block.startidx; i <= block.stopidx; i++) {\n\t\tconst r = block.rglst[i]\n\t\tif (r.chr != gm.chr) {\n\t\t\tx += r.width + block.regionspace\n\t\t\tcontinue\n\t\t}\n\t\tconst a = Math.max(r.start, gm.start),\n\t\t\tb = Math.min(r.stop, gm.stop)\n\t\tif (a < b) {\n\t\t\t// left side of visible part is valid\n\t\t\tstart = x + (r.reverse ? r.stop - b : a - r.start) * block.exonsf\n\t\t\tbreak\n\t\t}\n\t\tx += r.width + block.regionspace\n\t}\n\tif (start == null) {\n\t\ttkg\n\t\t\t.append('text')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('fill', linecolor)\n\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t.attr('font-size', Math.min(15, h))\n\t\t\t.attr('x', block.width / 2)\n\t\t\t.attr('y', h / 2)\n\t\t\t.text(gm.name + ' ' + gm.isoform + ' is not in view range')\n\t\treturn\n\t}\n\t// right side of visible part of gm\n\tlet stop = null\n\tx = 0\n\tfor (let i = block.startidx; i <= block.stopidx; i++) {\n\t\tconst r = block.rglst[i]\n\t\tif (r.chr != gm.chr) {\n\t\t\tx += r.width + block.regionspace\n\t\t\tcontinue\n\t\t}\n\t\tconst a = Math.max(r.start, gm.start),\n\t\t\tb = Math.min(r.stop, gm.stop)\n\t\tif (a < b) {\n\t\t\tstop = x + (r.reverse ? r.stop - a : b - r.start) * block.exonsf\n\t\t\t// don't break here keep looking till end of rglst to find max stop\n\t\t}\n\t\tx += r.width + block.regionspace\n\t}\n\tif (stop == null) {\n\t\tconsole.log('should not happen: stop position not found')\n\t\ttkg\n\t\t\t.append('text')\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t.attr('font-size', Math.min(15, h))\n\t\t\t.attr('x', block.width / 2)\n\t\t\t.attr('y', h / 2)\n\t\t\t.text(gm.name + ' not in view range')\n\t\treturn\n\t}\n\n\t// 2 - backdrop horizontal line from start to end\n\tconst startinvr = start\n\tconst stopinvr = stop\n\ttkg\n\t\t.append('line')\n\t\t.attr('x1', startinvr)\n\t\t.attr('y1', h / 2)\n\t\t.attr('x2', stopinvr)\n\t\t.attr('y2', h / 2)\n\t\t.attr('stroke', linecolor)\n\t\t.attr('shape-rendering', 'crispEdges')\n\n\t// collect all exonic boxes, for showing kicker\n\tconst eboxes = []\n\n\t// 3 - thin box for noncoding exon\n\t// collect them for printing nt letters later\n\tconst thinlst = []\n\n\tif (block.gmmode != client.gmmode.protein) {\n\t\tif (gm.utr5) {\n\t\t\tthinlst.push(...gm.utr5)\n\t\t}\n\t\tif (gm.utr3) {\n\t\t\tthinlst.push(...gm.utr3)\n\t\t}\n\t\tif (gm.exon && !gm.coding) {\n\t\t\t// this is a noncoding gene\n\t\t\tthinlst.push(...gm.exon)\n\t\t}\n\t\tfor (const e of thinlst) {\n\t\t\tx = 0\n\t\t\tfor (let i = block.startidx; i <= block.stopidx; i++) {\n\t\t\t\tconst r = block.rglst[i]\n\t\t\t\tif (r.chr != gm.chr) {\n\t\t\t\t\tx += r.width + block.regionspace\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst start = Math.max(r.start, e[0]),\n\t\t\t\t\tstop = Math.min(r.stop, e[1])\n\t\t\t\tif (start >= stop) {\n\t\t\t\t\tx += r.width + block.regionspace\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst b = tkg\n\t\t\t\t\t.append('rect')\n\t\t\t\t\t.attr('x', x + (r.reverse ? r.stop - stop : start - r.start) * block.exonsf)\n\t\t\t\t\t.attr('y', thinpad)\n\t\t\t\t\t.attr('width', Math.max(1, (stop - start) * block.exonsf))\n\t\t\t\t\t.attr('height', h - thinpad * 2)\n\t\t\t\t\t.attr('fill', tk.noncodingcolor)\n\t\t\t\teboxes.push({ b: b, r: r, start: start, stop: stop })\n\t\t\t}\n\t\t}\n\t}\n\n\t// 4 - thick box coding and domain\n\tif (gm.pdomains) {\n\t\tgm.pdomains.sort((a, b) => b.stop - b.start - (a.stop - a.start))\n\t}\n\t// for drawing protein box if in view range\n\tlet viewcodingstartpx = null,\n\t\tviewcodingstart = null, // genomic coord\n\t\tviewcodingstoppx = null,\n\t\tviewcodingstop = null\n\tif (gm.coding) {\n\t\tfor (let ei = 0; ei < gm.coding.length; ei++) {\n\t\t\tconst e = gm.coding[ei]\n\t\t\tx = 0\n\t\t\tfor (let ri = block.startidx; ri <= block.stopidx; ri++) {\n\t\t\t\tconst r = block.rglst[ri]\n\t\t\t\tif (r.chr != gm.chr) {\n\t\t\t\t\tx += r.width + block.regionspace\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst start = Math.max(r.start, e[0]),\n\t\t\t\t\tstop = Math.min(r.stop, e[1])\n\t\t\t\tif (start >= stop) {\n\t\t\t\t\tx += r.width + block.regionspace\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// will draw a thick box\n\t\t\t\tconst boxstart = x + (r.reverse ? r.stop - stop : start - r.start) * block.exonsf\n\t\t\t\tconst boxwidth = Math.max(1, (stop - start) * block.exonsf)\n\t\t\t\tif (viewcodingstartpx == null) {\n\t\t\t\t\tviewcodingstartpx = boxstart\n\t\t\t\t\tviewcodingstart = start\n\t\t\t\t\tviewcodingstop = stop\n\t\t\t\t} else {\n\t\t\t\t\tviewcodingstart = Math.min(start, viewcodingstart)\n\t\t\t\t\tviewcodingstop = Math.max(stop, viewcodingstop)\n\t\t\t\t}\n\t\t\t\tviewcodingstoppx = boxstart + boxwidth\n\t\t\t\t// white bg\n\t\t\t\tconst b = tkg.append('rect').attr('x', boxstart).attr('width', boxwidth).attr('height', h).attr('fill', 'white')\n\t\t\t\teboxes.push({ b: b, r: r, start: start, stop: stop })\n\t\t\t\t// domain?\n\t\t\t\tif (gm.pdomains) {\n\t\t\t\t\tlet exoncdsstart = 0\n\t\t\t\t\tfor (let j = 0; j < ei; j++) {\n\t\t\t\t\t\texoncdsstart += gm.coding[j][1] - gm.coding[j][0]\n\t\t\t\t\t}\n\t\t\t\t\tconst cdsstart = exoncdsstart + (r.reverse ? e[1] - stop : start - e[0])\n\t\t\t\t\tconst cdsstop = exoncdsstart + (r.reverse ? e[1] - start : stop - e[0])\n\t\t\t\t\tfor (const domain of gm.pdomains) {\n\t\t\t\t\t\tif (domain.name + domain.description in gm.domain_hidden) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst dstart = Math.max(cdsstart, (domain.start - 1) * 3)\n\t\t\t\t\t\tconst dstop = Math.min(cdsstop, domain.stop * 3)\n\t\t\t\t\t\tif (dstart < dstop) {\n\t\t\t\t\t\t\ttkg\n\t\t\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t\t\t// FIXME assumed that the rglst can only be in 5'-3' order!!!\n\t\t\t\t\t\t\t\t.attr('x', boxstart + (dstart - cdsstart) * block.exonsf)\n\t\t\t\t\t\t\t\t.attr('width', Math.max(1, (dstop - dstart) * block.exonsf))\n\t\t\t\t\t\t\t\t.attr('height', h)\n\t\t\t\t\t\t\t\t.attr('fill', domain.color)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (block.gmmode != client.gmmode.protein && block.gmmode != client.gmmode.exononly) {\n\t\t\t\t\t// enclosing box for each coding exon\n\t\t\t\t\tif (start == e[0]) {\n\t\t\t\t\t\tconst _x = boxstart + (r.reverse ? boxwidth : 0)\n\t\t\t\t\t\ttkg.append('line').attr('x1', _x).attr('x2', _x).attr('y2', h).attr('stroke', linecolor)\n\t\t\t\t\t}\n\t\t\t\t\tif (stop == e[1]) {\n\t\t\t\t\t\tconst _x = boxstart + (r.reverse ? 0 : boxwidth)\n\t\t\t\t\t\ttkg.append('line').attr('x1', _x).attr('x2', _x).attr('y2', h).attr('stroke', linecolor)\n\t\t\t\t\t}\n\t\t\t\t\ttkg\n\t\t\t\t\t\t.append('line')\n\t\t\t\t\t\t.attr('x1', boxstart)\n\t\t\t\t\t\t.attr('x2', boxstart + boxwidth)\n\t\t\t\t\t\t.attr('stroke', linecolor)\n\t\t\t\t\ttkg\n\t\t\t\t\t\t.append('line')\n\t\t\t\t\t\t.attr('x1', boxstart)\n\t\t\t\t\t\t.attr('x2', boxstart + boxwidth)\n\t\t\t\t\t\t.attr('y1', h)\n\t\t\t\t\t\t.attr('y2', h)\n\t\t\t\t\t\t.attr('stroke', linecolor)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 5 - enclosing box of entire coding region\n\tif (block.gmmode == client.gmmode.exononly || block.gmmode == client.gmmode.protein) {\n\t\tif (viewcodingstartpx != null && viewcodingstoppx != null) {\n\t\t\ttkg.append('line').attr('x1', viewcodingstartpx).attr('x2', viewcodingstoppx).attr('stroke', linecolor)\n\t\t\ttkg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('x1', viewcodingstartpx)\n\t\t\t\t.attr('x2', viewcodingstoppx)\n\t\t\t\t.attr('y1', h)\n\t\t\t\t.attr('y2', h)\n\t\t\t\t.attr('stroke', linecolor)\n\t\t\t// FIXME association of codingstart and px is not clear\n\t\t\tconst reverse = gm.strand == '-'\n\t\t\tif (viewcodingstart == gm.codingstart) {\n\t\t\t\ttkg\n\t\t\t\t\t.append('line')\n\t\t\t\t\t.attr('x1', reverse ? viewcodingstoppx : viewcodingstartpx)\n\t\t\t\t\t.attr('x2', reverse ? viewcodingstoppx : viewcodingstartpx)\n\t\t\t\t\t.attr('y2', h)\n\t\t\t\t\t.attr('stroke', linecolor)\n\t\t\t}\n\t\t\tif (viewcodingstop == gm.codingstop) {\n\t\t\t\ttkg\n\t\t\t\t\t.append('line')\n\t\t\t\t\t.attr('x1', reverse ? viewcodingstartpx : viewcodingstoppx)\n\t\t\t\t\t.attr('x2', reverse ? viewcodingstartpx : viewcodingstoppx)\n\t\t\t\t\t.attr('y2', h)\n\t\t\t\t\t.attr('stroke', linecolor)\n\t\t\t}\n\t\t}\n\t\t// exon boundary\n\t\tfor (let i = block.startidx; i < block.stopidx; i++) {\n\t\t\tconst r = block.rglst[i]\n\t\t\tif (r.chr != gm.chr) continue\n\t\t\tx = 0\n\t\t\tfor (let j = block.startidx; j < i; j++) {\n\t\t\t\tx += block.rglst[j].width + block.regionspace\n\t\t\t}\n\t\t\tlet thin = true\n\t\t\tif (gm.coding) {\n\t\t\t\tif (r.reverse) {\n\t\t\t\t\tthin = r.start <= gm.codingstart || r.start >= gm.codingstop\n\t\t\t\t} else {\n\t\t\t\t\tthin = r.stop <= gm.codingstart || r.stop >= gm.codingstop\n\t\t\t\t}\n\t\t\t}\n\t\t\ttkg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('class', exonboundaryclass)\n\t\t\t\t.attr('x1', x + r.width + block.regionspace / 2)\n\t\t\t\t.attr('x2', x + r.width + block.regionspace / 2)\n\t\t\t\t.attr('y1', thin ? thinpad : 0)\n\t\t\t\t.attr('y2', h - (thin ? thinpad : 0))\n\t\t\t\t.attr('stroke', linecolor)\n\t\t\t\t.attr('stroke-dasharray', '4,2')\n\t\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t\t.attr('stroke-opacity', tk.exonboundaryhide ? 0 : 1)\n\t\t}\n\t}\n\n\tconst showntseq = block.exonsf >= 6\n\n\t// 6 - aa sequence and position\n\tif (\n\t\tgm.coding &&\n\t\t(block.gmmode == client.gmmode.protein ||\n\t\t\tblock.gmmode == client.gmmode.exononly ||\n\t\t\tblock.gmmode == client.gmmode.splicingrna)\n\t) {\n\t\t// is protein\n\t\tconst showaaseq = block.exonsf >= 2\n\t\tconst rowh = (h - 2) / 3\n\t\t// show aa\n\t\tlet utr5len\n\t\tif (block.gmmode == client.gmmode.protein) {\n\t\t\t// not using utr\n\t\t\tutr5len = 0\n\t\t} else {\n\t\t\tutr5len = gm.utr5 ? gm.utr5.reduce((a, b) => a + b[1] - b[0], 0) : 0\n\t\t}\n\n\t\tconst aadomain = [],\n\t\t\taarange = []\n\t\tfor (let i = block.startidx; i <= block.stopidx; i++) {\n\t\t\tconst r = block.rglst[i]\n\t\t\tif (r.chr != gm.chr) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tx = 0\n\t\t\tfor (let j = block.startidx; j < i; j++) {\n\t\t\t\tx += block.rglst[j].width + block.regionspace\n\t\t\t}\n\t\t\tconst rstartexonbp = block.regioncumlen(i)\n\t\t\tconst rstopexonbp = rstartexonbp + r.stop - r.start\n\t\t\tif (rstartexonbp >= utr5len + gm.cdslen || rstopexonbp <= utr5len) {\n\t\t\t\t// not in block region\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlet cdsstart, pxstart\n\t\t\tif (rstartexonbp < utr5len) {\n\t\t\t\tcdsstart = 0\n\t\t\t\tpxstart = (utr5len - rstartexonbp) * block.exonsf\n\t\t\t} else {\n\t\t\t\tcdsstart = rstartexonbp - utr5len\n\t\t\t\tpxstart = 0\n\t\t\t}\n\n\t\t\t/* TRICKY!!!\n\t\t\toffset value is usually 0\n\t\t\tif startCodonFrame is specified, will set non-0 value\n\t\t\tfor modifying nt array index below while iterating through whose nt that will be translated\n\t\t\tthis is because gm.cdseq (CDS sequence) contains extra nts associated with startCodonFrame\n\t\t\t*/\n\t\t\tconst codonNtOffset = gm.startCodonFrame ? 3 - gm.startCodonFrame : 0\n\n\t\t\tconst cdsstop = Math.min(gm.cdslen, rstopexonbp - utr5len)\n\n\t\t\t/*\n\t\tFIXME\n\t\tdomain/range of the aa position scale is imprecise\n\t\t*/\n\t\t\taadomain.push(1 + Math.floor(cdsstart / 3))\n\t\t\taarange.push(x + pxstart + block.exonsf * (cdsstart % 3 == 0 ? 1.5 : cdsstart % 3 == 1 ? 0.5 : -0.5))\n\t\t\taadomain.push(1 + Math.floor(cdsstop / 3))\n\t\t\taarange.push(x + pxstart + (cdsstop - cdsstart) * block.exonsf)\n\t\t\tif (showntseq) {\n\t\t\t\t// must not include cdsstop\n\t\t\t\tfor (let j = cdsstart; j < cdsstop; j++) {\n\t\t\t\t\t// shade over a codon\n\n\t\t\t\t\tconst j2 = j - codonNtOffset // modified index\n\n\t\t\t\t\tif (Math.floor(j2 / 3) % 2 == 0) {\n\t\t\t\t\t\ttkg\n\t\t\t\t\t\t\t.append('rect')\n\t\t\t\t\t\t\t.attr('x', x + pxstart + (j - cdsstart) * block.exonsf)\n\t\t\t\t\t\t\t.attr('width', block.exonsf)\n\t\t\t\t\t\t\t.attr('height', rowh * 2)\n\t\t\t\t\t\t\t.attr('fill', 'black')\n\t\t\t\t\t\t\t.attr('fill-opacity', 0.1)\n\t\t\t\t\t}\n\t\t\t\t\ttkg\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text(gm.cdseq[j]) // do not use j2 here\n\t\t\t\t\t\t.attr('font-size', rowh)\n\t\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t\t.attr('fill', 'black')\n\t\t\t\t\t\t.attr('x', x + pxstart + (j - cdsstart + 0.5) * block.exonsf)\n\t\t\t\t\t\t.attr('y', 2 + rowh / 2)\n\t\t\t\t\t\t.attr('font-family', 'Courier') // no override; customary to show nucleotide/aa in this font\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (cdsstart % 3 == 2) {\n\t\t\t\t// trim one bp\n\t\t\t\tcdsstart++\n\t\t\t\tpxstart += block.exonsf\n\t\t\t}\n\t\t\tif (showaaseq) {\n\t\t\t\t// must not include cdsstop\n\t\t\t\tfor (let j = cdsstart; j < cdsstop; j++) {\n\t\t\t\t\tconst j2 = j - codonNtOffset // modified index\n\n\t\t\t\t\tif (j2 % 3 != 1) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\ttkg\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text(gm.aaseq[Math.floor(j2 / 3)])\n\t\t\t\t\t\t.attr('font-size', rowh)\n\t\t\t\t\t\t.attr('font-weight', 'bold')\n\t\t\t\t\t\t.attr('fill', 'black')\n\t\t\t\t\t\t.attr('dominant-baseline', showntseq ? 'central' : 'auto')\n\t\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t\t.attr('x', x + pxstart + (j - cdsstart + 0.5) * block.exonsf) // do not use j2 here\n\t\t\t\t\t\t.attr('y', h / 2)\n\t\t\t\t\t\t.attr('font-family', 'Courier') // no override; customary to show nucleotide/aa in this font\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (aadomain.length && !tk.noCodonNumberInsideBox) {\n\t\t\tconst scale = scaleLinear().domain(aadomain).range(aarange)\n\t\t\tclient.axisstyle({\n\t\t\t\taxis: tkg\n\t\t\t\t\t.append('g')\n\t\t\t\t\t.attr('transform', 'translate(0,' + (showaaseq ? (showntseq ? rowh * 2 : h / 2) : h / 2) + ')')\n\t\t\t\t\t.call(axisBottom().scale(scale).tickSize(0).tickFormat(d3format('d'))),\n\t\t\t\tcolor: 'black',\n\t\t\t\tshowline: false,\n\t\t\t\tfontsize: rowh\n\t\t\t})\n\t\t}\n\t}\n\n\t// 7 - nt sequence in noncoding exons\n\tif (showntseq && gm.genomicseq) {\n\t\tconst rowh = (h - 2) / 3\n\t\tfor (const e of thinlst) {\n\t\t\tx = 0\n\t\t\tfor (let i = block.startidx; i <= block.stopidx; i++) {\n\t\t\t\tconst r = block.rglst[i]\n\t\t\t\tif (r.chr != gm.chr) {\n\t\t\t\t\tx += r.width + block.regionspace\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst start = Math.max(r.start, e[0]),\n\t\t\t\t\tstop = Math.min(r.stop, e[1])\n\t\t\t\tif (start >= stop) {\n\t\t\t\t\tx += r.width + block.regionspace\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor (let j = start; j < stop; j++) {\n\t\t\t\t\tlet nt = gm.genomicseq[j - gm.start]\n\t\t\t\t\tif (r.reverse) {\n\t\t\t\t\t\tnt = basecompliment(nt)\n\t\t\t\t\t}\n\t\t\t\t\ttkg\n\t\t\t\t\t\t.append('text')\n\t\t\t\t\t\t.text(nt)\n\t\t\t\t\t\t.attr('font-size', rowh)\n\t\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t\t.attr('fill', 'black')\n\t\t\t\t\t\t.attr('font-family', 'Courier') // no override; customary to show nucleotide/aa in this font\n\t\t\t\t\t\t.attr(\n\t\t\t\t\t\t\t'x',\n\t\t\t\t\t\t\tx +\n\t\t\t\t\t\t\t\t(r.reverse\n\t\t\t\t\t\t\t\t\t? (r.stop - stop) * block.exonsf + (stop - start) * block.exonsf - (j - start + 0.5) * block.exonsf\n\t\t\t\t\t\t\t\t\t: (start - r.start) * block.exonsf + (j - start + 0.5) * block.exonsf)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.attr('y', h / 2)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 8 - invisible cover for tooltipping\n\tfor (const e of eboxes) {\n\t\ttkg\n\t\t\t.append('rect')\n\t\t\t.attr('x', e.b.attr('x'))\n\t\t\t.attr('y', e.b.attr('y'))\n\t\t\t.attr('width', e.b.attr('width'))\n\t\t\t.attr('height', e.b.attr('height'))\n\t\t\t.attr('fill', '#858585')\n\t\t\t.attr('fill-opacity', 0)\n\t\t\t.on('mouseover', event => event.target.setAttribute('fill-opacity', 0.2))\n\t\t\t.on('mousemove', event => coord2legend(tk, event, e.r, e.start, e.stop, gm, block, h))\n\t\t\t.on('mouseout', event => {\n\t\t\t\tevent.target.setAttribute('fill-opacity', 0)\n\t\t\t\ttk.tktip.hide()\n\t\t\t})\n\t}\n}\n\nfunction moveisoform(gm, block, y0, height) {\n\tconst body = d3select(document.body)\n\tbody.on('mousemove', event => {\n\t\tconst dy = event.clientY - y0\n\t\tgm.__tkg.attr('transform', 'translate(0,' + (gm.__tky + dy) + ')')\n\t\tlet gmidx = 0\n\t\tfor (let i = 0; i < block.allgm.length; i++) {\n\t\t\tif (block.allgm[i].isoform == gm.isoform) {\n\t\t\t\tgmidx = i\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (dy < 0 && gmidx > 0) {\n\t\t\tlet t2idx = gmidx - 1,\n\t\t\t\tt2 = block.allgm[t2idx]\n\t\t\twhile (t2.hidden) {\n\t\t\t\tt2idx--\n\t\t\t\tif (t2idx < 0) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tt2 = block.allgm[t2idx]\n\t\t\t}\n\t\t\tif (!t2) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (-dy >= height) {\n\t\t\t\tblock.allgm[t2idx] = gm\n\t\t\t\tblock.allgm[gmidx] = t2\n\t\t\t\tgm.__tky = t2.__tky\n\t\t\t\tt2.__tky += height\n\t\t\t\tt2.__tkg.transition().attr('transform', 'translate(0,' + t2.__tky + ')')\n\t\t\t\ty0 = event.clientY\n\t\t\t}\n\t\t} else if (dy > 0 && gmidx < block.allgm.length - 1) {\n\t\t\tlet t2idx = gmidx + 1,\n\t\t\t\tt2 = block.allgm[t2idx]\n\t\t\twhile (t2.hidden) {\n\t\t\t\tt2idx++\n\t\t\t\tif (t2idx >= block.allgm.length) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tt2 = block.allgm[t2idx]\n\t\t\t}\n\t\t\tif (!t2) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (dy >= height) {\n\t\t\t\t// swap\n\t\t\t\tblock.allgm[t2idx] = gm\n\t\t\t\tblock.allgm[gmidx] = t2\n\t\t\t\tt2.__tky = gm.__tky\n\t\t\t\tgm.__tky += height\n\t\t\t\tt2.__tkg.transition().attr('transform', 'translate(0,' + t2.__tky + ')')\n\t\t\t\ty0 = event.clientY\n\t\t\t}\n\t\t}\n\t})\n\tbody.on('mouseup', () => {\n\t\tgm.__tkg.transition().attr('transform', 'translate(0,' + gm.__tky + ')')\n\t\tbody.on('mousemove', null).on('mouseup', null)\n\t})\n}\n\nfunction coord2legend(tk, event, r, start, stop, gm, block, h) {\n\ttk.tktip.clear()\n\tconst table = table2col({ holder: tk.tktip.d, margin: '0px' })\n\tconst a = event.target.getBoundingClientRect()\n\tconst x = event.clientX - a.left\n\n\tlet pos\n\t/*\n\tpos is 0-based!\n\tfor reverse, must use stop minus ceil\n\tfor forward, must use start plus floor\n\t*/\n\tif (r.reverse) {\n\t\tpos = stop - Math.ceil(x / block.exonsf)\n\t} else {\n\t\tpos = start + Math.floor(x / block.exonsf)\n\t}\n\n\tconst p = coord.genomic2gm(pos, gm)\n\tif (p.atexon) table.addRow('Exon', p.atexon)\n\n\tif (p.atutr5) table.addRow(\"5' UTR\", p.atutr5.off + ' bp')\n\telse if (p.atutr3) table.addRow(\"3' UTR\", p.atutr3.off + ' bp')\n\telse if (p.aapos) table.addRow('AA', p.aapos + ' aa')\n\n\tif (p.rnapos) table.addRow('RNA', p.rnapos + ' bp')\n\ttable.addRow(gm.chr, pos + 1)\n\tif (p.aapos && gm.pdomains) {\n\t\ttable.table.style('margin-bottom', '5px')\n\t\tfor (const d of gm.pdomains) {\n\t\t\tif (d.name + d.description in gm.domain_hidden) continue\n\t\t\tif (d.start <= p.aapos && d.stop >= p.aapos) {\n\t\t\t\tconst row = tk.tktip.d.append('div')\n\t\t\t\trow.append('span').style('background-color', d.color).html(' ')\n\t\t\t\trow.append('span').html(' ' + d.name)\n\t\t\t\tif (d.description) {\n\t\t\t\t\trow\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t\t\t.html(' ' + (d.description.length > 30 ? d.description.substring(0, 20) + ' ...' : d.description))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\ttk.tktip.show(event.clientX, gm.__tkg.node().getBoundingClientRect().top + h - 10)\n}\n\n//////////////// render domain legend ///////////////\n\n// all link types. makelink() arg is element returned by getdomaintypes()\nconst domainLinks = [\n\t{\n\t\tkey: 'CDD',\n\t\tmakelink: domaintype => `https://www.ncbi.nlm.nih.gov/Structure/cdd/cddsrv.cgi?uid=${domaintype.CDD}`\n\t},\n\t{\n\t\tkey: 'Pfam',\n\t\tmakelink: domaintype => `https://www.ebi.ac.uk/interpro/entry/pfam/PF${domaintype.Pfam.substr(4)}`\n\t},\n\t{\n\t\tkey: 'SMART',\n\t\tmakelink: domaintype =>\n\t\t\t`https://smart.embl.de/smart/do_annotation.pl?BLAST=DUMMY&DOMAIN=${domaintype.SMART.substr(5)}`\n\t},\n\t{\n\t\tkey: 'COG',\n\t\tmakelink: domaintype => `https://www.ncbi.nlm.nih.gov/Structure/cdd/cddsrv.cgi?uid=${domaintype.COG}`\n\t},\n\t{\n\t\tkey: 'PRK',\n\t\tmakelink: domaintype => `https://www.ncbi.nlm.nih.gov/proteinclusters?term=${domaintype.PRK}`\n\t},\n\t{\n\t\tkey: 'pmid', // may support comma-joined ids\n\t\tmakelink: domaintype => `https://pubmed.ncbi.nlm.nih.gov/${domaintype.pmid}/`,\n\t\ttxt: domaintype => `PubMed ${domaintype.pmid}`\n\t},\n\t{\n\t\tkey: 'url',\n\t\tmakelink: domaintype => domaintype.url,\n\t\ttxt: () => 'Reference'\n\t}\n]\nasync function domainlegend(tk, block) {\n\tif (!block.legend || !block.legend.holder) {\n\t\t// block not support legend\n\t\treturn\n\t}\n\tif (!block.usegm) {\n\t\t// no gm in use?\n\t\treturn\n\t}\n\tif (!tk.tr_legend) {\n\t\tconst [tr, td] = legend_newrow(block, 'PROTEIN')\n\t\ttk.tr_legend = tr\n\t\ttk.td_legend = td\n\t}\n\ttk.td_legend.selectAll('*').remove()\n\n\t// get unique list of domain types from current gm (note that it may not cover all domains from all gm which could be minor issue)\n\t// any customizations to the domains (visibility and color), apply to all gm\n\tconst domainTypes = client.getdomaintypes(block.usegm)\n\n\tconst menuOptions = [\n\t\t{\n\t\t\tlabel: 'Hide',\n\t\t\thide: d => block.usegm.domain_hidden[d.key],\n\t\t\tcallback: d => {\n\t\t\t\tfor (const m of block.allgm) {\n\t\t\t\t\tm.domain_hidden[d.key] = 1\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlabel: 'Show',\n\t\t\thide: d => !block.usegm.domain_hidden[d.key],\n\t\t\tcallback: d => {\n\t\t\t\tfor (const m of block.allgm) {\n\t\t\t\t\tdelete m.domain_hidden[d.key]\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlabel: 'Show All',\n\t\t\thide: () => !Object.keys(block.usegm.domain_hidden).length,\n\t\t\tcallback: () => {\n\t\t\t\tfor (const m of block.allgm) {\n\t\t\t\t\tm.domain_hidden = {}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlabel: 'Show only',\n\t\t\thide: () => Object.keys(block.usegm.domain_hidden).length == domainTypes.length - 1,\n\t\t\tcallback: d => {\n\t\t\t\tfor (const m of block.allgm) {\n\t\t\t\t\tdelete m.domain_hidden[d.key]\n\t\t\t\t\tfor (const c of domainTypes) {\n\t\t\t\t\t\tif (c.key != d.key) m.domain_hidden[c.key] = 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t]\n\n\tconst legendRows = tk.td_legend\n\t\t.selectAll('div')\n\t\t.data(domainTypes)\n\t\t.enter()\n\t\t.append('div')\n\t\t.classed('sjpp-domain-legend-item', true)\n\t\t.style('margin', block.legend.vpad + ' 0px 8px 0px')\n\n\tlegendRows.append('span').style('padding', '5px 0px').style('margin-right', '10px')\n\n\t//sja_clb class adds the background color hover effect\n\tconst clickableRow = legendRows.append('span').classed('sja_clb', true)\n\n\t//Color box\n\tconst colorbox = clickableRow\n\t\t.append('span')\n\t\t.style('background-color', d => d.fill)\n\t\t.html(' ')\n\t\t.style('margin-right', '10px')\n\n\t//Domain name\n\tconst name = clickableRow\n\t\t.append('span')\n\t\t.text(d => d.name)\n\t\t.style('text-decoration', d => (block.usegm.domain_hidden[d.key] ? 'line-through' : 'none'))\n\t\t.style('color', default_text_color)\n\t\t.style('margin-right', '10px')\n\n\t//Domain description\n\tconst description = clickableRow\n\t\t.append('span')\n\t\t.text(d => d.description)\n\t\t.style('text-decoration', d => (block.usegm.domain_hidden[d.key] ? 'line-through' : 'none'))\n\t\t.style('color', default_text_color)\n\t\t.style('font-size', '.7em')\n\t\t.style('margin-right', '10px')\n\n\tclickableRow.on('click', async (event, domaintype) => {\n\t\tblock.tip.clear().showunder(event.target)\n\n\t\t//Dynamically add options from the array above\n\t\tawait block.tip.d\n\t\t\t.selectAll('div')\n\t\t\t.data(menuOptions.filter(o => !o.hide(domaintype)))\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.style('border-radius', '0px')\n\t\t\t.classed('sja_menuoption', true)\n\t\t\t.text(o => o.label)\n\t\t\t.on('click', (event, option) => {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\toption.callback(domaintype)\n\t\t\t\tupdateItems()\n\n\t\t\t\t// Destroy menu and re-render the visualization\n\t\t\t\tblock.tip.hide()\n\t\t\t\tgmtkrender(tk, block)\n\t\t\t})\n\n\t\t// Add color picker seperately to accommodate rendering needs\n\t\tif (!block.usegm.domain_hidden[domaintype.key]) {\n\t\t\tblock.tip.d\n\t\t\t\t.append('div')\n\t\t\t\t.text('Color: ')\n\t\t\t\t.style('margin', '10px')\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'color')\n\t\t\t\t.attr('value', domaintype.fill)\n\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t.on('change', event => {\n\t\t\t\t\tdomaintype.fill = event.target.value\n\t\t\t\t\tfor (const p of block.allgm) {\n\t\t\t\t\t\t// a gm may have more than 1 domain instances of this type. thus use .filter() to find all of them but not .find() to find only 1st one\n\t\t\t\t\t\tp.pdomains\n\t\t\t\t\t\t\t.filter(pd => pd.name + pd.description == domaintype.key)\n\t\t\t\t\t\t\t.forEach(i => (i.color = event.target.value))\n\t\t\t\t\t}\n\t\t\t\t\tupdateItems()\n\t\t\t\t\t// Same as above\n\t\t\t\t\tblock.tip.hide()\n\t\t\t\t\tgmtkrender(tk, block)\n\t\t\t\t})\n\t\t}\n\t})\n\t/* Add links dynamically to the row from the array above\n\t\tin a separate span. The hover effect will not apply to \n\t\tthis span. */\n\tlegendRows.append('span').each(function (domaintype) {\n\t\tconst holder = d3select(this)\n\t\tfor (const link of domainLinks) {\n\t\t\tif (domaintype[link.key]) {\n\t\t\t\tholder\n\t\t\t\t\t.append('a')\n\t\t\t\t\t.attr('href', link.makelink(domaintype))\n\t\t\t\t\t.attr('target', '_blank')\n\t\t\t\t\t.text(link.txt ? link.txt(domaintype) : link.key)\n\t\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t\t.style('padding-right', '10px')\n\t\t\t}\n\t\t}\n\t})\n\n\t//Updates the styling of the domain legend items based on the current hidden domains\n\tconst updateItems = () => {\n\t\tconst isHidden = domaintype => block.usegm.domain_hidden && block.usegm.domain_hidden[domaintype.key]\n\t\tcolorbox.style('background-color', d => (isHidden(d) ? 'transparent' : d.fill))\n\t\tname.style('text-decoration', d => (isHidden(d) ? 'line-through' : 'none'))\n\t\tdescription.style('text-decoration', d => (isHidden(d) ? 'line-through' : 'none'))\n\t}\n\n\tif (block.usegm.coding && block.usegm.coding.length > 0) {\n\t\t// custom domain ui, only for coding gene\n\t\tlet displayUI = false\n\n\t\tconst addProteinBtn = tk.td_legend.append('div').style('margin-top', '10px')\n\n\t\tconst proteinDomainUI = tk.td_legend.append('div').style('display', 'none')\n\t\tcustomdomainmakeui(block, tk, proteinDomainUI)\n\n\t\tconst btn = addProteinBtn\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.classed('sja_menuoption', true)\n\t\t\t.style('font-size', '.8em')\n\t\t\t.html(displayUI ? '▲ Add protein domain' : '▼ add protein domain')\n\t\t\t.on('click', () => {\n\t\t\t\tdisplayUI = !displayUI\n\t\t\t\tproteinDomainUI.style('display', displayUI ? 'block' : 'none')\n\t\t\t\tbtn.html(displayUI ? '▲ add protein domain' : '▼ add protein domain')\n\t\t\t})\n\t}\n}\n\nlet idIncrement = 0\nfunction getId() {\n\treturn `sjpp-customdomainui-${idIncrement++}`\n}\n\nfunction customdomainmakeui(block, tk, proteinDomainUI) {\n\tconst wrapper = proteinDomainUI.style('padding', '20px')\n\tconst textAreaId = getId()\n\t//header\n\twrapper\n\t\t.append('label')\n\t\t.attr('for', textAreaId)\n\t\t.html(`Add domains for ${block.usegm.name} <span style=\"font-size:.8em\">${block.usegm.isoform}</span>`)\n\tconst lst = client.getdomaintypes(block.usegm)\n\n\tconst customd = []\n\tfor (const d of lst) {\n\t\tif (d.iscustom) customd.push(d)\n\t}\n\tif (customd.length > 0) {\n\t\tconst div = wrapper.append('div').style('margin', '20px 0px')\n\t\tdiv.append('div').text('Click to remove a domain').style('font-size', '.8em').style('margin-bottom', '5px')\n\t\tfor (const i of customd) {\n\t\t\tconst row = div.append('div').classed('sja_menuoption', true)\n\t\t\trow\n\t\t\t\t.append('div')\n\t\t\t\t.style('background-color', i.fill)\n\t\t\t\t.style('border', 'solid 1px ' + i.stroke)\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('margin-right', '5px')\n\t\t\t\t.style('padding', '1px 2px')\n\t\t\t\t.html(' ')\n\t\t\trow.append('div').style('display', 'inline-block').text(i.name)\n\t\t\trow.on('click', () => {\n\t\t\t\trow.remove()\n\t\t\t\tconst lst2 = []\n\t\t\t\tfor (const d of block.usegm.pdomains) {\n\t\t\t\t\tif (d.iscustom && d.name == i.name) continue\n\t\t\t\t\tlst2.push(d)\n\t\t\t\t}\n\t\t\t\tblock.usegm.pdomains = lst2\n\t\t\t\tgmtkrender(tk, block)\n\t\t\t\tdomainlegend(tk, block)\n\t\t\t})\n\t\t}\n\t}\n\twrapper\n\t\t.append('p')\n\t\t.style('font-size', '.9em')\n\t\t.html('<span style=\"font-size:.8em;color:#000\">EXAMPLE</span> domain_name ; 100 200 ; red')\n\tconst ta = wrapper.append('textarea').attr('id', textAreaId).attr('rows', 5).attr('cols', 30)\n\tconst row1 = wrapper.append('div').style('margin-top', '5px')\n\tconst select = row1.append('select')\n\tselect.append('option').text('Codon position')\n\tselect.append('option').text('mRNA position')\n\tselect.append('option').text('Genomic position')\n\trow1\n\t\t.append('button')\n\t\t.text('Submit')\n\t\t.style('margin-left', '5px')\n\t\t.on('click', () => {\n\t\t\tconst v = ta.property('value')\n\t\t\tif (v == '') return\n\t\t\terrdiv.style('display', 'none')\n\t\t\tconst lines = v.trim().split('\\n')\n\t\t\tfor (const line of lines) {\n\t\t\t\tconst l = line.split(';')\n\t\t\t\tif (l.length != 3) return err('invalid line: ' + line)\n\t\t\t\tconst t = l[1].trim().split(' ')\n\t\t\t\tif (t.length != 2) return err('position requires start and stop: ' + line)\n\t\t\t\tconst a = Number.parseInt(t[0])\n\t\t\t\tconst b = Number.parseInt(t[1])\n\t\t\t\tif (Number.isNaN(a) || Number.isNaN(b)) return err('invalid position value: ' + line)\n\t\t\t\tlet start, stop\n\t\t\t\tswitch (select.node().selectedIndex) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tstart = a\n\t\t\t\t\t\tstop = b\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tlet x = coord.rna2gmcoord(a, block.usegm)\n\t\t\t\t\t\tif (x == null) return err('cannot map RNA position ' + a + ' to gene model')\n\t\t\t\t\t\tstart = coord.genomic2gm(x, block.usegm).aapos\n\t\t\t\t\t\tx = coord.rna2gmcoord(b, block.usegm)\n\t\t\t\t\t\tif (x == null) return err('cannot map RNA position ' + b + ' to gene model')\n\t\t\t\t\t\tstop = coord.genomic2gm(x, block.usegm).aapos\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconst a1 = coord.genomic2gm(a, block.usegm).aapos\n\t\t\t\t\t\tconst a2 = coord.genomic2gm(b, block.usegm).aapos\n\t\t\t\t\t\tstart = Math.min(a1, a2)\n\t\t\t\t\t\tstop = Math.max(a1, a2)\n\t\t\t\t}\n\n\t\t\t\t//Fix for users entering colors in different formats (i.e. red, rgb(255,0,0), etc.)\n\t\t\t\t//Color picker only accepts hex code for value\n\t\t\t\tconst color = l[2].trim().startsWith('#') ? l[2].trim() : rgb(l[2].trim()).formatHex()\n\t\t\t\tblock.usegm.pdomains.push({\n\t\t\t\t\tiscustom: true,\n\t\t\t\t\tname: l[0].trim(),\n\t\t\t\t\tcolor,\n\t\t\t\t\tstart: start,\n\t\t\t\t\tstop: stop\n\t\t\t\t})\n\t\t\t}\n\t\t\tproteinDomainUI.style('display', 'none')\n\t\t\tgmtkrender(tk, block)\n\t\t\tdomainlegend(tk, block)\n\t\t\t//customdomainmakeui(block, tk, pane)\n\t\t})\n\trow1\n\t\t.append('button')\n\t\t.text('Clear')\n\t\t.style('margin-left', '5px')\n\t\t.on('click', () => ta.property('value', ''))\n\tconst errdiv = wrapper.append('div').style('margin-top', '10px').style('display', 'none')\n\tconst err = m => {\n\t\terrdiv.style('display', 'block')\n\t\tclient.sayerror(errdiv, m)\n\t}\n\twrapper\n\t\t.append('div')\n\t\t.style('color', '#000')\n\t\t.style('margin-top', '20px')\n\t\t.html(\n\t\t\t`One protein domain per line.<br>\nEach line has three fields joined by semicolon:\n<ol>\n <li>Name, text with space, no semicolon.</li>\n <li>Range, two integers joined by space.</li>\n <li>Color, e.g. red, #FF0000, rgb(255,0,0).</li>\n</ol>`\n\t\t)\n}\n", "export function hicstrawfromtemplate(tk: any, template: any) {\n\tif (tk.textdata) {\n\t\tif (!tk.textdata.raw) return '.textdata.raw missing'\n\t\tif (typeof tk.textdata.raw != 'string') return '.textdata.raw should be string'\n\t\tdelete template.enzyme\n\t} else if (tk.bedfile || tk.bedurl) {\n\t\t// bed file\n\t} else {\n\t\t// by hic straw file\n\t\tif (!template.file && !template.url)\n\t\t\treturn 'none of the data sources available: text data, bedj file, or juicebox file'\n\t}\n\tif (template.domainoverlay) {\n\t\tif (!template.domainoverlay.file && !template.domainoverlay.url) return 'file or url missing for domainoverlay'\n\t\ttk.domainoverlay = {}\n\t\tfor (const k in template.domainoverlay) {\n\t\t\ttk.domainoverlay[k] = template.domainoverlay[k]\n\t\t}\n\t}\n\t// the \"hic\" object to work with ../tracks/hic/app.ts\n\ttk.hic = {\n\t\tenzyme: template.enzyme\n\t}\n\tdelete tk.enzyme\n\treturn null\n}\n\nexport function hicstrawmaketk(tk: any) {\n\ttk.uninitialized = true\n}\n\nexport function hicstrawload(tk: any, block: any) {\n\timport('./block.tk.hicstraw.ts').then(module => {\n\t\tmodule.loadTk(tk, block)\n\t})\n}\n", "export function asefromtemplate ( tk, template ) {\n\tif( !template.samplename ) return 'samplename missing'\n\tif( !template.rnabamfile ) {\n\t\tif( !template.rnabamurl ) return 'neither file or url given for rnabam'\n\t}\n\tif( !template.vcffile ) {\n\t\tif( !template.vcfurl ) return 'neither file or url given for vcf'\n\t}\n\treturn null\n}\n\n\nexport function asemaketk(tk,block) {\n\ttk.uninitialized=true\n}\n\n\nexport function aseload(tk,block) {\n\timport('./block.tk.ase').then(_=>{\n\t\t_.loadTk(tk,block)\n\t})\n}\n", "/*\n\nonly one source of data: loaded from server\n\n*/\n\n// duplicated stuff from dataset/pediatric.js\nconst valuePerSample = {\n\tkey: 'percentage',\n\tlabel: 'Percentage',\n\tcutoffValueLst: [\n\t\t{ side: '>', value: 5, label: '>5%' },\n\t\t{ side: '>', value: 10, label: '>10%' },\n\t\t{ side: '>', value: 20, label: '>20%' },\n\t\t{ side: '>', value: 30, label: '>30%' },\n\t\t{ side: '>', value: 40, label: '>40%' }\n\t]\n}\n\nexport function mdsjunctionfromtemplate(tk, template) {\n\tif (template.axisheight) {\n\t\tconst v = Number.parseInt(template.axisheight)\n\t\tif (Number.isNaN(v)) return 'invalid value for axisheight'\n\t\ttk.axisheight = v\n\t} else {\n\t\ttk.axisheight = 200\n\t}\n\tif (template.legheight) {\n\t\tconst v = Number.parseInt(template.legheight)\n\t\tif (Number.isNaN(v)) return 'invalid value for legheight'\n\t\ttk.legheight = v\n\t} else {\n\t\ttk.legheight = 50\n\t}\n\tif (template.neckheight) {\n\t\tconst v = Number.parseInt(template.neckheight)\n\t\tif (Number.isNaN(v)) return 'invalid value for neckheight'\n\t\ttk.neckheight = v\n\t} else {\n\t\ttk.neckheight = 50\n\t}\n\ttk.height_main = tk.toppad + tk.axisheight + tk.legheight + tk.neckheight + tk.bottompad\n\ttk.yscaleUseLog = template.yscaleUseLog != undefined ? template.yscaleUseLog : true\n\tif (tk.iscustom) {\n\t\t// custom mdsjunction\n\t\ttk.mds = {}\n\n\t\tif (template.infoFilter) {\n\t\t\tif (!template.infoFilter.lst) return '.lst missing from infoFilter'\n\t\t\ttk.infoFilter = { lst: [] }\n\t\t\tfor (const i of template.infoFilter.lst) {\n\t\t\t\tif (!i.key) return '.key missing from an item of .infoFilter.lst'\n\t\t\t\tif (!i.label) i.label = i.key\n\t\t\t\tif (!i.categories) return '.categories missing from an item of .infoFilter.lst'\n\t\t\t\tconst o = {\n\t\t\t\t\tkey: i.key,\n\t\t\t\t\tlabel: i.label,\n\t\t\t\t\tcategories: {},\n\t\t\t\t\thiddenCategories: {}\n\t\t\t\t}\n\t\t\t\tfor (const k in i.categories) {\n\t\t\t\t\to.categories[k] = i.categories[k]\n\t\t\t\t}\n\t\t\t\tif (i.hiddenCategories) {\n\t\t\t\t\tfor (const k in i.hiddenCategories) {\n\t\t\t\t\t\to.hiddenCategories[k] = 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttk.infoFilter.lst.push(o)\n\t\t\t}\n\t\t} else {\n\t\t\t// no infoFilter from custom tk, use the hardcoded one given that the junction annotation will be done by pp script\n\t\t\ttk.infoFilter = {\n\t\t\t\tlst: [\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: 'type',\n\t\t\t\t\t\tlabel: 'Type',\n\t\t\t\t\t\tcategories: {\n\t\t\t\t\t\t\tcanonical: {\n\t\t\t\t\t\t\t\tlabel: 'Canonical',\n\t\t\t\t\t\t\t\tcolor: '#0C72A8'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\texonskip: {\n\t\t\t\t\t\t\t\tlabel: 'Exon skipping',\n\t\t\t\t\t\t\t\tcolor: '#D14747',\n\t\t\t\t\t\t\t\tvaluePerSample: valuePerSample\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\texonaltuse: {\n\t\t\t\t\t\t\t\tlabel: 'Exon alternative usage',\n\t\t\t\t\t\t\t\tcolor: '#E69525',\n\t\t\t\t\t\t\t\tvaluePerSample: valuePerSample\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ta5ss: {\n\t\t\t\t\t\t\t\tlabel: \"Alternative 5' splice site\",\n\t\t\t\t\t\t\t\tcolor: '#476CD1',\n\t\t\t\t\t\t\t\tvaluePerSample: valuePerSample\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ta3ss: {\n\t\t\t\t\t\t\t\tlabel: \"Alternative 3' splice site\",\n\t\t\t\t\t\t\t\tcolor: '#47B582',\n\t\t\t\t\t\t\t\tvaluePerSample: valuePerSample\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tUnannotated: {\n\t\t\t\t\t\t\t\tlabel: 'Not annotated',\n\t\t\t\t\t\t\t\tcolor: '#787854'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\thiddenCategories: {\n\t\t\t\t\t\t\t// in custom track, show all junctions by default\n\t\t\t\t\t\t\t//Unannotated: 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t}\n\treturn null\n}\n\nexport function mdsjunctionmaketk(tk, block) {\n\ttk.leftaxis = tk.gleft.append('g')\n\ttk.tktip.d.style('padding', '8px')\n\ttk.subTracks = [] // as a parent track, collect subtracks (subtrack won't have this)\n\ttk.uninitialized = true\n\t// everything to be made in mdsjunction.render, since handles and config will rerender the track\n}\n\nexport function mdsjunctionload(tk, block) {\n\timport('./block.mds.junction').then(module => {\n\t\tmodule.loadTk(tk, block)\n\t})\n}\n", "export function mdssvcnvfromtemplate(tk,template) {\n\tif(tk.file || tk.url) {\n\t\t// svcnv file is now optional\n\t\ttk.iscustom=true\n\t}\n\tif(template.singlesample) {\n\t\tif(!template.singlesample.name) return 'singlesample.name missing'\n\t\ttk.singlesample = template.singlesample\n\t}\n\tif(template.checkexpressionrank) {\n\t\tif(tk.iscustom) {\n\t\t\tif(!template.checkexpressionrank.file && !template.checkexpressionrank.url) return 'file/url missing for checkexpressionrank in custom track'\n\t\t}\n\t\ttk.checkexpressionrank = {}\n\t\tfor(const k in template.checkexpressionrank) {\n\t\t\ttk.checkexpressionrank[k] = template.checkexpressionrank[k]\n\t\t}\n\t}\n\tif( template.checkrnabam ) {\n\t\tif( !template.checkrnabam.samples) return 'samples{} missing from checkrnabam'\n\t\t// will check against a custom vcf\n\t\ttk.iscustom = true\n\t}\n\n\ttk.gaincolor= template.gaincolor || '#D6683C'\n\ttk.losscolor= template.losscolor || '#67a9cf'\n\ttk.lohcolor= template.lohcolor || '#545454'\n\treturn null\n}\n\n\n\nexport function mdssvcnvmaketk(tk,block) {\n\ttk.uninitialized=true\n}\n\n\n\nexport function mdssvcnvload(tk,block) {\n\timport('./block.mds.svcnv').then(module=>{\n\t\tmodule.loadTk(tk,block)\n\t})\n}\n", "export function mdsexpressionrankfromtemplate(tk, template, block) {\n\treturn null\n}\n\nexport function mdsexpressionrankmaketk(tk, block) {\n\ttk.uninitialized = true\n}\n\nexport function mdsexpressionrankload(tk, block) {\n\timport('./block.mds.expressionrank').then(module => {\n\t\tmodule.loadTk(tk, block)\n\t})\n}\n", "export function mds3_fromtemplate(tk, template) {\n\treturn null\n}\n\nexport function mds3_maketk(tk, block) {\n\ttk.uninitialized = true\n}\n\nexport function mds3_load(tk, block) {\n\timport('./tk').then(_ => {\n\t\t_.loadTk(tk, block)\n\t})\n}\n", "export function bedgraphdot_fromtemplate(tk,template) {\n\treturn null\n}\n\n\n\nexport function bedgraphdot_maketk(tk,block) {\n\ttk.uninitialized=true\n}\n\n\n\nexport function bedgraphdot_load(tk,block) {\n\timport('./block.tk.bedgraphdot').then(_=>{\n\t\t_.loadTk(tk,block)\n\t})\n}\n", "import { select as d3select } from 'd3-selection'\nimport {\n\titemtable,\n\truntimeattr_sv,\n\truntimeattr_itd,\n\truntimeattr_del,\n\truntimeattr_trunc,\n\truntimeattr_snvindel\n} from './block.ds.itemtable'\nimport * as client from './client'\nimport * as common from '#shared/common.js'\nimport may_sunburst from './block.sunburst'\nimport { stratinput } from '#shared/tree.js'\nimport { stratify } from 'd3-hierarchy'\nimport * as blockds from './block.ds'\nimport { legend_newrow } from './block.legend'\nimport { dstkrender } from './block.ds'\n\n/*\ncreate tk labels\nlegend that belongs to this tk, contains options\n\n************************ EXPORTED\n\ndsmaketk()\n\n\n\n************************ INTERNAL\n\nlabel_mcount_fillpane()\nlabel_strat_fillpane()\n\nmlstfilter() \n\nctrlui_populationfrequency\nctrlui_vcfinfofilter\nctrlui_sampleattribute\n\n\n*/\n\nconst hotcolor = '#FFE5E5'\n\nexport default function dsmaketk(tk, block) {\n\t/*\n\tmake:\n\tsvg holders\n\tleft labels and controllers, and menu\n\tlegend\n\n\t*/\n\n\ttk.labyspace = 5 // must kept with tk: will be used by ds.numericmode\n\n\ttk.leftaxis = tk.gleft.append('g')\n\n\tif (!tk.itemlabelname) {\n\t\ttk.itemlabelname = 'mutation'\n\t}\n\n\tlet laby = tk.labyspace + block.labelfontsize\n\n\t// controller - # mutations\n\tconst thistip = new client.Menu({ padding: 'none' })\n\ttk.label_mcount = block.maketklefthandle(tk, laby).on('click', () => {\n\t\tlabel_mcount_fillpane(tk, block, tk.label_mcount, thistip)\n\t})\n\n\tlaby += tk.labyspace + block.labelfontsize\n\n\t// assume that stratify directives are available at time of making tk\n\tif (tk.ds.stratify) {\n\t\ttk.label_stratify = []\n\t\tconst thistip = new client.Menu()\n\t\tfor (const s of tk.ds.stratify) {\n\t\t\tconst strat = JSON.parse(JSON.stringify(s))\n\t\t\ttk.label_stratify.push(strat)\n\n\t\t\tstrat.svglabel = block.maketklefthandle(tk, laby).on('click', () => {\n\t\t\t\tlabel_strat_fillpane(tk, block, strat, thistip)\n\t\t\t})\n\n\t\t\tlaby += tk.labyspace + block.labelfontsize\n\t\t}\n\t}\n\n\tif (tk.ds.iscustom) {\n\t\t// close button for all custom, no matter if official.children or not\n\t\t// register the label, when making svg will hide this label\n\t\ttk.label_close = block\n\t\t\t.maketklefthandle(tk, laby)\n\t\t\t.text('Close')\n\t\t\t.on('mousedown', event => {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tevent.preventDefault()\n\t\t\t})\n\t\t\t.on('click', () => {\n\t\t\t\tblock.deletecustomdsbyname(tk.ds.label)\n\t\t\t})\n\t\tlaby += tk.labyspace + block.labelfontsize\n\t}\n\n\tblock.setllabel(tk)\n\n\t// attributes from official ds, move to tk level\n\tif (tk.ds.vcfinfofilter) {\n\t\ttk.vcfinfofilter = tk.ds.vcfinfofilter\n\t}\n\tif (tk.ds.info2table) {\n\t\ttk.info2table = tk.ds.info2table\n\t}\n\tif (tk.ds.info2singletable) {\n\t\ttk.info2singletable = tk.ds.info2singletable\n\t}\n\tif (tk.ds.itemlabelname) {\n\t\ttk.itemlabelname = tk.ds.itemlabelname\n\t}\n\tif (tk.ds.url4variant) {\n\t\ttk.url4variant = tk.ds.url4variant\n\t}\n\n\tif (block.legend && block.legend.holder) {\n\t\t/*\n\t\tmay make legend given following conditions\n\t\t*/\n\n\t\tlet showlegend = false\n\t\tif (tk.populationfrequencyfilter) {\n\t\t\tshowlegend = true\n\t\t}\n\t\tif (tk.vcfinfofilter) {\n\t\t\tshowlegend = true\n\t\t}\n\t\tif (tk.ds.cohort && tk.ds.cohort.sampleattribute) {\n\t\t\tshowlegend = true\n\t\t}\n\n\t\tif (showlegend) {\n\t\t\tconst [tr, td] = legend_newrow(block, tk.name)\n\t\t\ttk.tr_legend = tr\n\t\t\ttk.td_legend = td\n\n\t\t\tif (tk.vcfinfofilter) {\n\t\t\t\tconst err = ctrlui_vcfinfofilter(tk, block)\n\t\t\t\tif (err) {\n\t\t\t\t\tdelete tk.vcfinfofilter\n\t\t\t\t\tblock.error(tk.name + ': ' + err)\n\t\t\t\t}\n\t\t\t\tconst row = td.append('div').style('margin', '10px').style('display', 'none')\n\t\t\t\ttk.genotype2color = {\n\t\t\t\t\trr: '#ccc',\n\t\t\t\t\tra: 'blue',\n\t\t\t\t\taa: 'red',\n\t\t\t\t\tlegend: row\n\t\t\t\t}\n\t\t\t\trow.append('span').text('Genotype').style('color', '#858585')\n\t\t\t\tlet s = row.append('span').style('padding-left', '10px')\n\t\t\t\ts.append('div').style('display', 'inline-block').style('background', tk.genotype2color.rr).html(' ')\n\t\t\t\ts.append('span').html(' Ref/Ref')\n\t\t\t\ts = row.append('span').style('padding-left', '10px')\n\t\t\t\ts.append('div').style('display', 'inline-block').style('background', tk.genotype2color.ra).html(' ')\n\t\t\t\ts.append('span').html(' Ref/Alt')\n\t\t\t\ts = row.append('span').style('padding-left', '10px')\n\t\t\t\ts.append('div').style('display', 'inline-block').style('background', tk.genotype2color.aa).html(' ')\n\t\t\t\ts.append('span').html(' Alt/Alt')\n\t\t\t}\n\n\t\t\tif (tk.populationfrequencyfilter) {\n\t\t\t\tconst err = ctrlui_populationfrequency(tk, block)\n\t\t\t\tif (err) {\n\t\t\t\t\tdelete tk.populationfrequencyfilter\n\t\t\t\t\tblock.error(tk.name + ': ' + err)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tk.ds.cohort && tk.ds.cohort.sampleattribute) {\n\t\t\t\tconst err = ctrlui_sampleattribute(tk, block)\n\t\t\t\tif (err) {\n\t\t\t\t\tdelete tk.ds.cohort.sampleattribute\n\t\t\t\t\tblock.error(tk.name + ': ' + err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction mlstfilter(tk, block) {\n\tconst lst = []\n\tfor (const m of tk.mlst) {\n\t\tif (block.legend) {\n\t\t\tif (block.legend.mclasses.has(m.class) && block.legend.mclasses.get(m.class).hidden) continue\n\t\t\tif (block.legend.morigins.has(m.origin) && block.legend.morigins.get(m.origin).hidden) continue\n\t\t}\n\t\tlst.push(m)\n\t}\n\treturn lst\n}\n\nfunction downloadmlst(tk, block) {\n\tconst mlst = mlstfilter(tk, block)\n\tconst exported = []\n\tif (tk.ds.id2vcf) {\n\t\t// is vcf file(s)\n\t\tconst txt = []\n\t\tfor (const vcfid in tk.ds.id2vcf) {\n\t\t\tconst lst2 = []\n\t\t\tfor (const m of mlst) {\n\t\t\t\tif (m.vcfid == vcfid) lst2.push(m)\n\t\t\t}\n\t\t\tif (lst2.length == 0) continue\n\t\t\tconst vcf = tk.ds.id2vcf[vcfid]\n\t\t\ttxt.push('CHROM\\tPOS\\tREF\\tALT\\tINFO-locus\\tINFO-altAllele\\tclass\\tname')\n\t\t\tfor (const m of lst2) {\n\t\t\t\tconst info = []\n\t\t\t\tif (m.info) {\n\t\t\t\t\tfor (const k in m.info) info.push(k + '=' + m.info[k])\n\t\t\t\t}\n\t\t\t\tconst altinfo = []\n\t\t\t\tif (m.altinfo) {\n\t\t\t\t\tfor (const k in m.altinfo) altinfo.push(k + '=' + m.altinfo[k])\n\t\t\t\t}\n\t\t\t\ttxt.push(\n\t\t\t\t\t`${m.chr}\\t${m.pos}\\t${m.ref}\\t${m.alt}\\t${info.join(';')}\\t${altinfo.join(';')}\\t${\n\t\t\t\t\t\tcommon.mclass[m.class].label\n\t\t\t\t\t}\\t${m.mname}`\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\texported.push({ text: txt.join('\\n') })\n\t} else {\n\t\t// regular ds\n\t\tconst dt2lst = new Map()\n\t\tfor (const m of mlst) {\n\t\t\tif (!dt2lst.has(m.dt)) {\n\t\t\t\tdt2lst.set(m.dt, [])\n\t\t\t}\n\t\t\tdt2lst.get(m.dt).push(m)\n\t\t}\n\t\tfor (const [dt, mlst2] of dt2lst) {\n\t\t\tlet atlst = null\n\t\t\tswitch (dt) {\n\t\t\t\tcase common.dtsnvindel:\n\t\t\t\t\tif (!tk.snvindelattr) {\n\t\t\t\t\t\truntimeattr_snvindel(tk, mlst2)\n\t\t\t\t\t}\n\t\t\t\t\tatlst = tk.snvindelattr\n\t\t\t\t\tbreak\n\t\t\t\tcase common.dtsv:\n\t\t\t\tcase common.dtfusionrna:\n\t\t\t\t\tif (!tk.svattr) {\n\t\t\t\t\t\truntimeattr_sv(tk, mlst2)\n\t\t\t\t\t}\n\t\t\t\t\tatlst = tk.svattr\n\t\t\t\t\tbreak\n\t\t\t\tcase common.dtitd:\n\t\t\t\t\tif (!tk.itdattr) {\n\t\t\t\t\t\truntimeattr_itd(tk, mlst2)\n\t\t\t\t\t}\n\t\t\t\t\tatlst = tk.itdattr\n\t\t\t\t\tbreak\n\t\t\t\tcase common.dtnloss:\n\t\t\t\tcase common.dtcloss:\n\t\t\t\t\tif (!tk.truncattr) {\n\t\t\t\t\t\truntimeattr_trunc(tk, mlst2)\n\t\t\t\t\t}\n\t\t\t\t\tatlst = tk.truncattr\n\t\t\t\t\tbreak\n\t\t\t\tcase common.dtdel:\n\t\t\t\t\tif (!tk.delattr) {\n\t\t\t\t\t\truntimeattr_del(tk, mlst2)\n\t\t\t\t\t}\n\t\t\t\t\tatlst = tk.delattr\n\t\t\t\t\tbreak\n\t\t\t\tcase common.dtcnv:\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (!atlst) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst head = []\n\t\t\tfor (const a of atlst) {\n\t\t\t\tif (a.lst) {\n\t\t\t\t\tfor (const b of a.lst) {\n\t\t\t\t\t\tif (b.ismaf) {\n\t\t\t\t\t\t\thead.push(b.label + ' mutant allele fraction')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\thead.push(b.label)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (a.ismaf) {\n\t\t\t\t\t\thead.push(a.label + ' mutant allele fraction')\n\t\t\t\t\t} else {\n\t\t\t\t\t\thead.push(a.label)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst content = [head.join('\\t')]\n\t\t\tfor (const m of mlst2) {\n\t\t\t\tconst lst = []\n\t\t\t\tfor (const a of atlst) {\n\t\t\t\t\tif (a.lst) {\n\t\t\t\t\t\tfor (const b of a.lst) {\n\t\t\t\t\t\t\tif (b.ismaf) {\n\t\t\t\t\t\t\t\tconst v = b.get(m)\n\t\t\t\t\t\t\t\tif (v && Number.isFinite(v.f)) {\n\t\t\t\t\t\t\t\t\tlst.push(v.f.toFixed(2))\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tlst.push('n/a')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlst.push(b.get(m))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (a.ismaf) {\n\t\t\t\t\t\t\tconst v = a.get(m)\n\t\t\t\t\t\t\tif (v && Number.isFinite(v.f)) {\n\t\t\t\t\t\t\t\tlst.push(v.f.toFixed(2))\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlst.push('n/a')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlst.push(a.get(m))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontent.push(lst.join('\\t'))\n\t\t\t}\n\t\t\texported.push({\n\t\t\t\tlabel: common.dt2label[dt],\n\t\t\t\ttext: content.join('\\n')\n\t\t\t})\n\t\t}\n\t}\n\tclient.export_data(tk.ds.label, exported)\n}\n\nfunction getmlstattrnames(tk) {\n\tconst skip = new Set([\n\t\t'__x',\n\t\t'isrim1',\n\t\t'isrim2',\n\t\t'aapos',\n\t\t'alt',\n\t\t'chr',\n\t\t'class',\n\t\t'dt',\n\t\t'isoform',\n\t\t'mname',\n\t\t'origin',\n\t\t'pos',\n\t\t'ref',\n\t\t'rnapos',\n\t\t'rnaposition',\n\t\t'gene',\n\t\t'rnaduplength',\n\t\t'rnadellength'\n\t])\n\tif (tk.ds.cohort && tk.ds.cohort.levels) {\n\t\tfor (const l of tk.ds.cohort.levels) {\n\t\t\tskip.add(l.k)\n\t\t\tif (l.full) {\n\t\t\t\tskip.add(l.full)\n\t\t\t}\n\t\t}\n\t}\n\tconst attrnames = new Set()\n\tfor (const m of tk.mlst) {\n\t\tfor (const k in m) {\n\t\t\tif (skip.has(k)) continue\n\t\t\tconst v = m[k]\n\t\t\tif (typeof v == 'object') {\n\t\t\t\t// skip things like maf_dna, fusion.pairlst, truncation.partner, itd.a, itd.b\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tattrnames.add(k)\n\t\t}\n\t}\n\tconst low2name = new Map() // tidy for identify\n\tfor (const i of attrnames) {\n\t\tlow2name.set(i.toLowerCase(), i)\n\t}\n\tconst lst = []\n\t// try to put sample name as the first of list to show as default\n\tif (low2name.has('sample')) lst.push(low2name.get('sample'))\n\tif (low2name.has('samplename')) lst.push(low2name.get('samplename'))\n\tif (low2name.has('patient')) lst.push(low2name.get('patient'))\n\tif (low2name.has('patientname')) lst.push(low2name.get('patientname'))\n\tif (low2name.has('sampletype')) lst.push(low2name.get('sampletype'))\n\tif (low2name.has('person')) lst.push(low2name.get('person'))\n\tif (low2name.has('individual')) lst.push(low2name.get('individual'))\n\tfor (const [i, j] of low2name) {\n\t\tif (lst.indexOf(j) == -1) {\n\t\t\tlst.push(j)\n\t\t}\n\t}\n\treturn lst\n}\n\nfunction mlststratifyui(tk, holder, block) {\n\tconst div = holder.append('div').style('margin', '20px')\n\n\tconst row1 = div.append('div').style('margin-bottom', '5px')\n\trow1.append('span').style('font-size', '.7em').html('Stratify by ')\n\tconst attrnames = getmlstattrnames(tk)\n\tconst select = row1.append('select').on('change', () => {\n\t\tconst sn = select.node()\n\t\tconst k = sn.options[sn.selectedIndex].innerHTML\n\t\tfreestratify(k, tk, block, resultdiv)\n\t})\n\n\tconst resultdiv = div.append('div')\n\tfor (const attrname of attrnames) {\n\t\tselect.append('option').text(attrname)\n\t}\n\tif (attrnames[0]) {\n\t\tfreestratify(attrnames[0], tk, block, resultdiv)\n\t}\n}\n\nfunction freestratify(key, tk, block, div) {\n\tconst map = new Map()\n\tfor (const m of tk.mlst) {\n\t\tlet v = m[key]\n\t\tif (v == undefined) {\n\t\t\tcontinue\n\t\t}\n\t\tif (typeof v == 'boolean') {\n\t\t\tif (v) {\n\t\t\t\tv = 'true'\n\t\t\t} else {\n\t\t\t\tv = 'false'\n\t\t\t}\n\t\t}\n\t\tif (map.has(v)) {\n\t\t\tmap.get(v).push(m)\n\t\t} else {\n\t\t\tmap.set(v, [m])\n\t\t}\n\t}\n\tconst resultlst = [...map]\n\tresultlst.sort((a, b) => b[1].length - a[1].length)\n\n\tdiv.selectAll('*').remove()\n\tif (map.size > 10) {\n\t\tdiv.style('height', '200px').style('overflow-y', 'scroll').style('resize', 'vertical').style('padding', '5px')\n\t}\n\tconst table = div\n\t\t.append('table')\n\t\t.style('border-spacing', '1px')\n\t\t.style('border-collapse', 'separate')\n\t\t.style('font-size', '.8em')\n\n\tfor (const [v, mlst] of resultlst) {\n\t\tconst tr = table.append('tr')\n\t\t// td 1\n\t\ttr.append('td').text(mlst.length).style('text-align', 'right')\n\t\t// td 2\n\t\tconst td = tr.append('td').classed('sja_menuoption', true)\n\t\ttd.text(v)\n\t\ttd.on('click', () => {\n\t\t\tconst thisdsname = tk.ds.label + ' - ' + key + ' - ' + v\n\t\t\tif (block.ownds[thisdsname]) {\n\t\t\t\tblock.deletecustomdsbyname(thisdsname)\n\t\t\t} else {\n\t\t\t\t// create child tk\n\t\t\t\tconst _ds = {\n\t\t\t\t\tlabel: thisdsname,\n\t\t\t\t\tbulkdata: {},\n\t\t\t\t\tparentname: tk.ds.label,\n\t\t\t\t\tiscustom: true,\n\t\t\t\t\tsampleselectable: tk.ds.sampleselectable\n\t\t\t\t}\n\t\t\t\t_ds.bulkdata[block.usegm.name.toUpperCase()] = mlst\n\t\t\t\tblock.addchilddsnoload(_ds)\n\t\t\t\tconst childtk = block.block_addtk_template({ type: client.tkt.ds, ds: _ds })\n\t\t\t\tblockds.dstkload(childtk, block)\n\t\t\t}\n\t\t})\n\t\t// td 3\n\t\tconst td3 = tr.append('td')\n\t\tsummarizemclass(mlst, td3)\n\t}\n}\n\nfunction summarizemclass(mlst, holder) {\n\tconst map = new Map()\n\tfor (const m of mlst) {\n\t\tif (map.has(m.class)) {\n\t\t\tmap.set(m.class, map.get(m.class) + 1)\n\t\t} else {\n\t\t\tmap.set(m.class, 1)\n\t\t}\n\t}\n\tconst lst = [...map]\n\tlst.sort((a, b) => b[1] - a[1])\n\tfor (const c of lst) {\n\t\tholder\n\t\t\t.append('span')\n\t\t\t.html(c[1] == 1 ? ' ' : c[1])\n\t\t\t.style('background-color', common.mclass[c[0]].color)\n\t\t\t.classed('sja_mcdot', true)\n\t}\n}\n\nfunction label_mcount_fillpane(tk, block, handle, tip) {\n\ttip.clear()\n\tconst holder = tip.d\n\n\tif (!tk.mlst) {\n\t\tconsole.error('.mlst missing for ' + tk.name)\n\t\treturn\n\t}\n\tif (tk.mlst.length == 0) {\n\t\t// when mlst is empty this controller should not be clickable\n\t\treturn\n\t}\n\n\t// 1. free stratify\n\tif (tk.ds.id2vcf) {\n\t\t// TODO support vcf meta for stratifying\n\t} else {\n\t\tif (tk.mlst.length < 1000) {\n\t\t\t// too many\n\t\t\tmlststratifyui(tk, holder, block)\n\t\t} else {\n\t\t\tholder\n\t\t\t\t.append('div')\n\t\t\t\t.text('Stratify ' + tk.mlst.length + ' variants')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tholder.selectAll('*').remove()\n\t\t\t\t\tmlststratifyui(tk, holder, block)\n\t\t\t\t})\n\t\t}\n\t}\n\n\tif (block.samplecart && tk.ds && tk.ds.sampleselectable) {\n\t\t// select sample API\n\t\t// allow samples to be selected\n\t\tconst sampleset = new Set()\n\t\tfor (const m of tk.mlst) {\n\t\t\tif (m.sample) {\n\t\t\t\t// FIXME hardcoded sample attribute\n\t\t\t\tsampleset.add(m.sample)\n\t\t\t}\n\t\t}\n\n\t\tblock.samplecart.setBtns({\n\t\t\tsamplelst: [...sampleset],\n\t\t\tid: block.usegm ? block.usegm.name : '',\n\t\t\tbasket: 'Gene Mutation',\n\t\t\tcontainer: holder.append('div')\n\t\t})\n\t}\n\n\tif (tk.numericmode) {\n\t} else {\n\t\t// not in numeric mode\n\t\t// 2. expand / fold skewers\n\t\tlet hasshown = false\n\t\tfor (const i of tk.data) {\n\t\t\tif (i.showmode == 1) {\n\t\t\t\thasshown = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (hasshown) {\n\t\t\tholder\n\t\t\t\t.append('div')\n\t\t\t\t.text('Fold')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ttip.hide()\n\t\t\t\t\tblockds.fold_glyph(tk.data, tk)\n\t\t\t\t})\n\t\t} else {\n\t\t\tholder\n\t\t\t\t.append('div')\n\t\t\t\t.text('Expand')\n\t\t\t\t.classed('sja_menuoption', true)\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ttip.hide()\n\t\t\t\t\tblockds.settle_glyph(tk, block)\n\t\t\t\t})\n\t\t}\n\t}\n\n\t// 3. sunburst\n\tif (tk.ds.cohort) {\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.text('To sunburst')\n\t\t\t.classed('sja_menuoption', true)\n\t\t\t.on('click', async () => {\n\t\t\t\ttip.hide()\n\t\t\t\tconst mlst = mlstfilter(tk, block)\n\t\t\t\tawait may_sunburst(mlst.length, mlst, 100, tk.height_main / 2, tk, block)\n\t\t\t})\n\t}\n\t// 4.\n\tholder\n\t\t.append('div')\n\t\t.text('To table')\n\t\t.classed('sja_menuoption', true)\n\t\t.on('click', () => {\n\t\t\tconst p = holder.node().getBoundingClientRect()\n\t\t\ttip.hide()\n\t\t\tconst mlst = mlstfilter(tk, block)\n\t\t\titemtable({\n\t\t\t\tmlst: mlst,\n\t\t\t\tpane: true,\n\t\t\t\tx: p.left,\n\t\t\t\ty: p.top,\n\t\t\t\ttk: tk,\n\t\t\t\tblock: block\n\t\t\t})\n\t\t})\n\t// 5.\n\tholder\n\t\t.append('div')\n\t\t.text('Download')\n\t\t.classed('sja_menuoption', true)\n\t\t.on('click', () => {\n\t\t\ttip.hide()\n\t\t\tdownloadmlst(tk, block)\n\t\t})\n\ttip.showunder(handle.node())\n}\n\nfunction label_strat_fillpane(tk, block, strat, tip) {\n\ttip.clear()\n\n\t// compute stratification on client\n\n\tconst mlst = mlstfilter(tk, block)\n\n\tlet levels = []\n\tif (strat.bycohort) {\n\t\tif (!tk.ds || !tk.ds.cohort || !tk.ds.cohort.levels) {\n\t\t\tconsole.error('some part is missing: tk.ds.cohort.levels')\n\t\t\treturn\n\t\t}\n\t\tlevels = tk.ds.cohort.levels\n\t} else {\n\t\tif (strat.attr1) {\n\t\t\tlevels.push({ label: strat.attr1.label, k: strat.attr1.k })\n\t\t}\n\t\tif (strat.attr2) {\n\t\t\tlevels.push({ label: strat.attr2.label, k: strat.attr2.k })\n\t\t}\n\t\tif (strat.attr3) {\n\t\t\tlevels.push({ label: strat.attr3.label, k: strat.attr3.k })\n\t\t}\n\t}\n\tconst root = stratify()(stratinput(mlst, levels))\n\troot.sum(i => i.value)\n\tconst table = tip.d.append('table')\n\tconst tr = table.append('tr').style('font-size', '.9em').style('color', '#858585')\n\ttr.append('td').text(strat.label.toUpperCase())\n\tif (strat.bycohort && tk.ds.cohort.root) {\n\t\ttr.append('td').text('% TUMOR')\n\t}\n\ttr.append('td')\n\ttr.append('td').text('MUTATIONS')\n\troot.eachBefore(n => {\n\t\tif (!n.parent) return\n\t\tconst thisdsname = tk.ds.label + ' - ' + n.data.name\n\t\tconst tr = table.append('tr').classed('sja_clb', true)\n\t\tif (block.ownds[thisdsname]) {\n\t\t\ttr.style('background-color', hotcolor)\n\t\t}\n\t\t// td1\n\t\ttr.append('td')\n\t\t\t.style('padding-left', (n.depth - 1) * 15 + 'px')\n\t\t\t.html(\n\t\t\t\tn.data.name + (n.data.full ? ' <span style=\"font-size:.7em;color:#858585\">' + n.data.full + '</span>' : '')\n\t\t\t)\n\t\t// td2\n\t\tif (strat.bycohort && tk.ds.cohort.root) {\n\t\t\tconst td2 = tr.append('td')\n\t\t\tlet cohortsize = 0\n\t\t\ttk.ds.cohort.root.each(i => {\n\t\t\t\tif (i.id == n.id) {\n\t\t\t\t\tcohortsize = i.value\n\t\t\t\t}\n\t\t\t})\n\t\t\tif (cohortsize == 0) {\n\t\t\t\ttd2.text('not found').style('font-size', '.7em')\n\t\t\t} else {\n\t\t\t\tclient.fillbar(\n\t\t\t\t\ttd2,\n\t\t\t\t\t{ f: n.value / cohortsize, v1: n.value, v2: cohortsize },\n\t\t\t\t\t{ fillbg: tk.ds.cohort.fbarbg, fill: tk.ds.cohort.fbarfg }\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t// td3\n\t\ttr.append('td').style('text-align', 'right').style('font-size', '.8em').text(n.value)\n\t\t// td4\n\t\tconst td4 = tr.append('td')\n\t\tsummarizemclass(n.data.lst, td4)\n\t\ttr.on('click', () => {\n\t\t\tif (block.ownds[thisdsname]) {\n\t\t\t\tblock.deletecustomdsbyname(thisdsname)\n\t\t\t\ttr.style('background-color', 'transparent')\n\t\t\t} else {\n\t\t\t\ttr.style('background-color', hotcolor)\n\t\t\t\t// create child tk\n\t\t\t\tconst _ds = {\n\t\t\t\t\tlabel: thisdsname,\n\t\t\t\t\tbulkdata: {},\n\t\t\t\t\tparentname: tk.ds.label,\n\t\t\t\t\tiscustom: true,\n\t\t\t\t\tsampleselectable: tk.ds.sampleselectable\n\t\t\t\t}\n\t\t\t\t_ds.bulkdata[block.usegm.name.toUpperCase()] = n.data.lst\n\t\t\t\tblock.addchilddsnoload(_ds)\n\t\t\t\tconst childtk = block.block_addtk_template({ type: client.tkt.ds, ds: _ds })\n\t\t\t\tblockds.dstkload(childtk, block)\n\t\t\t}\n\t\t})\n\t})\n\ttip.showunder(strat.svglabel.node())\n}\n\nfunction ctrlui_vcfinfofilter(tk, block) {\n\t/*\n\tfrom m.info or m.altinfo, of a vcf track\n\tin legend, each term shown in one row\n\tterm name clickable to select and apply to the track\n\n\tcategorical:\n\t\thas the .categories{} attribute\n\t\tif autocategory is set, .categories{} will be dynamically filled with color roster each time data is loaded\n\n\tnumerical:\n\t\tdoes not have .categories{}\n\n\tcontents for each term to be filled up at runtime\n\t*/\n\n\tconst err = common.validate_vcfinfofilter(tk.vcfinfofilter)\n\tif (err) return err\n\n\tconst obj = tk.vcfinfofilter\n\n\tobj.tip = new client.Menu({ padding: '0px' })\n\n\tif (obj.setidx4mclass != undefined) {\n\t\t// given setidx4mclass\n\t\tif (!Number.isInteger(obj.setidx4mclass)) return '.setidx4mclass value should be array index (non-negative integer)'\n\t\tconst set = obj.lst[obj.setidx4mclass]\n\t\tif (!set) return '.setidx4mclass value out of bound'\n\t\tif (!set.autocategory) {\n\t\t\tif (!set.categories) return '.setidx4mclass does not point to a categorical set'\n\t\t}\n\t}\n\n\tif (obj.setidx4numeric != undefined) {\n\t\t// given setidx4mclass\n\t\tif (!Number.isInteger(obj.setidx4numeric))\n\t\t\treturn '.setidx4numeric value should be array index (non-negative integer)'\n\t\tconst set = obj.lst[obj.setidx4numeric]\n\t\tif (!set) return '.setidx4numeric value out of bound'\n\t\tif (set.categories) return '.setidx4numeric does not point to a numeric set'\n\t}\n\n\t// validated\n\n\tobj.holder = tk.td_legend.append('table').style('border-spacing', '5px')\n\n\t// display holder for each set\n\tfor (let i = 0; i < obj.lst.length; i++) {\n\t\tconst set = obj.lst[i]\n\n\t\tconst row = obj.holder.append('tr')\n\n\t\tset.namebutton = row\n\t\t\t.append('td')\n\t\t\t.text(set.name)\n\t\t\t.attr('class', 'sja_clb')\n\t\t\t.style('text-align', 'right')\n\t\t\t.on('click', () => {\n\t\t\t\tlet usethisset = true\n\t\t\t\tif (set.categories) {\n\t\t\t\t\t// wash out categorical sets, leave out numeric sets\n\t\t\t\t\tfor (const s2 of obj.lst) {\n\t\t\t\t\t\tif (s2.categories) {\n\t\t\t\t\t\t\ts2.namebutton.style('background-color', null).style('border-bottom', null)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (i == obj.setidx4mclass) {\n\t\t\t\t\t\tdelete obj.setidx4mclass\n\t\t\t\t\t\tusethisset = false\n\t\t\t\t\t} else {\n\t\t\t\t\t\tobj.setidx4mclass = i\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// wash out numeric sets, leave out categorical sets\n\t\t\t\t\tfor (const s2 of obj.lst) {\n\t\t\t\t\t\tif (!s2.categories) {\n\t\t\t\t\t\t\ts2.namebutton.style('background-color', null).style('border-bottom', null)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (i == obj.setidx4numeric) {\n\t\t\t\t\t\tdelete obj.setidx4numeric\n\t\t\t\t\t\tusethisset = false\n\t\t\t\t\t} else {\n\t\t\t\t\t\tobj.setidx4numeric = i\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (usethisset) {\n\t\t\t\t\tset.namebutton.style('background-color', '#f1f1f1').style('border-bottom', 'solid 2px #ccc')\n\t\t\t\t}\n\t\t\t\tdstkrender(tk, block)\n\t\t\t})\n\n\t\tif (i == obj.setidx4mclass || i == obj.setidx4numeric) {\n\t\t\tset.namebutton.style('background-color', '#f1f1f1').style('border-bottom', 'solid 2px #ccc')\n\t\t}\n\t\t// for on-the-fly fill\n\t\tset.holder = row.append('td')\n\t}\n\treturn null\n}\n\nfunction ctrlui_populationfrequency(tk, block) {\n\t/*\n\tfilter variants by population frequency\n\tfor multi-sample vcf\n\tlegend filled on the fly\n\t*/\n\n\tif (!tk.populationfrequencyfilter.lst) return '.lst[] missing for .populationfrequencyfilter'\n\n\t// swap lst\n\tconst lst = []\n\tfor (const v of tk.populationfrequencyfilter.lst) {\n\t\tif (typeof v == 'number') {\n\t\t\tlst.push({ value: v })\n\t\t\tcontinue\n\t\t}\n\t\tif (v.value == undefined || typeof v.value != 'number') {\n\t\t\treturn '.populationfrequencyfilter.lst[].value is not a number'\n\t\t}\n\t\tlst.push({ value: v.value })\n\t}\n\ttk.populationfrequencyfilter.lst = lst\n\n\tconst div = tk.td_legend.append('div')\n\tif (tk.populationfrequencyfilter.name) {\n\t\tdiv\n\t\t\t.append('div')\n\t\t\t.text(tk.populationfrequencyfilter.name)\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('color', '#858585')\n\t\t\t.style('margin-right', '10px')\n\t}\n\ttk.populationfrequencyfilter.holder = div.append('div').style('display', 'inline-block')\n}\n\nfunction ctrlui_sampleattribute(tk, block) {\n\t/*\n\tfor multi-sample vcf, filter variants by sample annotation\n\tlegend filled on the fly\n\tchallenge for variant-cohort composite track\n\t*/\n\n\tconst smat = tk.ds.cohort.sampleattribute\n\tif (!smat.lst) return '.lst[] missing for .cohort.sampleattribute'\n\tconst div = tk.td_legend.append('div')\n\tsmat.holder = div\n\tsmat.tip = new client.Menu({ padding: '0px' })\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["scale", "configpanel", "data", "configpanel", "configpanel", "gmmode", "row", "id", "start", "stop", "event", "thistip", "tkt", "tr", "tkt", "event", "gmmode", "tk", "x", "r1", "r2", "r", "color", "row", "i", "files"]
|
|
7
|
+
}
|