diff --git a/css/_igv-menu-popup.scss b/css/_igv-menu-popup.scss
index adf6e3706..3c56cde8d 100644
--- a/css/_igv-menu-popup.scss
+++ b/css/_igv-menu-popup.scss
@@ -12,7 +12,8 @@ $igv-menu-popup-grey: #7F7F7F;
//min-width: 132px;
width: max-content;
- z-index: 4096;
+ //z-index: 4096;
+ z-index: 512;
cursor: pointer;
diff --git a/css/dom.css b/css/dom.css
index e0022ebd0..2e2e00d73 100644
--- a/css/dom.css
+++ b/css/dom.css
@@ -956,7 +956,7 @@
top: 0;
left: 0;
width: max-content;
- z-index: 4096;
+ z-index: 512;
cursor: pointer;
font-family: "Open Sans", sans-serif;
font-size: small;
diff --git a/css/dom.css.map b/css/dom.css.map
index b43e430b6..3443cb936 100644
--- a/css/dom.css.map
+++ b/css/dom.css.map
@@ -1 +1,2 @@
-{"version":3,"sourceRoot":"","sources":["_navbar.scss","_font.scss","_color.scss","_dom-misc.scss","_apple_crayon_color.scss","_igv-center-line.scss","_igv-cursor-guide.scss","dom.scss","_igv-user-feedback.scss","_igv-generic-dialog-container.scss","_igv-generic-container.scss","_igv-menu-popup.scss","_spinner.scss","_roi.scss"],"names":[],"mappings":"AAoBA;EAEE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA,WA5BqB;EA6BrB,aChCsB;EDiCtB;EACA,aA5BkB;EA8BlB;EACA;EAEA;EACA;EAEA,QApCkB;EAsClB;EACA;EACA;EACA,cEvCiB;EFwCjB,kBAhD8B;;AAkD9B;EAEE;EACA;EACA;EACA;EACA;EAEA,QApDgB;EAqDhB,aArDgB;;AAuDhB;EACE;EACA,QAzDc;EA0Dd;;AAGF;EACE,QA9Dc;EA+Dd;EACA;EACA;EAEA,aAnEc;EAoEd;EACA;;AAGF;EAEE;EACA;EACA;EACA;EACA;EAEA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;;AAEA;EAEE;EAEA;EAEA;EACA;EAEA;EAEA,WA7Ga;EA8Gb,aCjHc;EDkHd;;AAKJ;EACE;EACA;EACA;EACA;EACA;EAEA;EACA,QAnHyB;;AAsHzB;EAEE;EACA;EACA;EACA;EACA;EAEA;EACA,QA/HuB;EAgIvB,aAhIuB;;AAmIvB;EACE;EAEA;EAEA,QAxIqB;EAyIrB,aAzIqB;EA2IrB,WApJW;EAqJX,aCxJY;EDyJZ;EACA;EAEA;EACA;EAEA;EAEA;EACA;EACA;EACA,cE5JO;EF8JP;;AAIF;EACE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAMJ;EACE;EACA;;AASR;EAEE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAGF;EAEE;EACA;EACA;EACA;EACA;EAEA;;AAIF;EAEE,OAjOwB;EAmOxB;EAKA;EAEA;EAEA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAIF;EACE;EACA;;AAGF;EACE;;AAKJ;EAEE,OA5RwB;EA8RxB;EAEA,QA3Rc;EA4Rd,aA5Rc;EA8Rd;EAEA;EAEA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAKJ;EACE;;;AAMN;EAEE;EAEA;EAEA;EACA;EAEA,QAhWyB;EAiWzB;EAEA;EAEA,aArWyB;EAuWzB;EACA;EAEA,aClXsB;EDmXtB,WA/W4B;EAgX5B;EAEA,OArX4B;EAsX5B,kBAvX8B;EAyX9B,cAxX4B;EAyX5B;EACA;EACA,eAlXgC;;;AAqXlC;EACE;;;AAGF;EACE;EACA,kBApY4B;;;AAuY9B;EACE;EAGA;EACA,OA/X4B;EAgY5B,QAhY4B;EAiY5B;EACA;EACA;EAEA;EACA;EACA;;AAEA;EAEE;EAEA;EACA,KA5YsB;EA6YtB,MA5Y0B;EA8Y1B,OAjZ0B;EAkZ1B,QAlZ0B;EAoZ1B;EACA;EACA;EACA;;AAGF;EAEE;EAEA;EACA,KA7ZsB;EA8ZtB,MA5Z2B;EA8Z3B,OAla0B;EAma1B,QAna0B;EAqa1B;EACA;EACA;EACA;;;AAIJ;EACE;EAGA;EAGA;EACA;EACA;EAGA;EACA;EACA;;AAEA;EAEE;EAEA;EACA,KA/bsB;EAgctB;EAEA;EACA;EAEA;EACA;EACA;EACA;;AAGF;EAEE;EAEA;EACA,KAhdsB;EAidtB;EAEA;EACA;EAEA;EACA;EACA;EACA;;;AAKJ;EACE;EACA;;;AAIA;EACE;EACA;;AAEF;EACE;;;AAKF;EACE;EACA;;AAEF;EACE;;;AAMF;EACE;EACA;;AAEF;EACE;;;AAMF;EACE;EACA;;AAEF;EACE;;;AAMF;EACE;EACA;;AAEF;EACE;;;AAMF;EACE;EACA;;AAEF;EACE;;;AG5iBJ;EAEE;EAEA;EAEA;EACA;EAEA;EAGA;EACA;EACA;EACA;EACA;EAGA;;AAEA;EAEE;EACA;EAEA;EACA;EAEA;EACA;EAEA,aFnCoB;EEoCpB;EACA;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA,aFlDoB;EEmDpB;EACA;EACA;EACA;EACA;;;AAKJ;EAEE;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA,OHvE4B;;;AG0E9B;EACE;EACA;EACA;EAEA;EACA;EAEA,OAlFmC;EAmFnC,QAnFmC;EAqFnC;EACA;EAEA;;AAEA;EACE;;;AAKJ;EACE;EACA;;;AAGF;EAEE;EAEA;EACA;EACA;EAEA;EACA,QA9GmC;EAgHnC;EACA;EACA;EACA;EACA;;AAEA;EACE,aFxHoB;EEyHpB,WAxHiC;EAyHjC;EACA;;AAGF;EACE;;;AAKJ;EAEE;EAEA;EAEA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA,aF7JoB;EE8JpB;EACA;EACA;;;AAMJ;EAEE;EAEA;EAEA;EACA;EACA;EACA;EAEA;EAEA;EAEA,kBDzKwB;;;AC4K1B;EACE;EACA;EAEA;EACA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EAEA;EACA;EAEA;EAEA,ODlMkB;ECmMlB;EACA,aFrNoB;EEsNpB;EAEA;EAEA;EACA;EACA,cD3MkB;;;ACgNtB;EAEE;EAEA;EACA;EAEA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EAEA,aFnPsB;EEoPtB;EACA;EAEA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EAEA;EAEA;;;AAGF;AAAA;AAAA;EAGE,kBClQyB;;;ADyQ3B;EACE;EACA;EACA;;;AErRF;EAEE;EAEA;EAEA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EAEA;EACA;EACA;EACA;;;AAIF;EACE;EAEA;EACA;;;AAGF;EACE;EACA;EACA;;;ACpCF;EAEE;EAEA;EAEA;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EAEA;EAEA,aClBsB;EDmBtB;EAEA;EACA;EACA;;;AAGF;EAEE;EAEA;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EAEA;EAEA;EACA;EACA;EAEA;;;AE/CF;EAEE;EACA;EACA;EAEA;EAEA;EACA;EAEA;EAEA;EAEA;EACA;EACA;EAEA,aPpBsB;EOqBtB;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAGA;EACE;EAEA;EACA;EAEA;EAEA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAKJ;EACE;EACA;EAEA;;AAEA;EACE;EACA;EACA;;;ACzCN;EAEE;EACA;EACA;EACA;EACA;EAEA,cPrByB;EOsBzB,eAxC2C;EAyC3C;EACA;EAEA,aR7CsB;EQ8CtB;EACA;EAEA;EAEA;EAEA;EACA;EACA;EACA;EACA;;AAGA;EAEE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA,wBAvEyC;EAwEzC,yBAxEyC;EAyEzC,qBPvDuB;EOwDvB;EACA;EAEA;;AAEA;EACE;EACA;EACA;EACA;EACA,OPlEqB;;AOqEvB;EACE;EACA;;AAMJ;EAEE,OPjFkB;EOmFlB;EACA;EACA;EAEA;EACA;EACA;EAEA;EAEA;;AAIF;EACE;EAEA;EACA;EAEA,OPvGkB;EOyGlB;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EAEA;EACA;EACA;EAEA;;AArIJ;EACE;EACA;EACA;EAEA;EAEA,aRfoB;EQgBpB;EACA;EACA;EAEA;EAEA;EACA;EACA,cPRa;EOUb;;AAuHA;EACE;EACA;;AAMJ;EACE;EAEA;EACA;EAEA,OP9IkB;EOgJlB;EAEA;EACA;EACA;EACA;EACA;;AA/JF;EACE;EACA;EACA;EAEA;EAEA,aRfoB;EQgBpB;EACA;EACA;EAEA;EAEA;EACA;EACA,cPRa;EOUb;;AAgJA;EACE;;AAMJ;EAEE;EACA,QAjLgB;EAmLhB;EACA;EACA;EACA;EACA;;AAEA;EACE;EAEA;EACA,aRhMkB;EQiMlB;EACA;EAEA,OAhMa;EAiMb,QAlMc;EAoMd,aApMc;EAqMd;EAEA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA,kBPlNgB;;AOqNlB;EACE;EACA;EACA,kBPrNoB;;AOwNtB;EACE;EACA,kBP5NsB;;AO+NxB;EACE;EACA,kBP9N0B;;AOoO9B;EAEE;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EAEA;EACA;EACA;EACA,aR9PkB;EQ+PlB;EACA;EAEA;EACA;EACA;EACA,eApQuC;EAqQvC;;AAGF;EACE;EACA;;;AC1QN;EAEE;EACA;EACA;EAEA;EAEA;EAEA;EAEA;EACA;EACA;EACA;EACA;;AAGA;EAEE;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpCN;EACE;EACA;EACA;EAGA;EAEA;EAEA;EAEA,aAjByB;EAkBzB;EACA;EACA,OAlB0B;EAoB1B;EAEA,eAvB6B;EAwB7B,cAtBoB;EAuBpB;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;;AAEA;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE,2BAjDyB;EAkDzB,4BAlDyB;EAmDzB;EACA;EACA;;AAGF;EACE;;;AAON;EACE;EACA;EACA;EACA;;;AAGF;EAEE;EACA;EACA;EACA;EAEA;EACA,wBA/E6B;EAgF7B,yBAhF6B;EAkF7B,qBAhFoB;EAiFpB;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA,OAhGkB;;AAmGpB;EACE;EACA;;;AAKJ;EAEE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AHxIN;EAEE;EACA;EACA;EAEA;EAEA;EACA;EAEA;EAEA;EAEA;EACA;EACA;EAEA,aPpBsB;EOqBtB;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAGA;EACE;EAEA;EACA;EAEA;EAEA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAKJ;EACE;EACA;EAEA;;AAEA;EACE;EACA;EACA;;;AIpEN;EAEE;EAEA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAIA;EACE;EAEA;EACA;EACA;EAIA;EACA;EAEA;EACA;;;AAKJ;EACE;IAAK;IAAmC;;;AAG1C;EACE;IAAK;IAAmC;;;ACrB1C;EAEE;EACA;EAEA,aAhCkB;EAiClB;EACA;EACA,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CA;EACA;EACA;;;AAyGF;EAhHE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AA6GF;EApHE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAiHF;EAxHE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAqHA,OAjK0B;;AAmK1B;EAEE;EAEA,YAzJyB;EA0JzB,OAxKwB;;AA0KxB;EAEE;EAEA;EACA;EACA,MA9KqB;EAgLrB,OA/KsB;EAiLtB,cAnL6B;EAoL7B;EAGA;EAEA;EACA;EAEA;EACA;;AAMF;EACE;;;AAON;EAvKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAoKA,OA3M4B;EA6M5B;;AAGA;EACE;EACA;EACA;EAEA,YA5MyB;EA6MzB;EAEA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EAEA,YApOyB;EAqOzB;EAEA;EACA;;;AAKJ;EAtNE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAmNA,OAxPiC;;AA2PjC;EAEE;EACA;EACA;EACA;EACA;EAEA,YA5PyB;EA6PzB;EACA;;AAGA;EACE;EAEA;EACA;EACA;EACA,OLrQqB;;AKwQvB;EACE;EACA","file":"dom.css"}
\ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["_navbar.scss","_font.scss","_color.scss","_dom-misc.scss","_apple_crayon_color.scss","_igv-center-line.scss","_igv-cursor-guide.scss","dom.scss","_igv-user-feedback.scss","_igv-generic-dialog-container.scss","_igv-generic-container.scss","_igv-menu-popup.scss","_spinner.scss","_roi.scss"],"names":[],"mappings":"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;EAqQvC;;AAGF;EACE;EACA;;;AC1QN;EAEE;EACA;EACA;EAEA;EAEA;EAEA;EAEA;EACA;EACA;EACA;EACA;;AAGA;EAEE;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpCN;EACE;EACA;EACA;EAGA;EAGA;EAEA;EAEA,aAlByB;EAmBzB;EACA;EACA,OAnB0B;EAqB1B;EAEA,eAxB6B;EAyB7B,cAvBoB;EAwBpB;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;;AAEA;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE,2BAlDyB;EAmDzB,4BAnDyB;EAoDzB;EACA;EACA;;AAGF;EACE;;;AAON;EACE;EACA;EACA;EACA;;;AAGF;EAEE;EACA;EACA;EACA;EAEA;EACA,wBAhF6B;EAiF7B,yBAjF6B;EAmF7B,qBAjFoB;EAkFpB;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA,OAjGkB;;AAoGpB;EACE;EACA;;;AAKJ;EAEE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AHzIN;EAEE;EACA;EACA;EAEA;EAEA;EACA;EAEA;EAEA;EAEA;EACA;EACA;EAEA,aPpBsB;EOqBtB;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAGA;EACE;EAEA;EACA;EAEA;EAEA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAKJ;EACE;EACA;EAEA;;AAEA;EACE;EACA;EACA;;;AIpEN;EAEE;EAEA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAIA;EACE;EAEA;EACA;EACA;EAIA;EACA;EAEA;EACA;;;AAKJ;EACE;IAAK;IAAmC;;;AAG1C;EACE;IAAK;IAAmC;;;ACrB1C;EAEE;EACA;EAEA,aAhCkB;EAiClB;EACA;EACA,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CA;EACA;EACA;;;AAyGF;EAhHE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AA6GF;EApHE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAiHF;EAxHE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAqHA,OAjK0B;;AAmK1B;EAEE;EAEA,YAzJyB;EA0JzB,OAxKwB;;AA0KxB;EAEE;EAEA;EACA;EACA,MA9KqB;EAgLrB,OA/KsB;EAiLtB,cAnL6B;EAoL7B;EAGA;EAEA;EACA;EAEA;EACA;;AAMF;EACE;;;AAON;EAvKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAoKA,OA3M4B;EA6M5B;;AAGA;EACE;EACA;EACA;EAEA,YA5MyB;EA6MzB;EAEA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EAEA,YApOyB;EAqOzB;EAEA;EACA;;;AAKJ;EAtNE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAmNA,OAxPiC;;AA2PjC;EAEE;EACA;EACA;EACA;EACA;EAEA,YA5PyB;EA6PzB;EACA;;AAGA;EACE;EAEA;EACA;EACA;EACA,OLrQqB;;AKwQvB;EACE;EACA","file":"dom.css"}
+
diff --git a/dev/misc/multi-select.html b/dev/multi-select/multi-select-examples.html
similarity index 67%
rename from dev/misc/multi-select.html
rename to dev/multi-select/multi-select-examples.html
index c7875a22d..8974a2315 100644
--- a/dev/misc/multi-select.html
+++ b/dev/multi-select/multi-select-examples.html
@@ -174,7 +174,7 @@
]
};
- const overlay_tracks_config =
+ const group_autoscale_config =
{
"version": "2.16.0",
"showSampleNames": false,
@@ -200,6 +200,33 @@
"type": "sequence",
"order": -9007199254740991
},
+ {
+ "name": "Homo sapiens angular gyrus tissue male adult (81 years) H3K36me3 ",
+ "url": "https://www.encodeproject.org/files/ENCFF202ZTM/@@download/ENCFF202ZTM.bigWig",
+ "color": "#008cff",
+ "metadata": {
+ "Biosample": "Homo sapiens angular gyrus tissue male adult (81 years)",
+ "AssayType": "ChIP-seq",
+ "Target": "H3K36me3 ",
+ "BioRep": "1",
+ "TechRep": "1_3",
+ "OutputType": "signal p-value",
+ "Format": "bigWig",
+ "Lab": "Bradley Bernstein, Broad",
+ "Accession": "ENCFF202ZTM",
+ "Experiment": "ENCSR340DBD"
+ },
+ "order": 1,
+ "format": "bigwig",
+ "type": "wig",
+ "height": 128,
+ // "autoscaleGroup": 'annaBirna'
+ },
+ {
+ name: "ENCODE bigwig",
+ url: 'https://www.encodeproject.org/files/ENCFF206QIK/@@download/ENCFF206QIK.bigWig',
+ // autoscaleGroup: 'annaBirna'
+ },
{
"name": "Homo sapiens A549 SIN3A ",
"url": "https://www.encodeproject.org/files/ENCFF582HJY/@@download/ENCFF582HJY.bigWig",
@@ -219,7 +246,8 @@
"order": 1,
"format": "bigwig",
"type": "wig",
- "height": 128
+ "height": 128,
+ "autoscaleGroup": 'billyBobThornton'
},
{
"name": "Homo sapiens A549 treated with 0.02% ethanol for 1 hour YY1 ",
@@ -240,28 +268,8 @@
"order": 1,
"format": "bigwig",
"type": "wig",
- "height": 128
- },
- {
- "name": "Homo sapiens angular gyrus tissue male adult (81 years) H3K36me3 ",
- "url": "https://www.encodeproject.org/files/ENCFF202ZTM/@@download/ENCFF202ZTM.bigWig",
- "color": "#008cff",
- "metadata": {
- "Biosample": "Homo sapiens angular gyrus tissue male adult (81 years)",
- "AssayType": "ChIP-seq",
- "Target": "H3K36me3 ",
- "BioRep": "1",
- "TechRep": "1_3",
- "OutputType": "signal p-value",
- "Format": "bigWig",
- "Lab": "Bradley Bernstein, Broad",
- "Accession": "ENCFF202ZTM",
- "Experiment": "ENCSR340DBD"
- },
- "order": 1,
- "format": "bigwig",
- "type": "wig",
- "height": 128
+ "height": 128,
+ "autoscaleGroup": 'billyBobThornton'
},
{
"name": "Refseq Genes",
@@ -278,7 +286,7 @@
]
};
- const overlay_throws_error_config =
+ const whole_lotta_wigs_config =
{
"version": "2.16.0",
"showSampleNames": false,
@@ -291,7 +299,13 @@
"aliasURL": "https://s3.amazonaws.com/igv.org.genomes/hg19/hg19_alias.tab",
"chromosomeOrder": "chr1, chr2, chr3, chr4, chr5, chr6, chr7, chr8, chr9, chr10, chr11, chr12, chr13, chr14, chr15, chr16, chr17, chr18, chr19, chr20, chr21, chr22, chrX, chrY"
},
- "locus": "chr5:1-180,915,260",
+ "locus": "chr8:128,745,581-128,755,100",
+ "gtexSelections": {
+ "chr8:128,745,581-128,755,100": {
+ "gene": "MYC",
+ "snp": null
+ }
+ },
"roi": [],
"tracks": [
{
@@ -299,64 +313,180 @@
"order": -9007199254740991
},
{
- "name": "Homo sapiens A549 CTCF ",
- "url": "https://www.encodeproject.org/files/ENCFF023NXW/@@download/ENCFF023NXW.bigWig",
+ "name": "Homo sapiens HepG2 PRPF4 ",
+ "url": "https://www.encodeproject.org/files/ENCFF059CKF/@@download/ENCFF059CKF.bigWig",
"metadata": {
- "Biosample": "Homo sapiens A549",
+ "Biosample": "Homo sapiens HepG2",
+ "AssayType": "ChIP-seq",
+ "Target": "PRPF4 ",
+ "BioRep": "1,2",
+ "TechRep": "1_1,2_1",
+ "OutputType": "fold change over control",
+ "Format": "bigWig",
+ "Lab": "Xiang-Dong Fu, UCSD",
+ "Accession": "ENCFF059CKF",
+ "Experiment": "ENCSR243LNQ"
+ },
+ "order": 0,
+ "format": "bigwig",
+ "type": "wig",
+ "height": 128,
+ "windowFunction": "mean",
+ "color": "rgb(255, 41, 135)"
+ },
+ {
+ "name": "Homo sapiens GM13977 CTCF ",
+ "url": "https://www.encodeproject.org/files/ENCFF000RQI/@@download/ENCFF000RQI.bigWig",
+ "metadata": {
+ "Biosample": "Homo sapiens GM13977",
"AssayType": "ChIP-seq",
"Target": "CTCF ",
"BioRep": "1",
"TechRep": "1_1",
+ "OutputType": "base overlap signal",
+ "Format": "bigWig",
+ "Lab": "Vishwanath Iyer, UTA",
+ "Accession": "ENCFF000RQI",
+ "Experiment": "ENCSR000DLB"
+ },
+ "order": 1,
+ "format": "bigwig",
+ "type": "wig",
+ "height": 128,
+ "windowFunction": "mean",
+ "color": "rgb(5, 248, 2)"
+ },
+ {
+ "name": "Homo sapiens GM12878 BCLAF1 ",
+ "url": "https://www.encodeproject.org/files/ENCFF036IRJ/@@download/ENCFF036IRJ.bigWig",
+ "metadata": {
+ "Biosample": "Homo sapiens GM12878",
+ "AssayType": "ChIP-seq",
+ "Target": "BCLAF1 ",
+ "BioRep": "2",
+ "TechRep": "2_1",
+ "OutputType": "fold change over control",
+ "Format": "bigWig",
+ "Lab": "Richard Myers, HAIB",
+ "Accession": "ENCFF036IRJ",
+ "Experiment": "ENCSR000BJZ"
+ },
+ "order": 2,
+ "format": "bigwig",
+ "type": "wig",
+ "height": 128,
+ "windowFunction": "mean",
+ "color": "rgb(0, 46, 255)"
+ },
+ {
+ "name": "Homo sapiens K562 ZNF274 ",
+ "url": "https://www.encodeproject.org/files/ENCFF555CQE/@@download/ENCFF555CQE.bigWig",
+ "metadata": {
+ "Biosample": "Homo sapiens K562",
+ "AssayType": "ChIP-seq",
+ "Target": "ZNF274 ",
+ "BioRep": "2",
+ "TechRep": "2_1",
+ "OutputType": "fold change over control",
+ "Format": "bigWig",
+ "Lab": "Peggy Farnham, USC",
+ "Accession": "ENCFF555CQE",
+ "Experiment": "ENCSR000EWE"
+ },
+ "order": 3,
+ "format": "bigwig",
+ "type": "wig",
+ "height": 128,
+ "windowFunction": "mean",
+ "color": "rgb(106, 207, 255)"
+ },
+ {
+ "name": "Homo sapiens 22Rv1 ZFX ",
+ "url": "https://www.encodeproject.org/files/ENCFF420XMW/@@download/ENCFF420XMW.bigWig",
+ "metadata": {
+ "Biosample": "Homo sapiens 22Rv1",
+ "AssayType": "ChIP-seq",
+ "Target": "ZFX ",
+ "BioRep": "2",
+ "TechRep": "2_1",
"OutputType": "signal p-value",
"Format": "bigWig",
- "Lab": "John Stamatoyannopoulos, UW",
- "Accession": "ENCFF023NXW",
- "Experiment": "ENCSR000DPF"
+ "Lab": "Michael Snyder, Stanford",
+ "Accession": "ENCFF420XMW",
+ "Experiment": "ENCSR246MLJ"
},
- "order": 0,
+ "order": 4,
"format": "bigwig",
- "type": "wig"
+ "type": "wig",
+ "height": 128,
+ "windowFunction": "mean",
+ "color": "rgb(137, 30, 136)"
},
{
- "name": "Homo sapiens A549 treated with 0.02% ethanol for 1 hour H3K9ac ",
- "url": "https://www.encodeproject.org/files/ENCFF537QDO/@@download/ENCFF537QDO.bigWig",
- "color": "rgb(100,0,0)",
+ "name": "Homo sapiens A549 CHD4 ",
+ "url": "https://www.encodeproject.org/files/ENCFF725AXM/@@download/ENCFF725AXM.bigWig",
"metadata": {
- "Biosample": "Homo sapiens A549 treated with 0.02% ethanol for 1 hour",
+ "Biosample": "Homo sapiens A549",
"AssayType": "ChIP-seq",
- "Target": "H3K9ac ",
+ "Target": "CHD4 ",
"BioRep": "1",
"TechRep": "1_1",
"OutputType": "fold change over control",
"Format": "bigWig",
"Lab": "Bradley Bernstein, Broad",
- "Accession": "ENCFF537QDO",
- "Experiment": "ENCSR000ASV"
+ "Accession": "ENCFF725AXM",
+ "Experiment": "ENCSR550SCU"
},
- "order": 3,
+ "order": 5,
"format": "bigwig",
"type": "wig",
- "height": 128
+ "height": 128,
+ "windowFunction": "mean",
+ "color": "rgb(255, 114, 110)"
},
{
- "name": "Homo sapiens A549 treated with 0.02% ethanol for 1 hour SIN3A ",
- "url": "https://www.encodeproject.org/files/ENCFF620FRR/@@download/ENCFF620FRR.bigWig",
+ "name": "Homo sapiens aorta tissue male adult (34 years) H3K27ac ",
+ "url": "https://www.encodeproject.org/files/ENCFF162CIW/@@download/ENCFF162CIW.bigWig",
+ "color": "rgb(200,0,0)",
"metadata": {
- "Biosample": "Homo sapiens A549 treated with 0.02% ethanol for 1 hour",
+ "Biosample": "Homo sapiens aorta tissue male adult (34 years)",
"AssayType": "ChIP-seq",
- "Target": "SIN3A ",
- "BioRep": "1,2",
- "TechRep": "1_1,2_1",
+ "Target": "H3K27ac ",
+ "BioRep": "2",
+ "TechRep": "2_1",
"OutputType": "signal p-value",
"Format": "bigWig",
- "Lab": "Richard Myers, HAIB",
- "Accession": "ENCFF620FRR",
- "Experiment": "ENCSR000BRM"
+ "Lab": "Bing Ren, UCSD",
+ "Accession": "ENCFF162CIW",
+ "Experiment": "ENCSR519CFV"
},
- "order": 3,
+ "order": 6,
+ "format": "bigwig",
+ "type": "wig",
+ "height": 128,
+ "windowFunction": "mean"
+ },
+ {
+ "name": "Homo sapiens with nonobstructive coronary artery disease; liver tissue male adult (32 years) H3K9me3 ",
+ "url": "https://www.encodeproject.org/files/ENCFF566FON/@@download/ENCFF566FON.bigWig",
+ "color": "rgb(100,0,0)",
+ "metadata": {
+ "Biosample": "Homo sapiens with nonobstructive coronary artery disease; liver tissue male adult (32 years)",
+ "AssayType": "ChIP-seq",
+ "Target": "H3K9me3 ",
+ "BioRep": "1",
+ "TechRep": "1_1",
+ "OutputType": "fold change over control",
+ "Format": "bigWig",
+ "Lab": "Bing Ren, UCSD",
+ "Accession": "ENCFF566FON",
+ "Experiment": "ENCSR563YGF"
+ },
+ "order": 8,
"format": "bigwig",
"type": "wig",
- "height": 128
+ "height": 128,
+ "windowFunction": "mean"
},
{
"name": "Refseq Genes",
@@ -373,7 +503,7 @@
]
};
- igv.createBrowser(document.getElementById("myDiv"), overlay_throws_error_config).then(function (browser) {})
+ igv.createBrowser(document.getElementById("myDiv"), group_autoscale_config).then(function (browser) {})
diff --git a/dev/multi-select/multi-select.html b/dev/multi-select/multi-select.html
index 2b310c67e..2a1006d57 100644
--- a/dev/multi-select/multi-select.html
+++ b/dev/multi-select/multi-select.html
@@ -177,7 +177,7 @@
Multiple Track Selection
};
- const MergedTracksConfig =
+ const overyTrackConfig =
{
genome: "hg19",
locus: "chr1:155,138,124-155,153,715",
@@ -185,7 +185,7 @@ Multiple Track Selection
[
{
name: "Merged - configuration",
- height: 50,
+ height: 256,
type: "merged",
tracks: [
{
@@ -231,18 +231,21 @@ Multiple Track Selection
format: "bigwig",
url: 'https://www.encodeproject.org/files/ENCFF206QIK/@@download/ENCFF206QIK.bigWig',
color: "red",
+ height: 128,
},
{
type: "wig",
format: "bigwig",
url: "https://www.encodeproject.org/files/ENCFF000ASJ/@@download/ENCFF000ASJ.bigWig",
color: "green",
+ height: 128,
},
{
type: "wig",
format: "bigwig",
url: "https://www.encodeproject.org/files/ENCFF351WPV/@@download/ENCFF351WPV.bigWig",
color: "blue",
+ height: 128,
}
]
};
@@ -288,7 +291,7 @@ Multiple Track Selection
]
}
- igv.createBrowser(document.getElementById("igvDiv"), kitchenSinkConfig)
+ igv.createBrowser(document.getElementById("igvDiv"), overyTrackConfig)
.then(function (browser) {
console.log("Created IGV browser");
})
diff --git a/dev/wig/wigs.html b/dev/wig/wigs.html
index 6a6cd97a5..54bade800 100644
--- a/dev/wig/wigs.html
+++ b/dev/wig/wigs.html
@@ -34,44 +34,44 @@
// color: '#f00',
indexed: false
},
- // {
- // name: 'All negative points',
- // url: '../../test/data/wig/allNegativewig.bedgraph',
- // indexed: false,
- // graphType: "points",
- // guideLines: [
- // {dotted: true, y: 0, color: "green"},
- // {dotted: true, y: -0.25, color: "blue"},
- // {dotted: true, y: -0.5, color: "red"}
- // ]
- // },
- // {
- // name: 'All pos points',
- // url: '../../test/data/wig/allPositive.bedgraph',
- // indexed: false,
- // graphType: "points",
- // guideLines: [
- // {dotted: true, y: 0, color: "green"},
- // {dotted: true, y: 0.25, color: "blue"},
- // {dotted: true, y: 0.5, color: "red"}
- // ]
- // },
- // {
- // name: 'Mixed_pos_neg_points',
- // url: '../../test/data/wig/mixedPosNeg.bedgraph',
- // indexed: false,
- // graphType: "points",
- // guideLines: [
- // {dotted: true, y: 0, color: "green"},
- // {dotted: true, y: -0.5, color: "blue"},
- // {dotted: true, y: 0.5, color: "red"}
- // ]
- // },
- // {
- // name: 'Mixed pos neg bars',
- // url: '../../test/data/wig/mixedPosNeg.bedgraph',
- // indexed: false
- // },
+ {
+ name: 'All negative points',
+ url: '../../test/data/wig/allNegativewig.bedgraph',
+ indexed: false,
+ graphType: "points",
+ guideLines: [
+ {dotted: true, y: 0, color: "green"},
+ {dotted: true, y: -0.25, color: "blue"},
+ {dotted: true, y: -0.5, color: "red"}
+ ]
+ },
+ {
+ name: 'All pos points',
+ url: '../../test/data/wig/allPositive.bedgraph',
+ indexed: false,
+ graphType: "points",
+ guideLines: [
+ {dotted: true, y: 0, color: "green"},
+ {dotted: true, y: 0.25, color: "blue"},
+ {dotted: true, y: 0.5, color: "red"}
+ ]
+ },
+ {
+ name: 'Mixed_pos_neg_points',
+ url: '../../test/data/wig/mixedPosNeg.bedgraph',
+ indexed: false,
+ graphType: "points",
+ guideLines: [
+ {dotted: true, y: 0, color: "green"},
+ {dotted: true, y: -0.5, color: "blue"},
+ {dotted: true, y: 0.5, color: "red"}
+ ]
+ },
+ {
+ name: 'Mixed pos neg bars',
+ url: '../../test/data/wig/mixedPosNeg.bedgraph',
+ indexed: false
+ },
]
};
diff --git a/js/bam/bamTrack.js b/js/bam/bamTrack.js
index a9a3daf29..9348220d1 100644
--- a/js/bam/bamTrack.js
+++ b/js/bam/bamTrack.js
@@ -30,7 +30,6 @@ import TrackBase from "../trackBase.js"
import IGVGraphics from "../igv-canvas.js"
import paintAxis from "../util/paintAxis.js"
import {createCheckbox} from "../igv-icons.js"
-import MenuUtils from "../ui/menuUtils.js"
import {PaletteColorTable} from "../util/colorPalletes.js"
import {IGVColor, StringUtils} from "../../node_modules/igv-utils/src/index.js"
import {makePairedAlignmentChords, makeSupplementalAlignmentChords, sendChords} from "../jbrowse/circularViewUtils.js"
diff --git a/js/browser.js b/js/browser.js
index 2235f080c..a8d968494 100755
--- a/js/browser.js
+++ b/js/browser.js
@@ -1,8 +1,7 @@
import $ from "./vendor/jquery-3.3.1.slim.js"
import html2canvas from '../node_modules/html2canvas/dist/html2canvas.esm.js'
-import {InputDialog, GenericColorPicker} from '../node_modules/igv-ui/dist/igv-ui.js'
import {BGZip, FileUtils, igvxhr, StringUtils, URIUtils} from "../node_modules/igv-utils/src/index.js"
-import {DOMUtils, Icon} from "../node_modules/igv-ui/dist/igv-ui.js"
+import {DOMUtils, Icon, SliderDialog, InputDialog, GenericColorPicker} from "../node_modules/igv-ui/dist/igv-ui.js"
import Alert from './ui/alert.js'
import * as TrackUtils from './util/trackUtils.js'
import TrackView, {igv_axis_column_width} from "./trackView.js"
@@ -301,6 +300,9 @@ class Browser {
this.$navigation.hide()
}
+ this.sliderDialog = new SliderDialog(this.root)
+ this.sliderDialog.container.id = `igv-slider-dialog-${DOMUtils.guid()}`
+
this.inputDialog = new InputDialog(this.root)
this.inputDialog.container.id = `igv-input-dialog-${DOMUtils.guid()}`
@@ -1382,58 +1384,50 @@ class Browser {
}
} else {
// Group autoscale
- const groupAutoscaleTracks = {}
- const otherTracks = []
- for (let trackView of trackViews) {
- const group = trackView.track.autoscaleGroup
- if (group) {
- var l = groupAutoscaleTracks[group]
- if (!l) {
- l = []
- groupAutoscaleTracks[group] = l
+ const groupAutoscaleTrackViews = {}
+ const otherTrackViews = []
+
+ // Isolate group autoscale trackViews
+ for (const trackView of trackViews) {
+ if (trackView.track.autoscaleGroup) {
+ const autoscaleGroup = trackView.track.autoscaleGroup
+ if (!groupAutoscaleTrackViews[autoscaleGroup]) {
+ groupAutoscaleTrackViews[autoscaleGroup] = []
}
- l.push(trackView)
+ groupAutoscaleTrackViews[autoscaleGroup].push(trackView)
} else {
- otherTracks.push(trackView)
+ otherTrackViews.push(trackView)
}
}
- if (Object.entries(groupAutoscaleTracks).length > 0) {
-
- const keys = Object.keys(groupAutoscaleTracks)
- for (let group of keys) {
+ // An autoscaleGroup of only one (1) trackView has the lone trackView removed from group autoscale mode
+ const singleTonKeys = Object.keys(groupAutoscaleTrackViews).filter(key => 1 === groupAutoscaleTrackViews[ key ].length)
- const groupTrackViews = groupAutoscaleTracks[group]
- const promises = []
-
- for (let trackView of groupTrackViews) {
- promises.push(trackView.getInViewFeatures())
+ if (singleTonKeys.length > 0) {
+ // Look for any single trackView groupAutoscale groups and move the single trackView to otherTrackViews list
+ for (const key of singleTonKeys) {
+ for (const trackView of groupAutoscaleTrackViews[ key ]) {
+ trackView.track.autoscaleGroup = undefined
}
+ otherTrackViews.push(...groupAutoscaleTrackViews[ key ])
+ delete groupAutoscaleTrackViews[ key ]
+ }
+ }
- const featureArray = await Promise.all(promises)
-
- var allFeatures = [], dataRange
-
- for (let features of featureArray) {
- allFeatures = allFeatures.concat(features)
- }
- dataRange = doAutoscale(allFeatures)
-
- const p = []
- for (let trackView of groupTrackViews) {
- trackView.track.dataRange = dataRange
+ // Calculate group autoscale dataRange
+ if (Object.entries(groupAutoscaleTrackViews).length > 0) {
+ for (const [ group, trackViews] of Object.entries(groupAutoscaleTrackViews)) {
+ const featureArray = await Promise.all(trackViews.map(trackView => trackView.getInViewFeatures()))
+ const dataRange = doAutoscale(featureArray.flat())
+ for (const trackView of trackViews) {
+ trackView.track.dataRange = Object.assign({}, dataRange)
trackView.track.autoscale = false
- p.push(trackView.updateViews())
}
- await Promise.all(p)
+ await Promise.all(trackViews.map(trackView => trackView.updateViews()))
}
-
}
- await Promise.all(otherTracks.map(tv => tv.updateViews()))
- // for (let trackView of otherTracks) {
- // await trackView.updateViews(force);
- // }
+ await Promise.all(otherTrackViews.map(tv => tv.updateViews()))
}
}
diff --git a/js/cnvpytor/CombinedCaller.js b/js/cnvpytor/CombinedCaller.js
index a33187034..996da916f 100644
--- a/js/cnvpytor/CombinedCaller.js
+++ b/js/cnvpytor/CombinedCaller.js
@@ -352,7 +352,7 @@ class CombinedCaller{
return results
}
- formatDataStructure_BAF(feature_column, scaling_factor = 2) {
+ formatDataStructure_BAF(feature_column, scaling_factor = -1) {
const baf1 = []
const baf2 = []
for (const [chr, wig] of Object.entries(this.wigFeatures)) {
@@ -364,10 +364,10 @@ class CombinedCaller{
let value = sample[feature_column]
if (value != 0.5){
- baf2_value.value = -2 * (1 - value)
+ baf2_value.value = scaling_factor * (1 - value)
baf2.push(baf2_value)
}
- baf1_value.value = -2 * value
+ baf1_value.value = scaling_factor * value
baf1.push(baf1_value)
})
diff --git a/js/cnvpytor/HDF5IndexedReader.js b/js/cnvpytor/HDF5IndexedReader.js
index cdcafd3ed..f028105f2 100644
--- a/js/cnvpytor/HDF5IndexedReader.js
+++ b/js/cnvpytor/HDF5IndexedReader.js
@@ -232,7 +232,7 @@ class HDF5Reader {
return chr_wig
}
- async get_baf_signals(chrom, bin_size, signal_name){
+ async get_baf_signals(chrom, bin_size, signal_name, scaling_factor = -1){
/* return two list of dictionary*/
let chr_wig_1 = [];
let chr_wig_2 = [];
@@ -243,16 +243,16 @@ class HDF5Reader {
let max_value = Math.max(...bin_value);
const res = bin_value.indexOf(max_value);
let lh = Math.max(res / 200, 1 - res / 200);
- chr_wig_1.push({chr:chrom, start: bin_idx*bin_size, end: (bin_idx+1) * bin_size, value: -2 * lh})
+ chr_wig_1.push({chr:chrom, start: bin_idx*bin_size, end: (bin_idx+1) * bin_size, value: scaling_factor * lh})
if(lh != 0.5){
- chr_wig_2.push({chr:chrom, start: bin_idx*bin_size, end: (bin_idx+1) * bin_size, value: -2 *(1-lh)})
+ chr_wig_2.push({chr:chrom, start: bin_idx*bin_size, end: (bin_idx+1) * bin_size, value: scaling_factor *(1-lh)})
}
});
}
return [chr_wig_1, chr_wig_2]
}
- async get_baf_signals_v2(chrom, bin_size, signal_name){
+ async get_baf_signals_v2(chrom, bin_size, signal_name, scaling_factor = -1){
/* return two list of dictionary*/
let chr_wig_1 = [];
@@ -262,9 +262,9 @@ class HDF5Reader {
let chrom_data = await chrom_dataset.to_array() //create_nested_array(value, shape)
chrom_data.forEach((lh, bin_idx) => {
if (!isNaN(lh)){
- chr_wig_1.push({chr:chrom, start: bin_idx*bin_size, end: (bin_idx+1) * bin_size, value: -2 * ( 0.5 - lh )})
+ chr_wig_1.push({chr:chrom, start: bin_idx*bin_size, end: (bin_idx+1) * bin_size, value: scaling_factor * ( 0.5 - lh )})
if(lh != 0.5){
- chr_wig_2.push({chr:chrom, start: bin_idx*bin_size, end: (bin_idx+1) * bin_size, value: -2 * ( 0.5 + lh )})
+ chr_wig_2.push({chr:chrom, start: bin_idx*bin_size, end: (bin_idx+1) * bin_size, value: scaling_factor * ( 0.5 + lh )})
}
}
});
diff --git a/js/cnvpytor/cnvpytorTrack.js b/js/cnvpytor/cnvpytorTrack.js
index 6c9ded55d..a7cd3350a 100644
--- a/js/cnvpytor/cnvpytorTrack.js
+++ b/js/cnvpytor/cnvpytorTrack.js
@@ -25,7 +25,6 @@
*/
import TrackBase from "../trackBase.js"
-import paintAxis from "../util/paintAxis.js"
import MenuUtils from "../ui/menuUtils.js"
import HDF5IndexedReader from "./HDF5IndexedReader.js"
import {CNVpytorVCF} from "./cnvpytorVCF.js"
@@ -47,7 +46,6 @@ class CNVPytorTrack extends TrackBase {
constructor(config, browser) {
super(config, browser)
this.featureType = 'numeric'
- this.paintAxis = paintAxis
if (!config.max) {
this.defaultScale = true
@@ -118,8 +116,9 @@ class CNVPytorTrack extends TrackBase {
this.wigFeatures_obj[this.bin_size] = {}
let dataWigs;
- if(this.config.cnv_caller == '2D'){
+ if(this.cnv_caller == '2D'){
+
dataWigs = await cnvpytor_obj.read_rd_baf('2D')
wigFeatures = dataWigs[0]
@@ -409,17 +408,17 @@ class CNVPytorTrack extends TrackBase {
if (this.defaultScale) {
if (this.signal_name == 'rd_snp') {
this.dataRange = {
- min: this.config.min || this.dataRange.min || -2,
- max: this.config.max || this.dataRange.max || 6
+ min: this.config.min || this.dataRange.min || -1,
+ max: this.config.max || this.dataRange.max || 5
}
} else if (this.signal_name == 'rd') {
this.dataRange = {
min: this.config.min || this.dataRange.min || 0,
- max: this.config.max || this.dataRange.max || 6
+ max: this.config.max || this.dataRange.max || 5
}
} else if (this.signal_name == 'snp') {
this.dataRange = {
- min: this.config.min || this.dataRange.min || -2,
+ min: this.config.min || this.dataRange.min || -1,
max: this.config.max || this.dataRange.max || 0
}
}
@@ -463,8 +462,96 @@ class CNVPytorTrack extends TrackBase {
}
}
}
+
+ let props = {
+ 'strokeStyle': 'lightgray',
+ 'strokeWidth': 0.5
+ }
+ let y = yScale(2);
+ IGVGraphics.dashedLine(options.context, 0, y, options.pixelWidth, y, 5, props)
+
}
+ paintAxis(ctx, pixelWidth, pixelHeight) {
+
+ var x1,
+ x2,
+ y1,
+ y2,
+ a,
+ b,
+ reference,
+ shim,
+ font = {
+ 'font': 'normal 10px Arial',
+ 'textAlign': 'right',
+ 'strokeStyle': "black"
+ }
+
+ if (undefined === this.dataRange || undefined === this.dataRange.max || undefined === this.dataRange.min) {
+ return
+ }
+
+ let flipAxis = (undefined === this.flipAxis) ? false : this.flipAxis
+
+ IGVGraphics.fillRect(ctx, 0, 0, pixelWidth, pixelHeight, {'fillStyle': "rgb(255, 255, 255)"})
+
+ reference = 0.95 * pixelWidth
+ x1 = reference - 8
+ x2 = reference
+
+ //shim = 0.5 * 0.125;
+ shim = .01
+ y1 = y2 = shim * pixelHeight
+
+ a = {x: x2, y: y1}
+
+ // tick
+ IGVGraphics.strokeLine(ctx, x1, y1, x2, y2, font)
+ IGVGraphics.fillText(ctx, prettyPrint(flipAxis ? this.dataRange.min : this.dataRange.max), x1 + 4, y1 + 12, font)
+
+ //shim = 0.25 * 0.125;
+ y1 = y2 = (1.0 - shim) * pixelHeight
+
+ b = {x: x2, y: y1}
+
+ // tick
+ IGVGraphics.strokeLine(ctx, x1, y1, x2, y2, font)
+ IGVGraphics.fillText(ctx, prettyPrint(flipAxis ? this.dataRange.max : this.dataRange.min), x1 + 4, y1 - 4, font)
+
+ IGVGraphics.strokeLine(ctx, a.x, a.y, b.x, b.y, font)
+
+ function prettyPrint(number) {
+ // if number >= 100, show whole number
+ // if >= 1 show 1 significant digits
+ // if < 1 show 2 significant digits
+
+ if (number === 0) {
+ return "0"
+ } else if (Math.abs(number) >= 10) {
+ return number.toFixed()
+ } else if (number %1 == 0){
+ return number.toFixed()
+ }
+ else if (Math.abs(number) >= 1) {
+ return number.toFixed(1)
+ } else {
+ return number.toFixed(2)
+ }
+ }
+ const scaleFactor = this.getScaleFactor(this.dataRange.min, this.dataRange.max, pixelHeight, this.logScale)
+ const yScale = (yValue) => this.logScale
+ ? this.computeYPixelValueInLogScale(yValue, scaleFactor)
+ : this.computeYPixelValue(yValue, scaleFactor)
+ const n = Math.ceil((this.dataRange.max - this.dataRange.min) /10)
+ for (let p = Math.ceil(this.dataRange.min+1); p < Math.round(this.dataRange.max - 0.4 ); p += n) {
+ const yp = yScale(p)
+ IGVGraphics.strokeLine(ctx, 45, yp, 50, yp, font) // Offset dashes up by 2 pixel
+ IGVGraphics.fillText(ctx, prettyPrint(flipAxis ? this.dataRange.max-p: p), 44, yp+4, font)
+
+ }
+
+ }
popupData(clickState, features) {
const featuresArray = features || clickState.viewport.cachedFeatures
diff --git a/js/cnvpytor/cnvpytorVCF.js b/js/cnvpytor/cnvpytorVCF.js
index 382a3a0d0..2b9d95b10 100644
--- a/js/cnvpytor/cnvpytorVCF.js
+++ b/js/cnvpytor/cnvpytorVCF.js
@@ -78,16 +78,13 @@ class CNVpytorVCF {
// finalFeatureSet = this.readDepthMeanshift(avgbin)
var baf = this.formatDataStructure_BAF(avgbin, 'max_likelihood')
}else if(caller=='2D'){
-
let caller_obj = new combined_caller.CombinedCaller(avgbin, this.binSize)
let processed_bins = await caller_obj.call_2d()
finalFeatureSet = [processed_bins.binScore, [], processed_bins.segment_score]
-
- var baf = caller_obj.formatDataStructure_BAF('max_likelihood')
+ var baf = caller_obj.formatDataStructure_BAF('max_likelihood', -1)
}
-
return [finalFeatureSet, baf]
}
@@ -108,8 +105,6 @@ class CNVpytorVCF {
return results
}
-
-
format_BAF_likelihood(wigFeatures) {
const results = []
@@ -155,8 +150,8 @@ class CNVpytorVCF {
- formatDataStructure_BAF(wigFeatures, feature_column, scaling_factor = 2) {
- /* Rescale the BAF level from 0:1 to -2:0*/
+ formatDataStructure_BAF(wigFeatures, feature_column, scaling_factor=-1) {
+ /* Rescale the BAF level from 0:1 to scaling_factpr:0*/
const baf1 = []
const baf2 = []
for (const [chr, wig] of Object.entries(wigFeatures)) {
@@ -168,10 +163,10 @@ class CNVpytorVCF {
let value = sample[feature_column]
if (value != 0.5){
- baf2_value.value = -2 * (1 - value)
+ baf2_value.value = scaling_factor * (1 - value)
baf2.push(baf2_value)
}
- baf1_value.value = -2 * value
+ baf1_value.value = scaling_factor * value
baf1.push(baf1_value)
}
diff --git a/js/embedCss.js b/js/embedCss.js
index 39d5e3c62..31abcd572 100644
--- a/js/embedCss.js
+++ b/js/embedCss.js
@@ -1,6 +1,6 @@
function embedCSS() {
- var css = '.igv-navbar {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n color: #444;\n font-size: 12px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n line-height: 32px;\n padding-left: 8px;\n padding-right: 8px;\n margin-top: 2px;\n margin-bottom: 6px;\n height: 32px;\n border-style: solid;\n border-radius: 3px;\n border-width: thin;\n border-color: #bfbfbf;\n background-color: #f3f3f3;\n}\n.igv-navbar .igv-navbar-left-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 32px;\n line-height: 32px;\n}\n.igv-navbar .igv-navbar-left-container .igv-logo {\n width: 34px;\n height: 32px;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-left-container .igv-current-genome {\n height: 32px;\n margin-left: 4px;\n margin-right: 4px;\n user-select: none;\n line-height: 32px;\n vertical-align: middle;\n text-align: center;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container {\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n height: 100%;\n width: 125px;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container select {\n display: block;\n cursor: pointer;\n width: 100px;\n height: 75%;\n outline: none;\n font-size: 12px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n margin-left: 8px;\n height: 22px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 240px;\n height: 22px;\n line-height: 22px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container input.igv-search-input {\n cursor: text;\n width: 85%;\n height: 22px;\n line-height: 22px;\n font-size: 12px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n text-align: left;\n padding-left: 8px;\n margin-right: 8px;\n outline: none;\n border-style: solid;\n border-radius: 3px;\n border-width: thin;\n border-color: #bfbfbf;\n background-color: white;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container .igv-search-icon-container {\n cursor: pointer;\n height: 16px;\n width: 16px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-windowsize-panel-container {\n margin-left: 4px;\n user-select: none;\n}\n.igv-navbar .igv-navbar-right-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container-hidden {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget {\n color: #737373;\n font-size: 18px;\n margin-left: 8px;\n user-select: none;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div {\n cursor: pointer;\n margin-left: unset;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:first-child {\n height: 20px;\n width: 20px;\n margin-left: unset;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:last-child {\n height: 20px;\n width: 20px;\n margin-left: 4px;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:nth-child(even) {\n display: block;\n height: fit-content;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget input {\n display: block;\n width: 125px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget svg {\n display: block;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 {\n color: #737373;\n font-size: 18px;\n height: 32px;\n line-height: 32px;\n margin-left: 8px;\n user-select: none;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div {\n cursor: pointer;\n margin-left: unset;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:first-child {\n height: 20px;\n width: 20px;\n margin-left: unset;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:last-child {\n height: 20px;\n width: 20px;\n margin-left: 4px;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:nth-child(even) {\n width: 0;\n height: 0;\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 input {\n width: 0;\n height: 0;\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 svg {\n display: block;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-hidden {\n display: none;\n}\n\n.igv-navbar-button {\n display: block;\n box-sizing: unset;\n padding-left: 6px;\n padding-right: 6px;\n height: 18px;\n text-transform: capitalize;\n user-select: none;\n line-height: 18px;\n text-align: center;\n vertical-align: middle;\n font-family: \"Open Sans\", sans-serif;\n font-size: 11px;\n font-weight: 200;\n color: #737373;\n background-color: #f3f3f3;\n border-color: #737373;\n border-style: solid;\n border-width: thin;\n border-radius: 6px;\n}\n\n.igv-navbar-button:hover {\n cursor: pointer;\n}\n\n.igv-navbar-button-clicked {\n color: white;\n background-color: #737373;\n}\n\n.igv-navbar-icon-button {\n cursor: pointer;\n position: relative;\n width: 24px;\n height: 24px;\n margin-left: 4px;\n margin-right: 4px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.igv-navbar-icon-button > div:first-child {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: -18px;\n width: 24px;\n height: 24px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.igv-navbar-icon-button > div:last-child {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: 18px;\n width: 24px;\n height: 24px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n.igv-navbar-text-button {\n cursor: pointer;\n position: relative;\n margin-left: 2px;\n margin-right: 2px;\n border: none;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.igv-navbar-text-button > div:nth-child(2) {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: 0;\n width: 38px;\n height: 18px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.igv-navbar-text-button > div:nth-child(3) {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: 42px;\n width: 38px;\n height: 18px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n#igv-text-button-label {\n text-anchor: middle;\n dominant-baseline: middle;\n}\n\n.igv-navbar-text-button-svg-inactive rect {\n stroke: #737373;\n fill: white;\n}\n.igv-navbar-text-button-svg-inactive text {\n fill: #737373;\n}\n\n.igv-navbar-text-button-svg-hover rect {\n stroke: #737373;\n fill: #737373;\n}\n.igv-navbar-text-button-svg-hover text {\n fill: white;\n}\n\n#igv-save-svg-group rect {\n stroke: #737373;\n fill: white;\n}\n#igv-save-svg-group text {\n fill: #737373;\n}\n\n#igv-save-svg-group:hover rect {\n stroke: #737373;\n fill: #737373;\n}\n#igv-save-svg-group:hover text {\n fill: white;\n}\n\n#igv-save-png-group rect {\n stroke: #737373;\n fill: white;\n}\n#igv-save-png-group text {\n fill: #737373;\n}\n\n#igv-save-png-group:hover rect {\n stroke: #737373;\n fill: #737373;\n}\n#igv-save-png-group:hover text {\n fill: white;\n}\n\n.igv-zoom-in-notice-container {\n z-index: 1024;\n position: absolute;\n top: 8px;\n left: 50%;\n transform: translate(-50%, 0%);\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n background-color: white;\n}\n.igv-zoom-in-notice-container > div {\n padding-left: 4px;\n padding-right: 4px;\n padding-top: 2px;\n padding-bottom: 2px;\n width: 100%;\n height: 100%;\n font-family: \"Open Sans\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: #3f3f3f;\n}\n\n.igv-zoom-in-notice {\n position: absolute;\n top: 10px;\n left: 50%;\n}\n.igv-zoom-in-notice div {\n position: relative;\n left: -50%;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #3f3f3f;\n background-color: rgba(255, 255, 255, 0.51);\n z-index: 64;\n}\n\n.igv-container-spinner {\n position: absolute;\n top: 90%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1024;\n width: 24px;\n height: 24px;\n pointer-events: none;\n color: #737373;\n}\n\n.igv-multi-locus-close-button {\n position: absolute;\n top: 2px;\n right: 0;\n padding-left: 2px;\n padding-right: 2px;\n width: 12px;\n height: 12px;\n color: #666666;\n background-color: white;\n z-index: 1000;\n}\n.igv-multi-locus-close-button > svg {\n vertical-align: top;\n}\n\n.igv-multi-locus-close-button:hover {\n cursor: pointer;\n color: #434343;\n}\n\n.igv-multi-locus-ruler-label {\n z-index: 64;\n position: absolute;\n top: 2px;\n left: 0;\n width: 100%;\n height: 12px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-multi-locus-ruler-label > div {\n font-family: \"Open Sans\", sans-serif;\n font-size: 12px;\n color: rgb(16, 16, 16);\n background-color: white;\n}\n.igv-multi-locus-ruler-label > div {\n cursor: pointer;\n}\n\n.igv-multi-locus-ruler-label-square-dot {\n z-index: 64;\n position: absolute;\n left: 50%;\n top: 5%;\n transform: translate(-50%, 0%);\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-multi-locus-ruler-label-square-dot > div:first-child {\n width: 14px;\n height: 14px;\n}\n.igv-multi-locus-ruler-label-square-dot > div:last-child {\n margin-left: 16px;\n font-family: \"Open Sans\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: rgb(16, 16, 16);\n}\n\n.igv-ruler-sweeper {\n display: none;\n pointer-events: none;\n position: absolute;\n top: 26px;\n bottom: 0;\n left: 0;\n width: 0;\n z-index: 99999;\n background-color: rgba(68, 134, 247, 0.25);\n}\n\n.igv-ruler-tooltip {\n pointer-events: none;\n z-index: 128;\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 32px;\n background-color: transparent;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ruler-tooltip > div {\n pointer-events: none;\n width: 128px;\n height: auto;\n padding: 1px;\n color: #373737;\n font-size: 10px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n background-color: white;\n border-style: solid;\n border-width: thin;\n border-color: #373737;\n}\n\n.igv-track-label {\n position: absolute;\n left: 8px;\n top: 8px;\n width: auto;\n height: auto;\n max-width: 50%;\n padding-left: 4px;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: \"Open Sans\", sans-serif;\n font-size: small;\n font-weight: 400;\n text-align: center;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n border-color: #444;\n border-radius: 2px;\n border-style: solid;\n border-width: thin;\n background-color: white;\n z-index: 128;\n cursor: pointer;\n}\n\n.igv-track-label:hover,\n.igv-track-label:focus,\n.igv-track-label:active {\n background-color: #e8e8e8;\n}\n\n.igv-track-label-popup-shim {\n padding-left: 8px;\n padding-right: 8px;\n padding-top: 4px;\n}\n\n.igv-center-line {\n display: none;\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n z-index: 8;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n border-left-style: dashed;\n border-left-width: thin;\n border-right-style: dashed;\n border-right-width: thin;\n}\n\n.igv-center-line-wide {\n background-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(127, 127, 127, 0.51);\n border-right-color: rgba(127, 127, 127, 0.51);\n}\n\n.igv-center-line-thin {\n background-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(127, 127, 127, 0.51);\n border-right-color: rgba(0, 0, 0, 0);\n}\n\n.igv-cursor-guide-horizontal {\n display: none;\n pointer-events: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n left: 0;\n right: 0;\n top: 50%;\n height: 1px;\n z-index: 1;\n margin-left: 50px;\n margin-right: 54px;\n border-top-style: dotted;\n border-top-width: thin;\n border-top-color: rgba(127, 127, 127, 0.76);\n}\n\n.igv-cursor-guide-vertical {\n pointer-events: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n width: 1px;\n z-index: 1;\n border-left-style: dotted;\n border-left-width: thin;\n border-left-color: rgba(127, 127, 127, 0.76);\n display: none;\n}\n\n.igv-user-feedback {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 512px;\n height: 360px;\n z-index: 2048;\n background-color: white;\n border-color: #a2a2a2;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #444;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-user-feedback div:first-child {\n position: relative;\n height: 24px;\n width: 100%;\n background-color: white;\n border-bottom-color: #a2a2a2;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-user-feedback div:first-child div {\n position: absolute;\n top: 2px;\n width: 16px;\n height: 16px;\n background-color: transparent;\n}\n.igv-user-feedback div:first-child div:first-child {\n left: 8px;\n}\n.igv-user-feedback div:first-child div:last-child {\n cursor: pointer;\n right: 8px;\n}\n.igv-user-feedback div:last-child {\n width: 100%;\n height: calc(100% - 24px);\n border-width: 0;\n}\n.igv-user-feedback div:last-child div {\n width: auto;\n height: auto;\n margin: 8px;\n}\n\n.igv-generic-dialog-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 300px;\n height: 200px;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n z-index: 2048;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header div {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-generic-dialog-container .igv-generic-dialog-one-liner {\n color: #373737;\n width: 95%;\n height: 24px;\n line-height: 24px;\n text-align: left;\n margin-top: 8px;\n padding-left: 8px;\n overflow-wrap: break-word;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input {\n margin-top: 8px;\n width: 95%;\n height: 24px;\n color: #373737;\n line-height: 24px;\n padding-left: 8px;\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input div {\n width: 30%;\n height: 100%;\n font-size: 16px;\n text-align: right;\n padding-right: 8px;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\n width: 50%;\n font-size: 16px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input {\n margin-top: 8px;\n width: calc(100% - 16px);\n height: 24px;\n color: #373737;\n line-height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input input {\n font-size: 16px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel {\n width: 100%;\n height: 28px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div {\n margin-top: 32px;\n color: white;\n font-family: \"Open Sans\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n width: 75px;\n height: 28px;\n line-height: 28px;\n text-align: center;\n border-color: transparent;\n border-style: solid;\n border-width: thin;\n border-radius: 2px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child {\n margin-left: 32px;\n margin-right: 0;\n background-color: #5ea4e0;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child {\n margin-left: 0;\n margin-right: 32px;\n background-color: #c4c4c4;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child:hover {\n cursor: pointer;\n background-color: #3b5c7f;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child:hover {\n cursor: pointer;\n background-color: #7f7f7f;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok {\n width: 100%;\n height: 36px;\n margin-top: 32px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok div {\n width: 98px;\n height: 36px;\n line-height: 36px;\n text-align: center;\n color: white;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n border-color: white;\n border-style: solid;\n border-width: thin;\n border-radius: 4px;\n background-color: #2B81AF;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok div:hover {\n cursor: pointer;\n background-color: #25597f;\n}\n\n.igv-generic-container {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2048;\n background-color: white;\n cursor: pointer;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-container div:first-child {\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n height: 24px;\n width: 100%;\n background-color: #dddddd;\n}\n.igv-generic-container div:first-child i {\n display: block;\n color: #5f5f5f;\n cursor: pointer;\n width: 14px;\n height: 14px;\n margin-right: 8px;\n margin-bottom: 4px;\n}\n\n.igv-menu-popup {\n position: absolute;\n top: 0;\n left: 0;\n width: max-content;\n z-index: 4096;\n cursor: pointer;\n font-family: \"Open Sans\", sans-serif;\n font-size: small;\n font-weight: 400;\n color: #4b4b4b;\n background: white;\n border-radius: 4px;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-end;\n text-align: left;\n}\n.igv-menu-popup > div:not(:first-child) {\n width: 100%;\n}\n.igv-menu-popup > div:not(:first-child) > div {\n background: white;\n}\n.igv-menu-popup > div:not(:first-child) > div.context-menu {\n padding-left: 4px;\n padding-right: 4px;\n}\n.igv-menu-popup > div:not(:first-child) > div:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-menu-popup > div:not(:first-child) > div:hover {\n background: #efefef;\n}\n\n.igv-menu-popup-shim {\n padding-left: 8px;\n padding-right: 8px;\n padding-bottom: 1px;\n padding-top: 1px;\n}\n\n.igv-menu-popup-header {\n position: relative;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-menu-popup-header div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-menu-popup-header div:hover {\n cursor: pointer;\n color: #444;\n}\n\n.igv-menu-popup-check-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n height: 20px;\n margin-right: 4px;\n background-color: transparent;\n}\n.igv-menu-popup-check-container div {\n padding-top: 2px;\n padding-left: 8px;\n}\n.igv-menu-popup-check-container div:first-child {\n position: relative;\n width: 12px;\n height: 12px;\n}\n.igv-menu-popup-check-container div:first-child svg {\n position: absolute;\n width: 12px;\n height: 12px;\n}\n\n.igv-user-feedback {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 512px;\n height: 360px;\n z-index: 2048;\n background-color: white;\n border-color: #a2a2a2;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #444;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-user-feedback div:first-child {\n position: relative;\n height: 24px;\n width: 100%;\n background-color: white;\n border-bottom-color: #a2a2a2;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-user-feedback div:first-child div {\n position: absolute;\n top: 2px;\n width: 16px;\n height: 16px;\n background-color: transparent;\n}\n.igv-user-feedback div:first-child div:first-child {\n left: 8px;\n}\n.igv-user-feedback div:first-child div:last-child {\n cursor: pointer;\n right: 8px;\n}\n.igv-user-feedback div:last-child {\n width: 100%;\n height: calc(100% - 24px);\n border-width: 0;\n}\n.igv-user-feedback div:last-child div {\n width: auto;\n height: auto;\n margin: 8px;\n}\n\n.igv-loading-spinner-container {\n z-index: 1024;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 32px;\n height: 32px;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-loading-spinner-container > div {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border: 4px solid rgba(128, 128, 128, 0.5);\n border-top-color: rgb(255, 255, 255);\n animation: spin 1s ease-in-out infinite;\n -webkit-animation: spin 1s ease-in-out infinite;\n}\n\n@keyframes spin {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n@-webkit-keyframes spin {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.igv-roi-menu {\n position: absolute;\n z-index: 512;\n font-family: \"Open Sans\", sans-serif;\n font-size: small;\n font-weight: 400;\n color: #4b4b4b;\n background-color: white;\n width: 192px;\n border-radius: 4px;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-menu > div:first-child {\n height: 24px;\n border-top-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-roi-menu > div:first-child > div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-roi-menu > div:first-child > div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-menu > div:last-child {\n background-color: white;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: 0;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n text-align: start;\n vertical-align: middle;\n}\n.igv-roi-menu > div:last-child > div {\n height: 24px;\n padding-left: 4px;\n border-bottom-style: solid;\n border-bottom-width: thin;\n border-bottom-color: #7f7f7f;\n}\n.igv-roi-menu > div:last-child > div:not(:first-child):hover {\n cursor: pointer;\n background-color: rgba(127, 127, 127, 0.1);\n}\n.igv-roi-menu > div:last-child div:first-child {\n font-style: italic;\n text-align: center;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-menu > div:last-child > div:last-child {\n border-bottom-width: 0;\n border-bottom-color: transparent;\n}\n\n.igv-roi-placeholder {\n font-style: normal;\n color: rgba(75, 75, 75, 0.6);\n}\n\n.igv-roi-table {\n position: absolute;\n z-index: 1024;\n width: min-content;\n max-width: 1600px;\n border-color: #7f7f7f;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: 12px;\n font-weight: 400;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n cursor: default;\n}\n.igv-roi-table > div {\n height: 24px;\n font-size: 14px;\n text-align: start;\n vertical-align: middle;\n line-height: 24px;\n}\n.igv-roi-table > div:first-child {\n border-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-top-width: 0;\n border-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n.igv-roi-table > div:first-child > div:first-child {\n text-align: center;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n margin-left: 4px;\n margin-right: 4px;\n width: calc(100% - 4px - 12px);\n}\n.igv-roi-table > div:first-child > div:last-child {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7f7f7f;\n}\n.igv-roi-table > div:first-child > div:last-child > svg {\n display: block;\n}\n.igv-roi-table > div:first-child > div:last-child:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-table > .igv-roi-table-description {\n padding: 4px;\n margin-left: 4px;\n word-break: break-all;\n overflow-y: auto;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n background-color: transparent;\n}\n.igv-roi-table > .igv-roi-table-goto-explainer {\n margin-top: 5px;\n margin-left: 4px;\n color: #7F7F7F;\n font-style: italic;\n height: 24px;\n border-top: solid lightgray;\n background-color: transparent;\n}\n.igv-roi-table > .igv-roi-table-column-titles {\n height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n padding-right: 16px;\n background-color: white;\n border-top-color: #7f7f7f;\n border-top-style: solid;\n border-top-width: thin;\n border-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: left;\n margin-left: 4px;\n height: 24px;\n overflow: hidden;\n text-overflow: ellipsis;\n border-right-color: #7f7f7f;\n border-right-style: solid;\n border-right-width: thin;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:last-child {\n border-right: unset;\n}\n.igv-roi-table > .igv-roi-table-row-container {\n overflow: auto;\n resize: both;\n max-width: 1600px;\n height: 360px;\n background-color: transparent;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row {\n height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: left;\n margin-left: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border-right-color: transparent;\n border-right-style: solid;\n border-right-width: thin;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:last-child {\n border-right: unset;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row-hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.igv-roi-table > div:last-child {\n height: 32px;\n line-height: 32px;\n border-top-color: #7f7f7f;\n border-top-style: solid;\n border-top-width: thin;\n border-bottom-color: transparent;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-width: 0;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n\n.igv-roi-table-row-selected {\n background-color: rgba(0, 0, 0, 0.125);\n}\n\n.igv-roi-table-button {\n cursor: pointer;\n height: 20px;\n user-select: none;\n line-height: 20px;\n text-align: center;\n vertical-align: middle;\n font-family: \"Open Sans\", sans-serif;\n font-size: 13px;\n font-weight: 400;\n color: black;\n padding-left: 6px;\n padding-right: 6px;\n background-color: rgb(239, 239, 239);\n border-color: black;\n border-style: solid;\n border-width: thin;\n border-radius: 3px;\n}\n\n.igv-roi-table-button:hover {\n font-weight: 400;\n background-color: rgba(0, 0, 0, 0.13);\n}\n\n.igv-roi-region {\n z-index: 64;\n position: absolute;\n top: 0;\n bottom: 0;\n pointer-events: none;\n overflow: visible;\n margin-top: 44px;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-region > div {\n position: relative;\n width: 100%;\n height: 8px;\n pointer-events: auto;\n}\n\n.igv-roi-menu-row {\n height: 24px;\n padding-left: 8px;\n font-size: small;\n text-align: start;\n vertical-align: middle;\n line-height: 24px;\n background-color: white;\n}\n\n.igv-roi-menu-row-edit-description {\n width: -webkit-fill-available;\n font-size: small;\n text-align: start;\n vertical-align: middle;\n background-color: white;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n}\n.igv-roi-menu-row-edit-description > label {\n margin-left: 2px;\n margin-bottom: 0;\n display: block;\n width: -webkit-fill-available;\n}\n.igv-roi-menu-row-edit-description > input {\n display: block;\n margin-left: 2px;\n margin-right: 2px;\n margin-bottom: 1px;\n width: -webkit-fill-available;\n}\n\n.igv-container {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n padding-top: 4px;\n user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n min-height: 160px;\n}\n\n.igv-viewport {\n position: relative;\n margin-top: 5px;\n line-height: 1;\n overflow-x: hidden;\n overflow-y: hidden;\n}\n\n.igv-viewport-content {\n position: relative;\n width: 100%;\n}\n.igv-viewport-content > canvas {\n position: relative;\n display: block;\n}\n\n.igv-column-container {\n position: relative;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n width: 100%;\n}\n\n.igv-column-shim {\n width: 1px;\n margin-left: 2px;\n margin-right: 2px;\n background-color: #545453;\n}\n\n.igv-axis-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 50px;\n}\n.igv-axis-column > div {\n position: relative;\n margin-top: 5px;\n width: 100%;\n}\n.igv-axis-column > div > div {\n z-index: 512;\n position: absolute;\n top: 8px;\n left: 8px;\n width: fit-content;\n height: fit-content;\n background-color: transparent;\n display: grid;\n align-items: start;\n justify-items: center;\n}\n.igv-axis-column > div > div > input {\n display: block;\n margin: unset;\n cursor: pointer;\n}\n\n.igv-column {\n position: relative;\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-sample-info-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-sample-name-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-scrollbar-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 14px;\n}\n.igv-scrollbar-column > div {\n position: relative;\n margin-top: 5px;\n width: 14px;\n}\n.igv-scrollbar-column > div > div {\n cursor: pointer;\n position: absolute;\n top: 0;\n left: 2px;\n width: 8px;\n border-width: 1px;\n border-style: solid;\n border-color: #c4c4c4;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.igv-scrollbar-column > div > div:hover {\n background-color: #c4c4c4;\n}\n\n.igv-track-drag-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 12px;\n background-color: white;\n}\n.igv-track-drag-column > .igv-track-drag-handle {\n z-index: 512;\n position: relative;\n cursor: pointer;\n margin-top: 5px;\n width: 100%;\n border-style: solid;\n border-width: 0;\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.igv-track-drag-column .igv-track-drag-handle-color {\n background-color: #c4c4c4;\n}\n.igv-track-drag-column .igv-track-drag-handle-hover-color {\n background-color: #787878;\n}\n.igv-track-drag-column .igv-track-drag-handle-selected-color {\n background-color: #0963fa;\n}\n.igv-track-drag-column > .igv-track-drag-shim {\n position: relative;\n margin-top: 5px;\n width: 100%;\n border-style: solid;\n border-width: 0;\n}\n\n.igv-gear-menu-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 28px;\n}\n.igv-gear-menu-column > div {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n margin-top: 5px;\n width: 100%;\n background: white;\n}\n.igv-gear-menu-column > div > div {\n position: relative;\n margin-top: 4px;\n width: 16px;\n height: 16px;\n color: #7F7F7F;\n}\n.igv-gear-menu-column > div > div:hover {\n cursor: pointer;\n color: #444;\n}\n\n/*# sourceMappingURL=dom.css.map */\n'
+ var css = '.igv-navbar {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n color: #444;\n font-size: 12px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n line-height: 32px;\n padding-left: 8px;\n padding-right: 8px;\n margin-top: 2px;\n margin-bottom: 6px;\n height: 32px;\n border-style: solid;\n border-radius: 3px;\n border-width: thin;\n border-color: #bfbfbf;\n background-color: #f3f3f3;\n}\n.igv-navbar .igv-navbar-left-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 32px;\n line-height: 32px;\n}\n.igv-navbar .igv-navbar-left-container .igv-logo {\n width: 34px;\n height: 32px;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-left-container .igv-current-genome {\n height: 32px;\n margin-left: 4px;\n margin-right: 4px;\n user-select: none;\n line-height: 32px;\n vertical-align: middle;\n text-align: center;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container {\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n height: 100%;\n width: 125px;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container select {\n display: block;\n cursor: pointer;\n width: 100px;\n height: 75%;\n outline: none;\n font-size: 12px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n margin-left: 8px;\n height: 22px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 240px;\n height: 22px;\n line-height: 22px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container input.igv-search-input {\n cursor: text;\n width: 85%;\n height: 22px;\n line-height: 22px;\n font-size: 12px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n text-align: left;\n padding-left: 8px;\n margin-right: 8px;\n outline: none;\n border-style: solid;\n border-radius: 3px;\n border-width: thin;\n border-color: #bfbfbf;\n background-color: white;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container .igv-search-icon-container {\n cursor: pointer;\n height: 16px;\n width: 16px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-windowsize-panel-container {\n margin-left: 4px;\n user-select: none;\n}\n.igv-navbar .igv-navbar-right-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container-hidden {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget {\n color: #737373;\n font-size: 18px;\n margin-left: 8px;\n user-select: none;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div {\n cursor: pointer;\n margin-left: unset;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:first-child {\n height: 20px;\n width: 20px;\n margin-left: unset;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:last-child {\n height: 20px;\n width: 20px;\n margin-left: 4px;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:nth-child(even) {\n display: block;\n height: fit-content;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget input {\n display: block;\n width: 125px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget svg {\n display: block;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 {\n color: #737373;\n font-size: 18px;\n height: 32px;\n line-height: 32px;\n margin-left: 8px;\n user-select: none;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div {\n cursor: pointer;\n margin-left: unset;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:first-child {\n height: 20px;\n width: 20px;\n margin-left: unset;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:last-child {\n height: 20px;\n width: 20px;\n margin-left: 4px;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:nth-child(even) {\n width: 0;\n height: 0;\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 input {\n width: 0;\n height: 0;\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 svg {\n display: block;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-hidden {\n display: none;\n}\n\n.igv-navbar-button {\n display: block;\n box-sizing: unset;\n padding-left: 6px;\n padding-right: 6px;\n height: 18px;\n text-transform: capitalize;\n user-select: none;\n line-height: 18px;\n text-align: center;\n vertical-align: middle;\n font-family: \"Open Sans\", sans-serif;\n font-size: 11px;\n font-weight: 200;\n color: #737373;\n background-color: #f3f3f3;\n border-color: #737373;\n border-style: solid;\n border-width: thin;\n border-radius: 6px;\n}\n\n.igv-navbar-button:hover {\n cursor: pointer;\n}\n\n.igv-navbar-button-clicked {\n color: white;\n background-color: #737373;\n}\n\n.igv-navbar-icon-button {\n cursor: pointer;\n position: relative;\n width: 24px;\n height: 24px;\n margin-left: 4px;\n margin-right: 4px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.igv-navbar-icon-button > div:first-child {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: -18px;\n width: 24px;\n height: 24px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.igv-navbar-icon-button > div:last-child {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: 18px;\n width: 24px;\n height: 24px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n.igv-navbar-text-button {\n cursor: pointer;\n position: relative;\n margin-left: 2px;\n margin-right: 2px;\n border: none;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.igv-navbar-text-button > div:nth-child(2) {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: 0;\n width: 38px;\n height: 18px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.igv-navbar-text-button > div:nth-child(3) {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: 42px;\n width: 38px;\n height: 18px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n#igv-text-button-label {\n text-anchor: middle;\n dominant-baseline: middle;\n}\n\n.igv-navbar-text-button-svg-inactive rect {\n stroke: #737373;\n fill: white;\n}\n.igv-navbar-text-button-svg-inactive text {\n fill: #737373;\n}\n\n.igv-navbar-text-button-svg-hover rect {\n stroke: #737373;\n fill: #737373;\n}\n.igv-navbar-text-button-svg-hover text {\n fill: white;\n}\n\n#igv-save-svg-group rect {\n stroke: #737373;\n fill: white;\n}\n#igv-save-svg-group text {\n fill: #737373;\n}\n\n#igv-save-svg-group:hover rect {\n stroke: #737373;\n fill: #737373;\n}\n#igv-save-svg-group:hover text {\n fill: white;\n}\n\n#igv-save-png-group rect {\n stroke: #737373;\n fill: white;\n}\n#igv-save-png-group text {\n fill: #737373;\n}\n\n#igv-save-png-group:hover rect {\n stroke: #737373;\n fill: #737373;\n}\n#igv-save-png-group:hover text {\n fill: white;\n}\n\n.igv-zoom-in-notice-container {\n z-index: 1024;\n position: absolute;\n top: 8px;\n left: 50%;\n transform: translate(-50%, 0%);\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n background-color: white;\n}\n.igv-zoom-in-notice-container > div {\n padding-left: 4px;\n padding-right: 4px;\n padding-top: 2px;\n padding-bottom: 2px;\n width: 100%;\n height: 100%;\n font-family: \"Open Sans\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: #3f3f3f;\n}\n\n.igv-zoom-in-notice {\n position: absolute;\n top: 10px;\n left: 50%;\n}\n.igv-zoom-in-notice div {\n position: relative;\n left: -50%;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #3f3f3f;\n background-color: rgba(255, 255, 255, 0.51);\n z-index: 64;\n}\n\n.igv-container-spinner {\n position: absolute;\n top: 90%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1024;\n width: 24px;\n height: 24px;\n pointer-events: none;\n color: #737373;\n}\n\n.igv-multi-locus-close-button {\n position: absolute;\n top: 2px;\n right: 0;\n padding-left: 2px;\n padding-right: 2px;\n width: 12px;\n height: 12px;\n color: #666666;\n background-color: white;\n z-index: 1000;\n}\n.igv-multi-locus-close-button > svg {\n vertical-align: top;\n}\n\n.igv-multi-locus-close-button:hover {\n cursor: pointer;\n color: #434343;\n}\n\n.igv-multi-locus-ruler-label {\n z-index: 64;\n position: absolute;\n top: 2px;\n left: 0;\n width: 100%;\n height: 12px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-multi-locus-ruler-label > div {\n font-family: \"Open Sans\", sans-serif;\n font-size: 12px;\n color: rgb(16, 16, 16);\n background-color: white;\n}\n.igv-multi-locus-ruler-label > div {\n cursor: pointer;\n}\n\n.igv-multi-locus-ruler-label-square-dot {\n z-index: 64;\n position: absolute;\n left: 50%;\n top: 5%;\n transform: translate(-50%, 0%);\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-multi-locus-ruler-label-square-dot > div:first-child {\n width: 14px;\n height: 14px;\n}\n.igv-multi-locus-ruler-label-square-dot > div:last-child {\n margin-left: 16px;\n font-family: \"Open Sans\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: rgb(16, 16, 16);\n}\n\n.igv-ruler-sweeper {\n display: none;\n pointer-events: none;\n position: absolute;\n top: 26px;\n bottom: 0;\n left: 0;\n width: 0;\n z-index: 99999;\n background-color: rgba(68, 134, 247, 0.25);\n}\n\n.igv-ruler-tooltip {\n pointer-events: none;\n z-index: 128;\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 32px;\n background-color: transparent;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ruler-tooltip > div {\n pointer-events: none;\n width: 128px;\n height: auto;\n padding: 1px;\n color: #373737;\n font-size: 10px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n background-color: white;\n border-style: solid;\n border-width: thin;\n border-color: #373737;\n}\n\n.igv-track-label {\n position: absolute;\n left: 8px;\n top: 8px;\n width: auto;\n height: auto;\n max-width: 50%;\n padding-left: 4px;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: \"Open Sans\", sans-serif;\n font-size: small;\n font-weight: 400;\n text-align: center;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n border-color: #444;\n border-radius: 2px;\n border-style: solid;\n border-width: thin;\n background-color: white;\n z-index: 128;\n cursor: pointer;\n}\n\n.igv-track-label:hover,\n.igv-track-label:focus,\n.igv-track-label:active {\n background-color: #e8e8e8;\n}\n\n.igv-track-label-popup-shim {\n padding-left: 8px;\n padding-right: 8px;\n padding-top: 4px;\n}\n\n.igv-center-line {\n display: none;\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n z-index: 8;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n border-left-style: dashed;\n border-left-width: thin;\n border-right-style: dashed;\n border-right-width: thin;\n}\n\n.igv-center-line-wide {\n background-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(127, 127, 127, 0.51);\n border-right-color: rgba(127, 127, 127, 0.51);\n}\n\n.igv-center-line-thin {\n background-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(127, 127, 127, 0.51);\n border-right-color: rgba(0, 0, 0, 0);\n}\n\n.igv-cursor-guide-horizontal {\n display: none;\n pointer-events: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n left: 0;\n right: 0;\n top: 50%;\n height: 1px;\n z-index: 1;\n margin-left: 50px;\n margin-right: 54px;\n border-top-style: dotted;\n border-top-width: thin;\n border-top-color: rgba(127, 127, 127, 0.76);\n}\n\n.igv-cursor-guide-vertical {\n pointer-events: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n width: 1px;\n z-index: 1;\n border-left-style: dotted;\n border-left-width: thin;\n border-left-color: rgba(127, 127, 127, 0.76);\n display: none;\n}\n\n.igv-user-feedback {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 512px;\n height: 360px;\n z-index: 2048;\n background-color: white;\n border-color: #a2a2a2;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #444;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-user-feedback div:first-child {\n position: relative;\n height: 24px;\n width: 100%;\n background-color: white;\n border-bottom-color: #a2a2a2;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-user-feedback div:first-child div {\n position: absolute;\n top: 2px;\n width: 16px;\n height: 16px;\n background-color: transparent;\n}\n.igv-user-feedback div:first-child div:first-child {\n left: 8px;\n}\n.igv-user-feedback div:first-child div:last-child {\n cursor: pointer;\n right: 8px;\n}\n.igv-user-feedback div:last-child {\n width: 100%;\n height: calc(100% - 24px);\n border-width: 0;\n}\n.igv-user-feedback div:last-child div {\n width: auto;\n height: auto;\n margin: 8px;\n}\n\n.igv-generic-dialog-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 300px;\n height: 200px;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n z-index: 2048;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header div {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-generic-dialog-container .igv-generic-dialog-one-liner {\n color: #373737;\n width: 95%;\n height: 24px;\n line-height: 24px;\n text-align: left;\n margin-top: 8px;\n padding-left: 8px;\n overflow-wrap: break-word;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input {\n margin-top: 8px;\n width: 95%;\n height: 24px;\n color: #373737;\n line-height: 24px;\n padding-left: 8px;\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input div {\n width: 30%;\n height: 100%;\n font-size: 16px;\n text-align: right;\n padding-right: 8px;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\n width: 50%;\n font-size: 16px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input {\n margin-top: 8px;\n width: calc(100% - 16px);\n height: 24px;\n color: #373737;\n line-height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input input {\n font-size: 16px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel {\n width: 100%;\n height: 28px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div {\n margin-top: 32px;\n color: white;\n font-family: \"Open Sans\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n width: 75px;\n height: 28px;\n line-height: 28px;\n text-align: center;\n border-color: transparent;\n border-style: solid;\n border-width: thin;\n border-radius: 2px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child {\n margin-left: 32px;\n margin-right: 0;\n background-color: #5ea4e0;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child {\n margin-left: 0;\n margin-right: 32px;\n background-color: #c4c4c4;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child:hover {\n cursor: pointer;\n background-color: #3b5c7f;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child:hover {\n cursor: pointer;\n background-color: #7f7f7f;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok {\n width: 100%;\n height: 36px;\n margin-top: 32px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok div {\n width: 98px;\n height: 36px;\n line-height: 36px;\n text-align: center;\n color: white;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n border-color: white;\n border-style: solid;\n border-width: thin;\n border-radius: 4px;\n background-color: #2B81AF;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok div:hover {\n cursor: pointer;\n background-color: #25597f;\n}\n\n.igv-generic-container {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2048;\n background-color: white;\n cursor: pointer;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-container div:first-child {\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n height: 24px;\n width: 100%;\n background-color: #dddddd;\n}\n.igv-generic-container div:first-child i {\n display: block;\n color: #5f5f5f;\n cursor: pointer;\n width: 14px;\n height: 14px;\n margin-right: 8px;\n margin-bottom: 4px;\n}\n\n.igv-menu-popup {\n position: absolute;\n top: 0;\n left: 0;\n width: max-content;\n z-index: 512;\n cursor: pointer;\n font-family: \"Open Sans\", sans-serif;\n font-size: small;\n font-weight: 400;\n color: #4b4b4b;\n background: white;\n border-radius: 4px;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-end;\n text-align: left;\n}\n.igv-menu-popup > div:not(:first-child) {\n width: 100%;\n}\n.igv-menu-popup > div:not(:first-child) > div {\n background: white;\n}\n.igv-menu-popup > div:not(:first-child) > div.context-menu {\n padding-left: 4px;\n padding-right: 4px;\n}\n.igv-menu-popup > div:not(:first-child) > div:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-menu-popup > div:not(:first-child) > div:hover {\n background: #efefef;\n}\n\n.igv-menu-popup-shim {\n padding-left: 8px;\n padding-right: 8px;\n padding-bottom: 1px;\n padding-top: 1px;\n}\n\n.igv-menu-popup-header {\n position: relative;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-menu-popup-header div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-menu-popup-header div:hover {\n cursor: pointer;\n color: #444;\n}\n\n.igv-menu-popup-check-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n height: 20px;\n margin-right: 4px;\n background-color: transparent;\n}\n.igv-menu-popup-check-container div {\n padding-top: 2px;\n padding-left: 8px;\n}\n.igv-menu-popup-check-container div:first-child {\n position: relative;\n width: 12px;\n height: 12px;\n}\n.igv-menu-popup-check-container div:first-child svg {\n position: absolute;\n width: 12px;\n height: 12px;\n}\n\n.igv-user-feedback {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 512px;\n height: 360px;\n z-index: 2048;\n background-color: white;\n border-color: #a2a2a2;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #444;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-user-feedback div:first-child {\n position: relative;\n height: 24px;\n width: 100%;\n background-color: white;\n border-bottom-color: #a2a2a2;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-user-feedback div:first-child div {\n position: absolute;\n top: 2px;\n width: 16px;\n height: 16px;\n background-color: transparent;\n}\n.igv-user-feedback div:first-child div:first-child {\n left: 8px;\n}\n.igv-user-feedback div:first-child div:last-child {\n cursor: pointer;\n right: 8px;\n}\n.igv-user-feedback div:last-child {\n width: 100%;\n height: calc(100% - 24px);\n border-width: 0;\n}\n.igv-user-feedback div:last-child div {\n width: auto;\n height: auto;\n margin: 8px;\n}\n\n.igv-loading-spinner-container {\n z-index: 1024;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 32px;\n height: 32px;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-loading-spinner-container > div {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border: 4px solid rgba(128, 128, 128, 0.5);\n border-top-color: rgb(255, 255, 255);\n animation: spin 1s ease-in-out infinite;\n -webkit-animation: spin 1s ease-in-out infinite;\n}\n\n@keyframes spin {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n@-webkit-keyframes spin {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.igv-roi-menu {\n position: absolute;\n z-index: 512;\n font-family: \"Open Sans\", sans-serif;\n font-size: small;\n font-weight: 400;\n color: #4b4b4b;\n background-color: white;\n width: 192px;\n border-radius: 4px;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-menu > div:first-child {\n height: 24px;\n border-top-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-roi-menu > div:first-child > div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-roi-menu > div:first-child > div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-menu > div:last-child {\n background-color: white;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: 0;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n text-align: start;\n vertical-align: middle;\n}\n.igv-roi-menu > div:last-child > div {\n height: 24px;\n padding-left: 4px;\n border-bottom-style: solid;\n border-bottom-width: thin;\n border-bottom-color: #7f7f7f;\n}\n.igv-roi-menu > div:last-child > div:not(:first-child):hover {\n cursor: pointer;\n background-color: rgba(127, 127, 127, 0.1);\n}\n.igv-roi-menu > div:last-child div:first-child {\n font-style: italic;\n text-align: center;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-menu > div:last-child > div:last-child {\n border-bottom-width: 0;\n border-bottom-color: transparent;\n}\n\n.igv-roi-placeholder {\n font-style: normal;\n color: rgba(75, 75, 75, 0.6);\n}\n\n.igv-roi-table {\n position: absolute;\n z-index: 1024;\n width: min-content;\n max-width: 1600px;\n border-color: #7f7f7f;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: 12px;\n font-weight: 400;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n cursor: default;\n}\n.igv-roi-table > div {\n height: 24px;\n font-size: 14px;\n text-align: start;\n vertical-align: middle;\n line-height: 24px;\n}\n.igv-roi-table > div:first-child {\n border-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-top-width: 0;\n border-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n.igv-roi-table > div:first-child > div:first-child {\n text-align: center;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n margin-left: 4px;\n margin-right: 4px;\n width: calc(100% - 4px - 12px);\n}\n.igv-roi-table > div:first-child > div:last-child {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7f7f7f;\n}\n.igv-roi-table > div:first-child > div:last-child > svg {\n display: block;\n}\n.igv-roi-table > div:first-child > div:last-child:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-table > .igv-roi-table-description {\n padding: 4px;\n margin-left: 4px;\n word-break: break-all;\n overflow-y: auto;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n background-color: transparent;\n}\n.igv-roi-table > .igv-roi-table-goto-explainer {\n margin-top: 5px;\n margin-left: 4px;\n color: #7F7F7F;\n font-style: italic;\n height: 24px;\n border-top: solid lightgray;\n background-color: transparent;\n}\n.igv-roi-table > .igv-roi-table-column-titles {\n height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n padding-right: 16px;\n background-color: white;\n border-top-color: #7f7f7f;\n border-top-style: solid;\n border-top-width: thin;\n border-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: left;\n margin-left: 4px;\n height: 24px;\n overflow: hidden;\n text-overflow: ellipsis;\n border-right-color: #7f7f7f;\n border-right-style: solid;\n border-right-width: thin;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:last-child {\n border-right: unset;\n}\n.igv-roi-table > .igv-roi-table-row-container {\n overflow: auto;\n resize: both;\n max-width: 1600px;\n height: 360px;\n background-color: transparent;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row {\n height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: left;\n margin-left: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border-right-color: transparent;\n border-right-style: solid;\n border-right-width: thin;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:last-child {\n border-right: unset;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row-hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.igv-roi-table > div:last-child {\n height: 32px;\n line-height: 32px;\n border-top-color: #7f7f7f;\n border-top-style: solid;\n border-top-width: thin;\n border-bottom-color: transparent;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-width: 0;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n\n.igv-roi-table-row-selected {\n background-color: rgba(0, 0, 0, 0.125);\n}\n\n.igv-roi-table-button {\n cursor: pointer;\n height: 20px;\n user-select: none;\n line-height: 20px;\n text-align: center;\n vertical-align: middle;\n font-family: \"Open Sans\", sans-serif;\n font-size: 13px;\n font-weight: 400;\n color: black;\n padding-left: 6px;\n padding-right: 6px;\n background-color: rgb(239, 239, 239);\n border-color: black;\n border-style: solid;\n border-width: thin;\n border-radius: 3px;\n}\n\n.igv-roi-table-button:hover {\n font-weight: 400;\n background-color: rgba(0, 0, 0, 0.13);\n}\n\n.igv-roi-region {\n z-index: 64;\n position: absolute;\n top: 0;\n bottom: 0;\n pointer-events: none;\n overflow: visible;\n margin-top: 44px;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-region > div {\n position: relative;\n width: 100%;\n height: 8px;\n pointer-events: auto;\n}\n\n.igv-roi-menu-row {\n height: 24px;\n padding-left: 8px;\n font-size: small;\n text-align: start;\n vertical-align: middle;\n line-height: 24px;\n background-color: white;\n}\n\n.igv-roi-menu-row-edit-description {\n width: -webkit-fill-available;\n font-size: small;\n text-align: start;\n vertical-align: middle;\n background-color: white;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n}\n.igv-roi-menu-row-edit-description > label {\n margin-left: 2px;\n margin-bottom: 0;\n display: block;\n width: -webkit-fill-available;\n}\n.igv-roi-menu-row-edit-description > input {\n display: block;\n margin-left: 2px;\n margin-right: 2px;\n margin-bottom: 1px;\n width: -webkit-fill-available;\n}\n\n.igv-container {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n padding-top: 4px;\n user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n min-height: 160px;\n}\n\n.igv-viewport {\n position: relative;\n margin-top: 5px;\n line-height: 1;\n overflow-x: hidden;\n overflow-y: hidden;\n}\n\n.igv-viewport-content {\n position: relative;\n width: 100%;\n}\n.igv-viewport-content > canvas {\n position: relative;\n display: block;\n}\n\n.igv-column-container {\n position: relative;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n width: 100%;\n}\n\n.igv-column-shim {\n width: 1px;\n margin-left: 2px;\n margin-right: 2px;\n background-color: #545453;\n}\n\n.igv-axis-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 50px;\n}\n.igv-axis-column > div {\n position: relative;\n margin-top: 5px;\n width: 100%;\n}\n.igv-axis-column > div > div {\n z-index: 512;\n position: absolute;\n top: 8px;\n left: 8px;\n width: fit-content;\n height: fit-content;\n background-color: transparent;\n display: grid;\n align-items: start;\n justify-items: center;\n}\n.igv-axis-column > div > div > input {\n display: block;\n margin: unset;\n cursor: pointer;\n}\n\n.igv-column {\n position: relative;\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-sample-info-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-sample-name-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-scrollbar-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 14px;\n}\n.igv-scrollbar-column > div {\n position: relative;\n margin-top: 5px;\n width: 14px;\n}\n.igv-scrollbar-column > div > div {\n cursor: pointer;\n position: absolute;\n top: 0;\n left: 2px;\n width: 8px;\n border-width: 1px;\n border-style: solid;\n border-color: #c4c4c4;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.igv-scrollbar-column > div > div:hover {\n background-color: #c4c4c4;\n}\n\n.igv-track-drag-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 12px;\n background-color: white;\n}\n.igv-track-drag-column > .igv-track-drag-handle {\n z-index: 512;\n position: relative;\n cursor: pointer;\n margin-top: 5px;\n width: 100%;\n border-style: solid;\n border-width: 0;\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.igv-track-drag-column .igv-track-drag-handle-color {\n background-color: #c4c4c4;\n}\n.igv-track-drag-column .igv-track-drag-handle-hover-color {\n background-color: #787878;\n}\n.igv-track-drag-column .igv-track-drag-handle-selected-color {\n background-color: #0963fa;\n}\n.igv-track-drag-column > .igv-track-drag-shim {\n position: relative;\n margin-top: 5px;\n width: 100%;\n border-style: solid;\n border-width: 0;\n}\n\n.igv-gear-menu-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 28px;\n}\n.igv-gear-menu-column > div {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n margin-top: 5px;\n width: 100%;\n background: white;\n}\n.igv-gear-menu-column > div > div {\n position: relative;\n margin-top: 4px;\n width: 16px;\n height: 16px;\n color: #7F7F7F;\n}\n.igv-gear-menu-column > div > div:hover {\n cursor: pointer;\n color: #444;\n}\n\n/*# sourceMappingURL=dom.css.map */\n'
var style = document.createElement('style')
style.setAttribute('type', 'text/css')
diff --git a/js/feature/interactionTrack.js b/js/feature/interactionTrack.js
index bd09615ab..88b6a3567 100644
--- a/js/feature/interactionTrack.js
+++ b/js/feature/interactionTrack.js
@@ -29,7 +29,6 @@ import TrackBase from "../trackBase.js"
import IGVGraphics from "../igv-canvas.js"
import paintAxis from "../util/paintAxis.js"
import {IGVColor, StringUtils} from "../../node_modules/igv-utils/src/index.js"
-import MenuUtils from "../ui/menuUtils.js"
import {createCheckbox} from "../igv-icons.js"
import {scoreShade} from "../util/ucscUtils.js"
import FeatureSource from "./featureSource.js"
diff --git a/js/feature/mergedTrack.js b/js/feature/mergedTrack.js
index ca4f180d8..0402611b1 100644
--- a/js/feature/mergedTrack.js
+++ b/js/feature/mergedTrack.js
@@ -40,6 +40,8 @@ class MergedTrack extends TrackBase {
this.featureType = 'numeric'
this.paintAxis = paintAxis
this.graphType = config.graphType
+
+ this._alpha = this.config.alpha || 0.5
}
init(config) {
@@ -49,7 +51,6 @@ class MergedTrack extends TrackBase {
super.init(config)
}
-
async postInit() {
this.tracks = []
@@ -69,7 +70,6 @@ class MergedTrack extends TrackBase {
}
}
- this.alpha = this.config.alpha || 0.5
this.flipAxis = this.config.flipAxis ? this.config.flipAxis : false
this.logScale = this.config.logScale ? this.config.logScale : false
this.autoscale = this.config.autoscale || this.config.max === undefined
@@ -91,6 +91,14 @@ class MergedTrack extends TrackBase {
return Promise.all(p)
}
+ set alpha(alpha) {
+ this._alpha = alpha
+ }
+
+ get alpha() {
+ return this._alpha
+ }
+
get height() {
return this._height
}
diff --git a/js/feature/segTrack.js b/js/feature/segTrack.js
index 143f17f18..0c9b46083 100755
--- a/js/feature/segTrack.js
+++ b/js/feature/segTrack.js
@@ -100,7 +100,7 @@ class SegTrack extends TrackBase {
const menuItems = []
menuItems.push('
')
- menuItems.push(sortBySampleName(this.trackView))
+ menuItems.push(sortBySampleName())
if (sampleDictionary) {
menuItems.push('
')
@@ -536,15 +536,15 @@ class SegTrack extends TrackBase {
}
-function sortBySampleName(trackView) {
+function sortBySampleName() {
const object = $('')
object.text('Sort by sample names')
function sampleNameSort () {
- trackView.track.sampleKeys.sort((a, b) => trackView.sampleNameViewport.sortDirection * a.localeCompare(b))
- trackView.repaintViews()
- trackView.sampleNameViewport.sortDirection *= -1
+ this.sampleKeys.sort((a, b) => this.trackView.sampleNameViewport.sortDirection * a.localeCompare(b))
+ this.trackView.repaintViews()
+ this.trackView.sampleNameViewport.sortDirection *= -1
}
return { object, click:sampleNameSort }
diff --git a/js/trackBase.js b/js/trackBase.js
index ab5d868b1..ec83a4b3d 100644
--- a/js/trackBase.js
+++ b/js/trackBase.js
@@ -108,6 +108,8 @@ class TrackBase {
this.minHeight = config.minHeight || Math.min(25, this.height)
this.maxHeight = config.maxHeight || Math.max(1000, this.height)
+ this.isMultiSelection = config.isMultiSelection || false
+
if (config.onclick) {
this.onclick = config.onclick
config.onclick = undefined // functions cannot be saved in sessions, clear it here.
@@ -208,6 +210,10 @@ class TrackBase {
state.max = this.dataRange.max
}
+ if (this.autoscaleGroup) {
+ state.autoscaleGroup = this.autoscaleGroup
+ }
+
return state
}
@@ -346,7 +352,6 @@ class TrackBase {
* the genomic location. Overriden by most subclasses.
*
* @param clickState
- * @param features
* @returns {[]|*[]}
*/
clickedFeatures(clickState) {
@@ -541,8 +546,9 @@ class TrackBase {
object = $(createCheckbox("Autoscale", this.autoscale))
function autoScaleHandler() {
+ this.autoscaleGroup = undefined
this.autoscale = !this.autoscale
- this.trackView.updateViews()
+ this.browser.updateViews()
}
menuItems.push({ object, click:autoScaleHandler })
diff --git a/js/trackView.js b/js/trackView.js
index 46d09a82f..2b29291ad 100644
--- a/js/trackView.js
+++ b/js/trackView.js
@@ -32,9 +32,9 @@ import {DOMUtils, Icon} from '../node_modules/igv-ui/dist/igv-ui.js'
import SampleInfoViewport from "./sample/sampleInfoViewport.js";
import SampleNameViewport from './sample/sampleNameViewport.js'
import MenuPopup from "./ui/menuPopup.js"
-import {getMultiSelectedTrackViews, multiTrackSelectExclusionTypes} from "./ui/menuUtils.js"
+import {autoScaleGroupColorHash, getMultiSelectedTrackViews, multiTrackSelectExclusionTypes} from "./ui/menuUtils.js"
import { ENABLE_MULTI_TRACK_SELECTION, setMultiTrackSelectionState, setDragHandleSelectionState } from './ui/multiTrackSelectButton.js'
-import {hexToRGB} from "./util/colorPalletes.js"
+import {colorPalettes, hexToRGB} from "./util/colorPalletes.js"
const igv_axis_column_width = 50
const scrollbarExclusionTypes = new Set(['sequence', 'ruler', 'ideogram'])
@@ -131,7 +131,11 @@ class TrackView {
input.addEventListener('change', event => {
event.preventDefault()
event.stopPropagation()
+
+ this.track.isMultiSelection = event.target.checked
+
setDragHandleSelectionState(this, this.dragHandle, event.target.checked)
+
})
setMultiTrackSelectionState(this, axis, ENABLE_MULTI_TRACK_SELECTION)
@@ -191,14 +195,26 @@ class TrackView {
}
setDataRange(min, max) {
+
if (min !== undefined) {
this.track.dataRange.min = min
}
if (max !== undefined) {
this.track.dataRange.max = max
}
+
this.track.autoscale = false
+ this.track.autoscaleGroup = undefined
+
+ const list = this.browser.trackViews.filter(({ track }) => track.autoscaleGroup)
+ if (1 === list.length) {
+ list[ 0 ].track.autoscale = false
+ list[ 0 ].track.autoscaleGroup = undefined
+ list[ 0 ].repaintViews()
+ }
+
this.repaintViews()
+
}
presentColorPicker(key) {
@@ -625,7 +641,6 @@ class TrackView {
} else {
this.dragHandle = DOMUtils.div({ class: 'igv-track-drag-handle' })
this.dragHandle.classList.add('igv-track-drag-handle-color')
- this.dragHandle.dataset.selected = 'no'
}
browser.columnContainer.querySelector('.igv-track-drag-column').appendChild(this.dragHandle)
@@ -730,7 +745,7 @@ class TrackView {
event.preventDefault()
currentDragHandle = event.target
- if ('no' === currentDragHandle.dataset.selected) {
+ if (false === this.track.isMultiSelection) {
currentDragHandle.classList.remove('igv-track-drag-handle-color')
currentDragHandle.classList.add('igv-track-drag-handle-hover-color')
}
@@ -749,7 +764,7 @@ class TrackView {
if (currentDragHandle && event.target !== currentDragHandle) {
- if ('no' === currentDragHandle.dataset.selected) {
+ if (false === this.track.isMultiSelection) {
currentDragHandle.classList.remove('igv-track-drag-handle-hover-color')
currentDragHandle.classList.add('igv-track-drag-handle-color')
}
@@ -767,7 +782,7 @@ class TrackView {
event.preventDefault()
if (undefined === currentDragHandle) {
- if ('no' === event.target.dataset.selected) {
+ if (false === this.track.isMultiSelection) {
event.target.classList.remove('igv-track-drag-handle-color')
event.target.classList.add('igv-track-drag-handle-hover-color')
}
@@ -782,7 +797,7 @@ class TrackView {
event.preventDefault()
if (undefined === currentDragHandle) {
- if ('no' === event.target.dataset.selected) {
+ if (false === this.track.isMultiSelection) {
event.target.classList.remove('igv-track-drag-handle-hover-color')
event.target.classList.add('igv-track-drag-handle-color')
}
@@ -796,7 +811,7 @@ class TrackView {
event.preventDefault()
if (undefined === currentDragHandle) {
- if ('no' === event.target.dataset.selected) {
+ if (false === this.track.isMultiSelection) {
event.target.classList.remove('igv-track-drag-handle-hover-color')
event.target.classList.add('igv-track-drag-handle-color')
}
@@ -913,7 +928,18 @@ class TrackView {
const axisCanvasContext = this.axisCanvas.getContext('2d')
axisCanvasContext.scale(dpi, dpi)
- this.track.paintAxis(axisCanvasContext, width, height)
+ if (this.track.autoscaleGroup) {
+
+ if (undefined === autoScaleGroupColorHash[ this.track.autoscaleGroup ]) {
+ const colorPalette = colorPalettes['Dark2']
+ const randomIndex = Math.floor(Math.random() * colorPalettes['Dark2'].length)
+ autoScaleGroupColorHash[ this.track.autoscaleGroup ] = colorPalette[ randomIndex ]
+ }
+ const rgba = IGVColor.addAlpha(autoScaleGroupColorHash[ this.track.autoscaleGroup ], 0.75)
+ this.track.paintAxis(axisCanvasContext, width, height, rgba)
+ } else {
+ this.track.paintAxis(axisCanvasContext, width, height, undefined)
+ }
}
}
diff --git a/js/ui/menuPopup.js b/js/ui/menuPopup.js
index 4e83481cf..dc40e7c0c 100644
--- a/js/ui/menuPopup.js
+++ b/js/ui/menuPopup.js
@@ -112,15 +112,18 @@ class MenuPopup {
if (isMultiSelectedTrackView(trackView)) {
- if (true === item.doTrackOverlay) {
+ trackView.browser.multiSelectedTrackViews = getMultiSelectedTrackViews(trackView.browser)
+
+ if (true === item.doAllMultiSelectedTracks) {
item.click.call(trackView.track, e)
} else {
- for (const { track } of getMultiSelectedTrackViews(trackView.browser)) {
+ for (const { track } of trackView.browser.multiSelectedTrackViews) {
item.click.call(track, e)
}
}
} else {
+ trackView.browser.multiSelectedTrackViews = undefined
item.click.call(trackView.track, e)
}
diff --git a/js/ui/menuUtils.js b/js/ui/menuUtils.js
index 990d53319..562a6ed8e 100644
--- a/js/ui/menuUtils.js
+++ b/js/ui/menuUtils.js
@@ -1,5 +1,6 @@
import {DOMUtils} from '../../node_modules/igv-ui/dist/igv-ui.js'
import $ from "../vendor/jquery-3.3.1.slim.js"
+import {colorPalettes} from "../util/colorPalletes.js"
const colorPickerTrackTypeSet = new Set([ 'bedtype', 'alignment', 'annotation', 'variant', 'wig', 'interact' ])
@@ -7,6 +8,11 @@ const vizWindowTypes = new Set(['alignment', 'annotation', 'variant', 'eqtl', 's
const multiTrackSelectExclusionTypes = new Set(['sequence', 'ruler', 'ideogram'])
+const autoScaleGroupColorHash =
+ {
+
+ };
+
class MenuUtils {
constructor(browser) {
this.browser = browser
@@ -66,6 +72,7 @@ class MenuUtils {
if ('merged' === trackView.track.type) {
list.push('
')
list.push(trackSeparationMenuItem())
+ list.push(overlayTrackAlphaAdjustmentMenuItem())
}
return list
@@ -123,6 +130,57 @@ function isVisibilityWindowType(track) {
const hasVizWindow = track.config && track.config.visibilityWindow !== undefined
return hasVizWindow || vizWindowTypes.has(track.type)
}
+
+function overlayTrackAlphaAdjustmentMenuItem() {
+
+ const container = DOMUtils.div()
+ container.innerText = 'Set transparency'
+
+ function dialogPresentationHandler (e) {
+ const callback = alpha => {
+ this.alpha = Math.max(0.001, alpha)
+ this.updateViews()
+ }
+
+ const config =
+ {
+ label: 'Transparency',
+ value: this.alpha,
+ min: 0.0,
+ max: 1.0,
+ scaleFactor: 1000,
+ callback
+ }
+
+ this.browser.sliderDialog.present(config, e)
+ }
+
+ return { object: $(container), dialog:dialogPresentationHandler }
+}
+
+function trackSeparationMenuItem() {
+
+ const object = $('
')
+ object.text('Separate tracks')
+
+ function click(e) {
+
+ const configs = this.config.tracks.map(overlayConfig => {
+ const config = { ...overlayConfig }
+ config.isMergedTrack = undefined
+ config.order = this.order
+ return config
+ })
+
+ const _browser = this.browser
+
+ _browser.removeTrack(this)
+ _browser.loadTrackList(configs)
+ }
+
+ return { object, click }
+}
+
function groupAutoScaleMenuItem() {
const object = $('
')
@@ -130,18 +188,20 @@ function groupAutoScaleMenuItem() {
function click(e) {
- const trackViews = getMultiSelectedTrackViews(this.browser)
+ const colorPalette = colorPalettes['Dark2']
+ const randomIndex = Math.floor(Math.random() * colorPalette.length)
- const autoScaleGroupID = `auto-scale-group-${DOMUtils.guid()}`
+ const autoScaleGroupID = `auto-scale-group-${ DOMUtils.guid() }`
+ autoScaleGroupColorHash[ autoScaleGroupID ] = colorPalette[randomIndex]
- for (const trackView of trackViews) {
- trackView.track.autoscaleGroup = autoScaleGroupID
+ for (const { track } of this.browser.multiSelectedTrackViews) {
+ track.autoscaleGroup = autoScaleGroupID
}
this.browser.updateViews()
}
- return { object, click }
+ return { object, doAllMultiSelectedTracks:true, click }
}
@@ -161,6 +221,8 @@ function trackOverlayMenuItem() {
const wigConfigs = wigTracks.map(( track ) => {
const config = Object.assign({}, track.config)
config.color = track.color
+ config.autoscale = track.autoscale
+ config.autoscaleGroup = track.autoscaleGroup
return config
})
@@ -187,31 +249,8 @@ function trackOverlayMenuItem() {
}
- return { object, doTrackOverlay:true, click }
-
-}
-
-function trackSeparationMenuItem() {
-
- const object = $('
')
- object.text('Separate tracks')
-
- function click(e) {
-
- const configs = this.config.tracks.map(overlayConfig => {
- const config = { ...overlayConfig }
- config.isMergedTrack = undefined
- config.order = this.order
- return config
- })
-
- const _browser = this.browser
-
- _browser.removeTrack(this)
- _browser.loadTrackList(configs)
- }
+ return { object, doAllMultiSelectedTracks:true, click }
- return { object, click }
}
function visibilityWindowMenuItem() {
@@ -438,7 +477,7 @@ function getMultiSelectedTrackViews(browser) {
const candidates = browser.trackViews.filter(({ track }) => { return false === multiTrackSelectExclusionTypes.has(track.type) })
- let selected = candidates.filter(({ namespace, dragHandle }) => { return namespace === dragHandle.dataset.selected })
+ let selected = candidates.filter(trackView => true === trackView.track.isMultiSelection)
selected = 0 === selected.length ? undefined : selected
@@ -450,6 +489,6 @@ function isMultiSelectedTrackView(trackView) {
return selected && selected.length > 1 && new Set(selected).has(trackView)
}
-export { canShowColorPicker, multiTrackSelectExclusionTypes, getMultiSelectedTrackViews, isMultiSelectedTrackView }
+export { autoScaleGroupColorHash, canShowColorPicker, multiTrackSelectExclusionTypes, getMultiSelectedTrackViews, isMultiSelectedTrackView }
export default MenuUtils
diff --git a/js/ui/multiTrackSelectButton.js b/js/ui/multiTrackSelectButton.js
index 4a834e6d9..0bc3e07a8 100644
--- a/js/ui/multiTrackSelectButton.js
+++ b/js/ui/multiTrackSelectButton.js
@@ -55,11 +55,17 @@ function setMultiTrackSelectionState(trackView, axis, doEnableMultiSelection) {
container.style.display = 'grid'
} else {
+ trackView.track.isMultiSelection = false
+
+ // if (trackView.track.autoscaleGroup) {
+ // trackView.track.autoscaleGroup = undefined
+ // }
+
const trackSelectInput = container.querySelector('[name=track-select]')
trackSelectInput.checked = false
if (trackView.dragHandle) {
- setDragHandleSelectionState(trackView, trackView.dragHandle, trackSelectInput.checked)
+ setDragHandleSelectionState(trackView, trackView.dragHandle, false)
}
container.style.display = 'none'
@@ -71,12 +77,10 @@ function setMultiTrackSelectionState(trackView, axis, doEnableMultiSelection) {
function setDragHandleSelectionState(trackView, dragHandle, isSelected) {
if (isSelected) {
- dragHandle.dataset.selected = trackView.namespace
dragHandle.classList.remove('igv-track-drag-handle-color')
dragHandle.classList.remove('igv-track-drag-handle-hover-color')
dragHandle.classList.add('igv-track-drag-handle-selected-color')
} else {
- dragHandle.dataset.selected = 'no'
dragHandle.classList.remove('igv-track-drag-handle-hover-color')
dragHandle.classList.remove('igv-track-drag-handle-selected-color')
dragHandle.classList.add('igv-track-drag-handle-color')
diff --git a/js/util/colorPalletes.js b/js/util/colorPalletes.js
index 9731e893c..46c347e72 100644
--- a/js/util/colorPalletes.js
+++ b/js/util/colorPalletes.js
@@ -523,6 +523,7 @@ function rgbStringHeatMapLerp(_a, _b, interpolant) {
}
export {
+ colorPalettes,
appleCrayonRGB,
appleCrayonRGBA,
appleCrayonPalette,
diff --git a/js/util/paintAxis.js b/js/util/paintAxis.js
index 364fe9ab2..5a1a06b77 100644
--- a/js/util/paintAxis.js
+++ b/js/util/paintAxis.js
@@ -1,59 +1,47 @@
import IGVGraphics from "../igv-canvas.js"
-function paintAxis(ctx, pixelWidth, pixelHeight) {
-
- var x1,
- x2,
- y1,
- y2,
- a,
- b,
- reference,
- shim,
- font = {
- 'font': 'normal 10px Arial',
- 'textAlign': 'right',
- 'strokeStyle': "black"
- }
+const shim = .01
+const diagnosticColor = "rgb(251,128,114)"
+const colorStripWidth = 4
+const axesXOffset = colorStripWidth + 1
+function paintAxis(ctx, width, height, colorOrUndefined) {
if (undefined === this.dataRange || undefined === this.dataRange.max || undefined === this.dataRange.min) {
return
}
- let flipAxis = (undefined === this.flipAxis) ? false : this.flipAxis
-
- // IGVGraphics.fillRect(ctx, 0, 0, pixelWidth, pixelHeight, {'fillStyle': "rgb(255, 255, 255)"})
- IGVGraphics.fillRect(ctx, 0, 0, pixelWidth, pixelHeight, {'fillStyle': "rgba(255, 255, 255, 0)"})
+ IGVGraphics.fillRect(ctx, 0, 0, width, height, { fillStyle: 'white' })
+ if (colorOrUndefined) {
+ IGVGraphics.fillRect(ctx, width - colorStripWidth - 2, 0, colorStripWidth, height, { fillStyle: colorOrUndefined })
+ }
- reference = 0.95 * pixelWidth
- x1 = reference - 8
- x2 = reference
+ const flipAxis = (undefined === this.flipAxis) ? false : this.flipAxis
- //shim = 0.5 * 0.125;
- shim = .01
- y1 = y2 = shim * pixelHeight
+ const xTickStart = 0.95 * width - 8 - axesXOffset
+ const xTickEnd = 0.95 * width - axesXOffset
- a = {x: x2, y: y1}
+ const properties =
+ {
+ font: 'normal 10px Arial',
+ textAlign: 'right',
+ fillStyle: 'black',
+ strokeStyle: 'black',
+ }
// tick
- IGVGraphics.strokeLine(ctx, x1, y1, x2, y2, font)
- IGVGraphics.fillText(ctx, prettyPrint(flipAxis ? this.dataRange.min : this.dataRange.max), x1 + 4, y1 + 12, font)
-
- //shim = 0.25 * 0.125;
- y1 = y2 = (1.0 - shim) * pixelHeight
+ IGVGraphics.strokeLine(ctx, xTickStart, shim * height, xTickEnd, shim * height, properties)
+ IGVGraphics.fillText(ctx, prettyPrint(flipAxis ? this.dataRange.min : this.dataRange.max), xTickStart + 4, shim * height + 12, properties)
- b = {x: x2, y: y1}
+ const y = (1.0 - shim) * height
// tick
- IGVGraphics.strokeLine(ctx, x1, y1, x2, y2, font)
- IGVGraphics.fillText(ctx, prettyPrint(flipAxis ? this.dataRange.max : this.dataRange.min), x1 + 4, y1 - 4, font)
+ IGVGraphics.strokeLine(ctx, xTickStart, y, xTickEnd, y, properties)
+ IGVGraphics.fillText(ctx, prettyPrint(flipAxis ? this.dataRange.max : this.dataRange.min), xTickStart + 4, y - 4, properties)
- IGVGraphics.strokeLine(ctx, a.x, a.y, b.x, b.y, font)
+ // vertical axis
+ IGVGraphics.strokeLine(ctx, xTickEnd, shim * height, xTickEnd, y, properties)
function prettyPrint(number) {
- // if number >= 100, show whole number
- // if >= 1 show 1 significant digits
- // if < 1 show 2 significant digits
if (number === 0) {
return "0"
diff --git a/package.json b/package.json
index 175856d93..5c062541b 100644
--- a/package.json
+++ b/package.json
@@ -53,7 +53,7 @@
"circular-view": "github:igvteam/circular-view#v0.2.4",
"eslint": "^6.4.0",
"hdf5-indexed-reader": "github:jrobinso/hdf5-indexed-reader#v0.5.2",
- "igv-ui": "github:igvteam/igv-ui#v1.5.2",
+ "igv-ui": "github:igvteam/igv-ui#dat_slider_dialog",
"igv-utils": "github:igvteam/igv-utils#v1.4.8",
"mocha": "^10.2.0",
"rollup": "^2.66.0",