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":"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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;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":"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;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",