igv 2.15.3 → 2.15.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/dist/igv.esm.js +300 -306
- package/dist/igv.esm.min.js +5 -5
- package/dist/igv.esm.min.js.map +1 -1
- package/dist/igv.js +300 -306
- package/dist/igv.min.js +5 -5
- package/dist/igv.min.js.map +1 -1
- package/package.json +1 -1
package/dist/igv.js
CHANGED
|
@@ -23950,7 +23950,7 @@
|
|
|
23950
23950
|
}
|
|
23951
23951
|
};
|
|
23952
23952
|
|
|
23953
|
-
const _version = "2.15.
|
|
23953
|
+
const _version = "2.15.4";
|
|
23954
23954
|
function version() {
|
|
23955
23955
|
return _version
|
|
23956
23956
|
}
|
|
@@ -24002,7 +24002,7 @@
|
|
|
24002
24002
|
|
|
24003
24003
|
// Delay loading cytbands untils after genome initialization to use chromosome aliases (1 vs chr1, etc).
|
|
24004
24004
|
if (cytobandUrl) {
|
|
24005
|
-
genome.cytobands
|
|
24005
|
+
genome.cytobands = await loadCytobands(cytobandUrl, sequence.config, genome);
|
|
24006
24006
|
}
|
|
24007
24007
|
|
|
24008
24008
|
return genome
|
|
@@ -24104,7 +24104,7 @@
|
|
|
24104
24104
|
this.sequence = sequence;
|
|
24105
24105
|
this.chromosomeNames = sequence.chromosomeNames;
|
|
24106
24106
|
this.chromosomes = sequence.chromosomes; // An object (functions as a dictionary)
|
|
24107
|
-
this.featureDB =
|
|
24107
|
+
this.featureDB = new Map(); // Hash of name -> feature, used for search function.
|
|
24108
24108
|
|
|
24109
24109
|
this.wholeGenomeView = config.wholeGenomeView === undefined || config.wholeGenomeView;
|
|
24110
24110
|
if (this.wholeGenomeView && Object.keys(sequence.chromosomes).length > 1) {
|
|
@@ -24308,6 +24308,40 @@
|
|
|
24308
24308
|
chr = this.getChromosomeName(chr);
|
|
24309
24309
|
return this.sequence.getSequence(chr, start, end)
|
|
24310
24310
|
}
|
|
24311
|
+
|
|
24312
|
+
addFeaturesToDB(featureList, config) {
|
|
24313
|
+
|
|
24314
|
+
const insertFeature = (name, feature) => {
|
|
24315
|
+
const current = this.featureDB.get(name);
|
|
24316
|
+
if (current) {
|
|
24317
|
+
feature = (feature.end - feature.start) > (current.end - current.start) ? feature : current;
|
|
24318
|
+
|
|
24319
|
+
}
|
|
24320
|
+
this.featureDB.set(name, feature);
|
|
24321
|
+
};
|
|
24322
|
+
|
|
24323
|
+
for (let feature of featureList) {
|
|
24324
|
+
if (feature.name) {
|
|
24325
|
+
insertFeature(feature.name.toUpperCase(), feature);
|
|
24326
|
+
}
|
|
24327
|
+
if (feature.gene && feature.gene.name) {
|
|
24328
|
+
insertFeature(feature.gene.name.toUpperCase(), feature);
|
|
24329
|
+
}
|
|
24330
|
+
|
|
24331
|
+
if (config.searchableFields) {
|
|
24332
|
+
for (let f of config.searchableFields) {
|
|
24333
|
+
const value = feature.getAttributeValue(f);
|
|
24334
|
+
if (value) {
|
|
24335
|
+
if (value.indexOf(" ") > 0) {
|
|
24336
|
+
insertFeature(value.replaceAll(" ", "+").toUpperCase(), feature);
|
|
24337
|
+
} else {
|
|
24338
|
+
insertFeature(value.toUpperCase(), feature);
|
|
24339
|
+
}
|
|
24340
|
+
}
|
|
24341
|
+
}
|
|
24342
|
+
}
|
|
24343
|
+
}
|
|
24344
|
+
}
|
|
24311
24345
|
}
|
|
24312
24346
|
|
|
24313
24347
|
async function loadCytobands(cytobandUrl, config, genome) {
|
|
@@ -27035,8 +27069,6 @@
|
|
|
27035
27069
|
* THE SOFTWARE.
|
|
27036
27070
|
*/
|
|
27037
27071
|
|
|
27038
|
-
const DEFAULT_COLOR$1 = 'rgb(150,150,150)';
|
|
27039
|
-
|
|
27040
27072
|
const fixColor = (colorString) => {
|
|
27041
27073
|
if (isString$2(colorString)) {
|
|
27042
27074
|
return (colorString.indexOf(",") > 0 && !(colorString.startsWith("rgb(") || colorString.startsWith("rgba("))) ?
|
|
@@ -27055,6 +27087,15 @@
|
|
|
27055
27087
|
*/
|
|
27056
27088
|
class TrackBase {
|
|
27057
27089
|
|
|
27090
|
+
static defaults = {
|
|
27091
|
+
height: 50,
|
|
27092
|
+
color: 'rgb(0, 0, 150)',
|
|
27093
|
+
altColor: 'rgb(0, 0, 150)',
|
|
27094
|
+
autoHeight: false,
|
|
27095
|
+
visibilityWindow: undefined,
|
|
27096
|
+
supportHiDPI: true
|
|
27097
|
+
}
|
|
27098
|
+
|
|
27058
27099
|
constructor(config, browser) {
|
|
27059
27100
|
this.browser = browser;
|
|
27060
27101
|
this.init(config);
|
|
@@ -27068,15 +27109,25 @@
|
|
|
27068
27109
|
*/
|
|
27069
27110
|
init(config) {
|
|
27070
27111
|
|
|
27112
|
+
this.config = config;
|
|
27113
|
+
|
|
27071
27114
|
if (config.displayMode) {
|
|
27072
27115
|
config.displayMode = config.displayMode.toUpperCase();
|
|
27073
27116
|
}
|
|
27074
27117
|
|
|
27075
|
-
|
|
27076
|
-
|
|
27077
|
-
this.
|
|
27078
|
-
|
|
27079
|
-
|
|
27118
|
+
// Set default properties
|
|
27119
|
+
const defaults = Object.assign({}, TrackBase.defaults);
|
|
27120
|
+
if(this.constructor.defaults) {
|
|
27121
|
+
for(let key of Object.keys(this.constructor.defaults)) {
|
|
27122
|
+
defaults[key] = this.constructor.defaults[key];
|
|
27123
|
+
}
|
|
27124
|
+
}
|
|
27125
|
+
for(let key of Object.keys(defaults)) {
|
|
27126
|
+
this[key] = config.hasOwnProperty(key) ? config[key] : defaults[key];
|
|
27127
|
+
if(key === 'color' || key === 'altColor') {
|
|
27128
|
+
this[key] = fixColor(this[key]);
|
|
27129
|
+
}
|
|
27130
|
+
}
|
|
27080
27131
|
|
|
27081
27132
|
if (config.name || config.label) {
|
|
27082
27133
|
this.name = config.name || config.label;
|
|
@@ -27086,29 +27137,15 @@
|
|
|
27086
27137
|
this.name = getFilename$2(config.url);
|
|
27087
27138
|
}
|
|
27088
27139
|
|
|
27140
|
+
this.url = config.url;
|
|
27141
|
+
if(this.config.type) this.type = this.config.type;
|
|
27089
27142
|
this.id = this.config.id === undefined ? this.name : this.config.id;
|
|
27090
|
-
|
|
27091
27143
|
this.order = config.order;
|
|
27092
|
-
|
|
27093
|
-
if (config.color) this.color = fixColor(config.color);
|
|
27094
|
-
if (config.altColor) this.altColor = fixColor(config.altColor);
|
|
27095
|
-
if ("civic-ws" === config.sourceType) { // Ugly proxy for specialized track type
|
|
27096
|
-
this.defaultColor = "rgb(155,20,20)";
|
|
27097
|
-
} else {
|
|
27098
|
-
this.defaultColor = "rgb(0,0,150)";
|
|
27099
|
-
}
|
|
27100
|
-
|
|
27101
27144
|
this.autoscaleGroup = config.autoscaleGroup;
|
|
27102
|
-
|
|
27103
27145
|
this.removable = config.removable === undefined ? true : config.removable; // Defaults to true
|
|
27104
|
-
|
|
27105
|
-
this.height = config.height || 100;
|
|
27106
|
-
this.autoHeight = config.autoHeight;
|
|
27107
27146
|
this.minHeight = config.minHeight || Math.min(25, this.height);
|
|
27108
27147
|
this.maxHeight = config.maxHeight || Math.max(1000, this.height);
|
|
27109
27148
|
|
|
27110
|
-
this.visibilityWindow = config.visibilityWindow;
|
|
27111
|
-
|
|
27112
27149
|
if (config.onclick) {
|
|
27113
27150
|
this.onclick = config.onclick;
|
|
27114
27151
|
config.onclick = undefined; // functions cannot be saved in sessions, clear it here.
|
|
@@ -27165,17 +27202,18 @@
|
|
|
27165
27202
|
}
|
|
27166
27203
|
|
|
27167
27204
|
/**
|
|
27168
|
-
*
|
|
27169
|
-
*
|
|
27170
|
-
* current state. Only simple properties (string, number, boolean) are updated.
|
|
27205
|
+
* Used to create session object for bookmarking, sharing. Only simple property values (string, number, boolean)
|
|
27206
|
+
* are saved.
|
|
27171
27207
|
*/
|
|
27172
27208
|
getState() {
|
|
27173
27209
|
|
|
27210
|
+
const jsonable = (v) => !(v === undefined || typeof v === 'function' || v instanceof File || v instanceof Promise);
|
|
27211
|
+
|
|
27174
27212
|
// Create copy of config, minus transient properties (convention is name starts with '_'). Also, all
|
|
27175
27213
|
// function properties are transient as they cannot be saved in json
|
|
27176
27214
|
const state = {};
|
|
27177
27215
|
for (let key of Object.keys(this.config)) {
|
|
27178
|
-
if (!key.startsWith("_") &&
|
|
27216
|
+
if (!key.startsWith("_") && jsonable(this.config[key])) {
|
|
27179
27217
|
state[key] = this.config[key];
|
|
27180
27218
|
}
|
|
27181
27219
|
}
|
|
@@ -27189,8 +27227,18 @@
|
|
|
27189
27227
|
}
|
|
27190
27228
|
}
|
|
27191
27229
|
|
|
27192
|
-
|
|
27193
|
-
|
|
27230
|
+
// If user has changed other properties from defaults update state.
|
|
27231
|
+
const defs = TrackBase.defaults;
|
|
27232
|
+
if (this.constructor.defaults) {
|
|
27233
|
+
for (let key of Object.keys(this.constructor.defaults)) {
|
|
27234
|
+
defs[key] = this.constructor.defaults[key];
|
|
27235
|
+
}
|
|
27236
|
+
}
|
|
27237
|
+
for (let key of Object.keys(defs)) {
|
|
27238
|
+
if (undefined !== this[key] && defs[key] !== this[key]) {
|
|
27239
|
+
state[key] = this[key];
|
|
27240
|
+
}
|
|
27241
|
+
}
|
|
27194
27242
|
|
|
27195
27243
|
// Flatten dataRange if present
|
|
27196
27244
|
if (!this.autoscale && this.dataRange) {
|
|
@@ -27198,22 +27246,6 @@
|
|
|
27198
27246
|
state.max = this.dataRange.max;
|
|
27199
27247
|
}
|
|
27200
27248
|
|
|
27201
|
-
|
|
27202
|
-
// Check for non-json-if-yable properties. Perhaps we should test what can be saved.
|
|
27203
|
-
for (let key of Object.keys(state)) {
|
|
27204
|
-
const value = state[key];
|
|
27205
|
-
if (typeof value === 'function') {
|
|
27206
|
-
throw Error(`Property '${key}' of track '${this.name} is a function. Functions cannot be saved in sessions.`)
|
|
27207
|
-
}
|
|
27208
|
-
if (value instanceof File) { // Test specifically for File. Other types of File-like objects might be savable
|
|
27209
|
-
const str = `Track ${this.name} is a local file. Sessions cannot be saved with local file references.`;
|
|
27210
|
-
throw Error(str)
|
|
27211
|
-
}
|
|
27212
|
-
if (value instanceof Promise) {
|
|
27213
|
-
throw Error(`Property '${key}' of track '${this.name} is a Promise. Promises cannot be saved in sessions.`)
|
|
27214
|
-
}
|
|
27215
|
-
}
|
|
27216
|
-
|
|
27217
27249
|
return state
|
|
27218
27250
|
}
|
|
27219
27251
|
|
|
@@ -27509,7 +27541,7 @@
|
|
|
27509
27541
|
* @returns {*|string|string}
|
|
27510
27542
|
*/
|
|
27511
27543
|
getColorForFeature(f) {
|
|
27512
|
-
|
|
27544
|
+
return (typeof this.color === "function") ? this.color(feature) : this.color
|
|
27513
27545
|
}
|
|
27514
27546
|
|
|
27515
27547
|
/**
|
|
@@ -31913,6 +31945,7 @@
|
|
|
31913
31945
|
|
|
31914
31946
|
const queryableFormats = new Set(["bigwig", "bw", "bigbed", "bb", "biginteract", "biggenepred", "bignarrowpeak", "tdf"]);
|
|
31915
31947
|
|
|
31948
|
+
this.queryable = config.queryable === true; // False by default, unless explicitly set
|
|
31916
31949
|
if (config.reader) {
|
|
31917
31950
|
// Explicit reader implementation
|
|
31918
31951
|
this.reader = config.reader;
|
|
@@ -31946,6 +31979,11 @@
|
|
|
31946
31979
|
this.queryable = true;
|
|
31947
31980
|
} else ;
|
|
31948
31981
|
}
|
|
31982
|
+
|
|
31983
|
+
// Set searchable unless explicitly turned off, or track uses in indexed or otherwise queryable
|
|
31984
|
+
// feature source. queryable => features loaded on demand (by query)
|
|
31985
|
+
this.searchable = config.searchable === true || config.searchableFields || (config.searchable !== false && !this.queryable);
|
|
31986
|
+
|
|
31949
31987
|
}
|
|
31950
31988
|
|
|
31951
31989
|
async defaultVisibilityWindow() {
|
|
@@ -32086,39 +32124,13 @@
|
|
|
32086
32124
|
this.featureCache = new FeatureCache$1(features, this.genome, genomicInterval);
|
|
32087
32125
|
|
|
32088
32126
|
// If track is marked "searchable"< cache features by name -- use this with caution, memory intensive
|
|
32089
|
-
if (this.
|
|
32090
|
-
this.addFeaturesToDB(features);
|
|
32127
|
+
if (this.searchable) {
|
|
32128
|
+
this.genome.addFeaturesToDB(features, this.config);
|
|
32091
32129
|
}
|
|
32092
32130
|
} else {
|
|
32093
32131
|
this.featureCache = new FeatureCache$1([], genomicInterval); // Empty cache
|
|
32094
32132
|
}
|
|
32095
32133
|
}
|
|
32096
|
-
|
|
32097
|
-
addFeaturesToDB(featureList) {
|
|
32098
|
-
for (let feature of featureList) {
|
|
32099
|
-
if (feature.name) {
|
|
32100
|
-
this.genome.featureDB[feature.name.toUpperCase()] = feature;
|
|
32101
|
-
}
|
|
32102
|
-
if (feature.gene && feature.gene.name) {
|
|
32103
|
-
this.genome.featureDB[feature.gene.name.toUpperCase()] = feature;
|
|
32104
|
-
}
|
|
32105
|
-
|
|
32106
|
-
if (this.config.searchableFields) {
|
|
32107
|
-
for (let f of this.config.searchableFields) {
|
|
32108
|
-
const value = feature.getAttributeValue(f);
|
|
32109
|
-
if (value) {
|
|
32110
|
-
if (value.indexOf(" ") > 0) {
|
|
32111
|
-
this.genome.featureDB[value.replaceAll(" ", "+").toUpperCase()] = feature;
|
|
32112
|
-
this.genome.featureDB[value.replaceAll(" ", "%20").toUpperCase()] = feature;
|
|
32113
|
-
} else {
|
|
32114
|
-
this.genome.featureDB[value.toUpperCase()] = feature;
|
|
32115
|
-
}
|
|
32116
|
-
}
|
|
32117
|
-
}
|
|
32118
|
-
}
|
|
32119
|
-
}
|
|
32120
|
-
}
|
|
32121
|
-
|
|
32122
32134
|
}
|
|
32123
32135
|
|
|
32124
32136
|
/*
|
|
@@ -32934,7 +32946,8 @@
|
|
|
32934
32946
|
|
|
32935
32947
|
const binaryParser = new BinaryParser(data);
|
|
32936
32948
|
const chromId = binaryParser.getInt();
|
|
32937
|
-
|
|
32949
|
+
const blockStart = binaryParser.getInt();
|
|
32950
|
+
let chromStart = blockStart;
|
|
32938
32951
|
let chromEnd = binaryParser.getInt();
|
|
32939
32952
|
const itemStep = binaryParser.getInt();
|
|
32940
32953
|
const itemSpan = binaryParser.getInt();
|
|
@@ -32944,6 +32957,7 @@
|
|
|
32944
32957
|
|
|
32945
32958
|
if (chromId >= chrIdx1 && chromId <= chrIdx2) {
|
|
32946
32959
|
|
|
32960
|
+
let idx = 0;
|
|
32947
32961
|
while (itemCount-- > 0) {
|
|
32948
32962
|
let value;
|
|
32949
32963
|
switch (type) {
|
|
@@ -32959,8 +32973,9 @@
|
|
|
32959
32973
|
break
|
|
32960
32974
|
case 3: // Fixed step
|
|
32961
32975
|
value = binaryParser.getFloat();
|
|
32976
|
+
chromStart = blockStart + idx * itemStep;
|
|
32962
32977
|
chromEnd = chromStart + itemSpan;
|
|
32963
|
-
|
|
32978
|
+
idx++;
|
|
32964
32979
|
break
|
|
32965
32980
|
}
|
|
32966
32981
|
|
|
@@ -32970,8 +32985,8 @@
|
|
|
32970
32985
|
if (Number.isFinite(value)) {
|
|
32971
32986
|
const chr = chrDict[chromId];
|
|
32972
32987
|
featureArray.push({chr: chr, start: chromStart, end: chromEnd, value: value});
|
|
32973
|
-
|
|
32974
32988
|
}
|
|
32989
|
+
|
|
32975
32990
|
}
|
|
32976
32991
|
}
|
|
32977
32992
|
}
|
|
@@ -33107,6 +33122,7 @@
|
|
|
33107
33122
|
this.genome = genome;
|
|
33108
33123
|
this.format = config.format || "bigwig";
|
|
33109
33124
|
this.wgValues = {};
|
|
33125
|
+
this.queryable = true;
|
|
33110
33126
|
}
|
|
33111
33127
|
|
|
33112
33128
|
async getFeatures({chr, start, end, bpPerPixel, windowFunction}) {
|
|
@@ -33648,6 +33664,7 @@
|
|
|
33648
33664
|
this.genome = genome;
|
|
33649
33665
|
this.windowFunction = config.windowFunction || "mean";
|
|
33650
33666
|
this.reader = new TDFReader(config, genome);
|
|
33667
|
+
this.queryable = true;
|
|
33651
33668
|
}
|
|
33652
33669
|
|
|
33653
33670
|
async getFeatures({chr, start, end, bpPerPixel}) {
|
|
@@ -33857,8 +33874,8 @@
|
|
|
33857
33874
|
this.config = config;
|
|
33858
33875
|
this.genome = genome;
|
|
33859
33876
|
this.queryable = false;
|
|
33877
|
+
this.searchable = config.searchable !== false; // searchable by default
|
|
33860
33878
|
this.updateFeatures(config.features);
|
|
33861
|
-
|
|
33862
33879
|
}
|
|
33863
33880
|
|
|
33864
33881
|
updateFeatures(features) {
|
|
@@ -33868,6 +33885,10 @@
|
|
|
33868
33885
|
mapProperties(features, this.config.mappings);
|
|
33869
33886
|
}
|
|
33870
33887
|
this.featureCache = new FeatureCache$1(features, this.genome);
|
|
33888
|
+
|
|
33889
|
+
if (this.searchable || this.config.searchableFields) {
|
|
33890
|
+
this.genome.addFeaturesToDB(features, this.config);
|
|
33891
|
+
}
|
|
33871
33892
|
}
|
|
33872
33893
|
|
|
33873
33894
|
/**
|
|
@@ -40061,8 +40082,8 @@
|
|
|
40061
40082
|
|
|
40062
40083
|
// Set ctx color to a known valid color. If getColorForFeature returns an invalid color string it is ignored, and
|
|
40063
40084
|
// this default will be used.
|
|
40064
|
-
ctx.fillStyle = this.
|
|
40065
|
-
ctx.strokeStyle = this.
|
|
40085
|
+
ctx.fillStyle = this.color;
|
|
40086
|
+
ctx.strokeStyle = this.color;
|
|
40066
40087
|
|
|
40067
40088
|
const color = this.getColorForFeature(feature);
|
|
40068
40089
|
ctx.fillStyle = color;
|
|
@@ -40386,6 +40407,17 @@
|
|
|
40386
40407
|
|
|
40387
40408
|
class FeatureTrack extends TrackBase {
|
|
40388
40409
|
|
|
40410
|
+
static defaults = {
|
|
40411
|
+
type: "annotation",
|
|
40412
|
+
maxRows: 1000, // protects against pathological feature packing cases (# of rows of overlapping feaures)
|
|
40413
|
+
displayMode: "EXPANDED", // COLLAPSED | EXPANDED | SQUISHED
|
|
40414
|
+
margin: 10,
|
|
40415
|
+
featureHeight: 14,
|
|
40416
|
+
autoHeight: false,
|
|
40417
|
+
useScore: false
|
|
40418
|
+
}
|
|
40419
|
+
|
|
40420
|
+
|
|
40389
40421
|
constructor(config, browser) {
|
|
40390
40422
|
super(config, browser);
|
|
40391
40423
|
}
|
|
@@ -40393,12 +40425,8 @@
|
|
|
40393
40425
|
init(config) {
|
|
40394
40426
|
super.init(config);
|
|
40395
40427
|
|
|
40396
|
-
this.type = config.type || "annotation";
|
|
40397
40428
|
|
|
40398
|
-
//
|
|
40399
|
-
this.maxRows = config.maxRows === undefined ? 1000 : config.maxRows;
|
|
40400
|
-
|
|
40401
|
-
this.displayMode = config.displayMode || "EXPANDED"; // COLLAPSED | EXPANDED | SQUISHED
|
|
40429
|
+
// Obscure option, not common or supoorted, included for backward compatibility
|
|
40402
40430
|
this.labelDisplayMode = config.labelDisplayMode;
|
|
40403
40431
|
|
|
40404
40432
|
if (config._featureSource) {
|
|
@@ -40410,12 +40438,6 @@
|
|
|
40410
40438
|
FeatureSource(config, this.browser.genome);
|
|
40411
40439
|
}
|
|
40412
40440
|
|
|
40413
|
-
// Set default heights
|
|
40414
|
-
this.autoHeight = config.autoHeight;
|
|
40415
|
-
this.margin = config.margin === undefined ? 10 : config.margin;
|
|
40416
|
-
|
|
40417
|
-
this.featureHeight = config.featureHeight || 14;
|
|
40418
|
-
|
|
40419
40441
|
if ("FusionJuncSpan" === config.type) {
|
|
40420
40442
|
this.render = config.render || renderFusionJuncSpan;
|
|
40421
40443
|
this.squishedRowHeight = config.squishedRowHeight || 50;
|
|
@@ -40452,9 +40474,6 @@
|
|
|
40452
40474
|
}
|
|
40453
40475
|
}
|
|
40454
40476
|
}
|
|
40455
|
-
|
|
40456
|
-
//UCSC useScore option
|
|
40457
|
-
this.useScore = config.useScore;
|
|
40458
40477
|
}
|
|
40459
40478
|
|
|
40460
40479
|
async postInit() {
|
|
@@ -40818,7 +40837,7 @@
|
|
|
40818
40837
|
} else if (feature.color) {
|
|
40819
40838
|
color = feature.color; // Explicit color for feature
|
|
40820
40839
|
} else {
|
|
40821
|
-
color = this.
|
|
40840
|
+
color = this.color; // Track default
|
|
40822
40841
|
}
|
|
40823
40842
|
|
|
40824
40843
|
if (feature.alpha && feature.alpha !== 1) {
|
|
@@ -40884,38 +40903,40 @@
|
|
|
40884
40903
|
|
|
40885
40904
|
this.browser = config.browser;
|
|
40886
40905
|
|
|
40887
|
-
this.
|
|
40888
|
-
if(config.width) {
|
|
40889
|
-
this.container.style.width = config.width;
|
|
40906
|
+
this.columnFormat = config.columnFormat;
|
|
40890
40907
|
|
|
40891
|
-
|
|
40908
|
+
this.tableRowSelectionList = [];
|
|
40909
|
+
|
|
40910
|
+
this.tableDOM = domUtils.div({ class: 'igv-roi-table' });
|
|
40911
|
+
// if(config.width) {
|
|
40912
|
+
// let [ w ] = config.width.split('px')
|
|
40913
|
+
// w = parseInt(w, 10)
|
|
40914
|
+
// this.tableDOM.style.width = `${Math.min(w, 1600)}px`
|
|
40915
|
+
//
|
|
40916
|
+
// }
|
|
40892
40917
|
|
|
40893
|
-
config.parent.appendChild(this.
|
|
40918
|
+
config.parent.appendChild(this.tableDOM);
|
|
40894
40919
|
|
|
40895
40920
|
this.headerDOM = config;
|
|
40896
40921
|
|
|
40897
|
-
this.
|
|
40922
|
+
this.tableColumnTitles = this.tableDOM;
|
|
40898
40923
|
|
|
40899
|
-
this.
|
|
40924
|
+
this.tableRowContainer = this.tableDOM;
|
|
40900
40925
|
|
|
40901
40926
|
this.footerDOM = config.gotoButtonHandler;
|
|
40902
40927
|
|
|
40903
|
-
this.columnFormat = config.columnFormat;
|
|
40904
|
-
|
|
40905
|
-
this.tableRowSelectionList = [];
|
|
40906
|
-
|
|
40907
40928
|
}
|
|
40908
40929
|
|
|
40909
40930
|
set headerDOM({ browser, parent, headerTitle, dismissHandler }) {
|
|
40910
40931
|
|
|
40911
40932
|
// header
|
|
40912
40933
|
const dom = domUtils.div();
|
|
40913
|
-
this.
|
|
40934
|
+
this.tableDOM.appendChild(dom);
|
|
40914
40935
|
|
|
40915
40936
|
// header title
|
|
40916
40937
|
const div = domUtils.div();
|
|
40917
40938
|
dom.appendChild(div);
|
|
40918
|
-
div.
|
|
40939
|
+
div.innerHTML = headerTitle;
|
|
40919
40940
|
|
|
40920
40941
|
// table dismiss button
|
|
40921
40942
|
const dismiss = domUtils.div();
|
|
@@ -40934,46 +40955,51 @@
|
|
|
40934
40955
|
const { y:y_root } = browser.root.getBoundingClientRect();
|
|
40935
40956
|
const { y:y_parent } = parent.getBoundingClientRect();
|
|
40936
40957
|
const constraint = -(y_parent - y_root);
|
|
40937
|
-
makeDraggable(this.
|
|
40958
|
+
makeDraggable(this.tableDOM, dom, { minX:0, minY:constraint });
|
|
40938
40959
|
|
|
40939
|
-
this.
|
|
40960
|
+
this.tableDOM.style.display = 'none';
|
|
40940
40961
|
|
|
40941
40962
|
this._headerDOM = dom;
|
|
40942
40963
|
|
|
40943
40964
|
}
|
|
40944
40965
|
|
|
40945
|
-
set
|
|
40966
|
+
set tableColumnTitles(tableDOM) {
|
|
40946
40967
|
|
|
40947
|
-
const
|
|
40948
|
-
|
|
40968
|
+
const tblColumnTitles = domUtils.div({ class: 'igv-roi-table-column-titles' });
|
|
40969
|
+
tableDOM.appendChild(tblColumnTitles);
|
|
40949
40970
|
|
|
40950
|
-
for (const { label, width } of columnFormat) {
|
|
40971
|
+
for (const { label, width } of this.columnFormat) {
|
|
40951
40972
|
const col = domUtils.div();
|
|
40952
|
-
|
|
40973
|
+
tblColumnTitles.appendChild(col);
|
|
40953
40974
|
col.style.width = width;
|
|
40954
40975
|
col.innerText = label;
|
|
40955
40976
|
}
|
|
40956
40977
|
|
|
40978
|
+
this._tableColumnTitlesDOM = tblColumnTitles;
|
|
40979
|
+
|
|
40957
40980
|
}
|
|
40958
40981
|
|
|
40959
|
-
|
|
40982
|
+
get tableColumnTitles() {
|
|
40983
|
+
return this._tableColumnTitlesDOM
|
|
40984
|
+
}
|
|
40985
|
+
|
|
40986
|
+
set tableRowContainer(container) {
|
|
40960
40987
|
|
|
40961
|
-
const
|
|
40962
|
-
container.appendChild(
|
|
40988
|
+
const tblRowContainer = domUtils.div({ class: 'igv-roi-table-row-container' });
|
|
40989
|
+
container.appendChild(tblRowContainer);
|
|
40963
40990
|
|
|
40964
|
-
|
|
40991
|
+
this._tableRowContainerDOM = tblRowContainer;
|
|
40965
40992
|
|
|
40966
|
-
this._rowContainerDOM = dom;
|
|
40967
40993
|
}
|
|
40968
40994
|
|
|
40969
|
-
get
|
|
40970
|
-
return this.
|
|
40995
|
+
get tableRowContainer() {
|
|
40996
|
+
return this._tableRowContainerDOM
|
|
40971
40997
|
}
|
|
40972
40998
|
|
|
40973
40999
|
set footerDOM(gotoButtonHandler) {
|
|
40974
41000
|
|
|
40975
41001
|
const dom = domUtils.div();
|
|
40976
|
-
this.
|
|
41002
|
+
this.tableDOM.appendChild(dom);
|
|
40977
41003
|
|
|
40978
41004
|
// Go To Button
|
|
40979
41005
|
const gotoButton = domUtils.div({class: 'igv-roi-table-button'});
|
|
@@ -41015,7 +41041,7 @@
|
|
|
41015
41041
|
}
|
|
41016
41042
|
|
|
41017
41043
|
clearTable() {
|
|
41018
|
-
const elements = this.
|
|
41044
|
+
const elements = this.tableRowContainer.querySelectorAll('.igv-roi-table-row');
|
|
41019
41045
|
for (let el of elements) {
|
|
41020
41046
|
el.remove();
|
|
41021
41047
|
}
|
|
@@ -41027,23 +41053,23 @@
|
|
|
41027
41053
|
}
|
|
41028
41054
|
|
|
41029
41055
|
present() {
|
|
41030
|
-
this.
|
|
41056
|
+
this.tableDOM.style.left = `${ 0 }px`;
|
|
41031
41057
|
|
|
41032
41058
|
const { y:y_root } = this.browser.root.getBoundingClientRect();
|
|
41033
41059
|
const { y:y_parent } = this.config.parent.getBoundingClientRect();
|
|
41034
41060
|
|
|
41035
|
-
this.
|
|
41036
|
-
this.
|
|
41061
|
+
this.tableDOM.style.top = `${ y_root - y_parent }px`;
|
|
41062
|
+
this.tableDOM.style.display = 'flex';
|
|
41037
41063
|
}
|
|
41038
41064
|
|
|
41039
41065
|
dismiss() {
|
|
41040
|
-
this.
|
|
41066
|
+
this.tableDOM.style.display = 'none';
|
|
41041
41067
|
}
|
|
41042
41068
|
|
|
41043
41069
|
dispose() {
|
|
41044
41070
|
|
|
41045
|
-
this.
|
|
41046
|
-
this.
|
|
41071
|
+
this.tableDOM.innerHTML = '';
|
|
41072
|
+
this.tableDOM.remove();
|
|
41047
41073
|
|
|
41048
41074
|
for (const key of Object.keys(this)) {
|
|
41049
41075
|
this[key] = undefined;
|
|
@@ -41059,45 +41085,35 @@
|
|
|
41059
41085
|
|
|
41060
41086
|
constructor(config) {
|
|
41061
41087
|
|
|
41062
|
-
const cooked = Object.assign({ 'width':'
|
|
41088
|
+
const cooked = Object.assign({ 'width':'1024px' }, config);
|
|
41063
41089
|
super(cooked);
|
|
41064
41090
|
|
|
41065
41091
|
this.descriptionDOM = config;
|
|
41066
41092
|
|
|
41067
41093
|
}
|
|
41068
41094
|
|
|
41069
|
-
|
|
41070
|
-
set columnTitleDOM(columnFormat) {
|
|
41071
|
-
|
|
41072
|
-
const dom = domUtils.div({ class: 'igv-roi-table-column-titles' });
|
|
41073
|
-
this.columnTitlesDiv = dom;
|
|
41074
|
-
this.container.appendChild(dom);
|
|
41075
|
-
|
|
41076
|
-
for (const format of columnFormat) {
|
|
41077
|
-
const col = domUtils.div();
|
|
41078
|
-
dom.appendChild(col);
|
|
41079
|
-
col.style.width = format.width || 'fit-content';
|
|
41080
|
-
col.innerText = format.label;
|
|
41081
|
-
}
|
|
41082
|
-
|
|
41083
|
-
}
|
|
41084
|
-
|
|
41085
41095
|
set descriptionDOM(config) {
|
|
41086
41096
|
|
|
41087
41097
|
if (config.description) {
|
|
41088
41098
|
|
|
41089
41099
|
let dom;
|
|
41090
41100
|
|
|
41101
|
+
// BLAT result for query sequence
|
|
41091
41102
|
dom = domUtils.div({ class: 'igv-roi-table-description' });
|
|
41092
|
-
this.
|
|
41103
|
+
this.tableDOM.insertBefore(dom, this.tableColumnTitles);
|
|
41104
|
+
dom.style.height = 'auto';
|
|
41093
41105
|
dom.innerHTML = `BLAT result for query sequence:`;
|
|
41094
41106
|
|
|
41107
|
+
// CTAATCAtctacactggtttctactg ...
|
|
41095
41108
|
dom = domUtils.div({ class: 'igv-roi-table-description' });
|
|
41096
|
-
this.
|
|
41109
|
+
this.tableDOM.insertBefore(dom, this.tableColumnTitles);
|
|
41110
|
+
dom.style.height = 'auto';
|
|
41111
|
+
dom.style.maxHeight = '128px';
|
|
41097
41112
|
dom.innerHTML = config.description;
|
|
41098
41113
|
|
|
41114
|
+
// Select one or more rows ...
|
|
41099
41115
|
dom = domUtils.div({ class: 'igv-roi-table-goto-explainer' });
|
|
41100
|
-
this.
|
|
41116
|
+
this.tableDOM.insertBefore(dom, this.tableColumnTitles);
|
|
41101
41117
|
dom.innerHTML = `Select one or more rows and click Go To to view the regions`;
|
|
41102
41118
|
|
|
41103
41119
|
}
|
|
@@ -41127,13 +41143,13 @@
|
|
|
41127
41143
|
|
|
41128
41144
|
renderTable(records) {
|
|
41129
41145
|
|
|
41130
|
-
Array.from(this.
|
|
41146
|
+
Array.from(this.tableRowContainer.querySelectorAll('.igv-roi-table-row')).forEach(el => el.remove());
|
|
41131
41147
|
|
|
41132
41148
|
if (records.length > 0) {
|
|
41133
41149
|
|
|
41134
41150
|
for (let record of records) {
|
|
41135
41151
|
const row = this.tableRowDOM(record);
|
|
41136
|
-
this.
|
|
41152
|
+
this.tableRowContainer.appendChild(row);
|
|
41137
41153
|
}
|
|
41138
41154
|
|
|
41139
41155
|
}
|
|
@@ -41181,7 +41197,7 @@
|
|
|
41181
41197
|
|
|
41182
41198
|
event.stopPropagation();
|
|
41183
41199
|
|
|
41184
|
-
const selectedRows = this.
|
|
41200
|
+
const selectedRows = this.tableDOM.querySelectorAll('.igv-roi-table-row-selected');
|
|
41185
41201
|
|
|
41186
41202
|
const loci = [];
|
|
41187
41203
|
for (const row of selectedRows) {
|
|
@@ -41193,7 +41209,7 @@
|
|
|
41193
41209
|
loci.push(`${ chr }:${ start }-${ end }`);
|
|
41194
41210
|
}
|
|
41195
41211
|
|
|
41196
|
-
for (const el of this.
|
|
41212
|
+
for (const el of this.tableDOM.querySelectorAll('.igv-roi-table-row')) {
|
|
41197
41213
|
el.classList.remove('igv-roi-table-row-selected');
|
|
41198
41214
|
}
|
|
41199
41215
|
|
|
@@ -41388,8 +41404,6 @@
|
|
|
41388
41404
|
|
|
41389
41405
|
const alignmentStartGap = 5;
|
|
41390
41406
|
const downsampleRowHeight = 5;
|
|
41391
|
-
const DEFAULT_COVERAGE_TRACK_HEIGHT = 50;
|
|
41392
|
-
const DEFAULT_TRACK_HEIGHT$1 = 300;
|
|
41393
41407
|
const DEFAULT_ALIGNMENT_COLOR = "rgb(185, 185, 185)";
|
|
41394
41408
|
const DEFAULT_COVERAGE_COLOR = "rgb(150, 150, 150)";
|
|
41395
41409
|
const DEFAULT_CONNECTOR_COLOR = "rgb(200, 200, 200)";
|
|
@@ -41397,35 +41411,37 @@
|
|
|
41397
41411
|
|
|
41398
41412
|
class BAMTrack extends TrackBase {
|
|
41399
41413
|
|
|
41414
|
+
static defaults = {
|
|
41415
|
+
alleleFreqThreshold: 0.2,
|
|
41416
|
+
visibilityWindow: 30000,
|
|
41417
|
+
showCoverage: true,
|
|
41418
|
+
showAlignments: true,
|
|
41419
|
+
viewAsPairs: false,
|
|
41420
|
+
pairsSupported: true,
|
|
41421
|
+
showSoftClips: false,
|
|
41422
|
+
showAllBases: false,
|
|
41423
|
+
showInsertions: true,
|
|
41424
|
+
showMismatches: true,
|
|
41425
|
+
color: DEFAULT_ALIGNMENT_COLOR,
|
|
41426
|
+
coverageColor: DEFAULT_COVERAGE_COLOR,
|
|
41427
|
+
height: 300,
|
|
41428
|
+
coverageTrackHeight: 50
|
|
41429
|
+
}
|
|
41430
|
+
|
|
41400
41431
|
constructor(config, browser) {
|
|
41401
41432
|
super(config, browser);
|
|
41402
41433
|
}
|
|
41403
41434
|
|
|
41404
41435
|
init(config) {
|
|
41405
|
-
super.init(config);
|
|
41406
|
-
this.type = "alignment";
|
|
41407
|
-
|
|
41408
|
-
if (config.alleleFreqThreshold === undefined) {
|
|
41409
|
-
config.alleleFreqThreshold = 0.2;
|
|
41410
|
-
}
|
|
41411
41436
|
|
|
41437
|
+
this.type = "alignment";
|
|
41412
41438
|
this.featureSource = new BamSource(config, this.browser);
|
|
41413
|
-
|
|
41414
|
-
this.showCoverage = config.showCoverage === undefined ? true : config.showCoverage;
|
|
41415
|
-
this.showAlignments = config.showAlignments === undefined ? true : config.showAlignments;
|
|
41416
|
-
|
|
41417
41439
|
this.coverageTrack = new CoverageTrack(config, this);
|
|
41418
41440
|
this.alignmentTrack = new AlignmentTrack(config, this);
|
|
41441
|
+
|
|
41442
|
+
super.init(config);
|
|
41443
|
+
|
|
41419
41444
|
this.alignmentTrack.setTop(this.coverageTrack, this.showCoverage);
|
|
41420
|
-
this.visibilityWindow = config.visibilityWindow || 30000;
|
|
41421
|
-
this.viewAsPairs = config.viewAsPairs;
|
|
41422
|
-
this.pairsSupported = config.pairsSupported !== false;
|
|
41423
|
-
this.showSoftClips = config.showSoftClips;
|
|
41424
|
-
this.showAllBases = config.showAllBases;
|
|
41425
|
-
this.showInsertions = false !== config.showInsertions;
|
|
41426
|
-
this.showMismatches = false !== config.showMismatches;
|
|
41427
|
-
this.color = config.color;
|
|
41428
|
-
this.coverageColor = config.coverageColor;
|
|
41429
41445
|
|
|
41430
41446
|
// The sort object can be an array in the case of multi-locus view, however if multiple sort positions
|
|
41431
41447
|
// are present for a given reference frame the last one will take precedence
|
|
@@ -41438,14 +41454,12 @@
|
|
|
41438
41454
|
}
|
|
41439
41455
|
}
|
|
41440
41456
|
|
|
41441
|
-
// Invoke height setter last to allocated to coverage and alignment tracks
|
|
41442
|
-
this.height = (config.height !== undefined ? config.height : DEFAULT_TRACK_HEIGHT$1);
|
|
41443
41457
|
}
|
|
41444
41458
|
|
|
41445
41459
|
set height(h) {
|
|
41446
41460
|
this._height = h;
|
|
41447
|
-
if (this.
|
|
41448
|
-
this.alignmentTrack.height = this.showCoverage ? h - this.
|
|
41461
|
+
if (this.showAlignments) {
|
|
41462
|
+
this.alignmentTrack.height = this.showCoverage ? h - this.coverageTrackHeight : h;
|
|
41449
41463
|
}
|
|
41450
41464
|
}
|
|
41451
41465
|
|
|
@@ -41532,16 +41546,15 @@
|
|
|
41532
41546
|
* @returns {number}
|
|
41533
41547
|
*/
|
|
41534
41548
|
computePixelHeight(alignmentContainer) {
|
|
41535
|
-
return (this.showCoverage ? this.
|
|
41536
|
-
(this.showAlignments ? this.alignmentTrack.computePixelHeight(alignmentContainer) : 0)
|
|
41537
|
-
15
|
|
41549
|
+
return (this.showCoverage ? this.coverageTrackHeight : 0) +
|
|
41550
|
+
(this.showAlignments ? this.alignmentTrack.computePixelHeight(alignmentContainer) : 0)
|
|
41538
41551
|
}
|
|
41539
41552
|
|
|
41540
41553
|
draw(options) {
|
|
41541
41554
|
|
|
41542
41555
|
IGVGraphics.fillRect(options.context, 0, options.pixelTop, options.pixelWidth, options.pixelHeight, {'fillStyle': "rgb(255, 255, 255)"});
|
|
41543
41556
|
|
|
41544
|
-
if (true === this.showCoverage && this.
|
|
41557
|
+
if (true === this.showCoverage && this.coverageTrackHeight > 0) {
|
|
41545
41558
|
this.trackView.axisCanvas.style.display = 'block';
|
|
41546
41559
|
this.coverageTrack.draw(options);
|
|
41547
41560
|
} else {
|
|
@@ -41556,12 +41569,12 @@
|
|
|
41556
41569
|
|
|
41557
41570
|
paintAxis(ctx, pixelWidth, pixelHeight) {
|
|
41558
41571
|
|
|
41559
|
-
this.coverageTrack.paintAxis(ctx, pixelWidth, this.
|
|
41572
|
+
this.coverageTrack.paintAxis(ctx, pixelWidth, this.coverageTrackHeight);
|
|
41560
41573
|
|
|
41561
41574
|
// if (this.browser.isMultiLocusMode()) {
|
|
41562
41575
|
// ctx.clearRect(0, 0, pixelWidth, pixelHeight);
|
|
41563
41576
|
// } else {
|
|
41564
|
-
// this.coverageTrack.paintAxis(ctx, pixelWidth, this.
|
|
41577
|
+
// this.coverageTrack.paintAxis(ctx, pixelWidth, this.coverageTrackHeight);
|
|
41565
41578
|
// }
|
|
41566
41579
|
}
|
|
41567
41580
|
|
|
@@ -41570,7 +41583,7 @@
|
|
|
41570
41583
|
}
|
|
41571
41584
|
|
|
41572
41585
|
popupData(clickState) {
|
|
41573
|
-
if (true === this.showCoverage && clickState.y >= this.coverageTrack.top && clickState.y < this.
|
|
41586
|
+
if (true === this.showCoverage && clickState.y >= this.coverageTrack.top && clickState.y < this.coverageTrackHeight) {
|
|
41574
41587
|
return this.coverageTrack.popupData(clickState)
|
|
41575
41588
|
} else {
|
|
41576
41589
|
return this.alignmentTrack.popupData(clickState)
|
|
@@ -41585,7 +41598,7 @@
|
|
|
41585
41598
|
clickedFeatures(clickState) {
|
|
41586
41599
|
|
|
41587
41600
|
let clickedObject;
|
|
41588
|
-
if (true === this.showCoverage && clickState.y >= this.coverageTrack.top && clickState.y < this.
|
|
41601
|
+
if (true === this.showCoverage && clickState.y >= this.coverageTrack.top && clickState.y < this.coverageTrackHeight) {
|
|
41589
41602
|
clickedObject = this.coverageTrack.getClickedObject(clickState);
|
|
41590
41603
|
} else {
|
|
41591
41604
|
clickedObject = this.alignmentTrack.getClickedObject(clickState);
|
|
@@ -41594,7 +41607,7 @@
|
|
|
41594
41607
|
}
|
|
41595
41608
|
|
|
41596
41609
|
hoverText(clickState) {
|
|
41597
|
-
if (true === this.showCoverage && clickState.y >= this.coverageTrack.top && clickState.y < this.
|
|
41610
|
+
if (true === this.showCoverage && clickState.y >= this.coverageTrack.top && clickState.y < this.coverageTrackHeight) {
|
|
41598
41611
|
const clickedObject = this.coverageTrack.getClickedObject(clickState);
|
|
41599
41612
|
if (clickedObject) {
|
|
41600
41613
|
return clickedObject.hoverText()
|
|
@@ -41634,8 +41647,8 @@
|
|
|
41634
41647
|
// Show coverage / alignment options
|
|
41635
41648
|
const adjustTrackHeight = () => {
|
|
41636
41649
|
if (!this.autoHeight) {
|
|
41637
|
-
const h =
|
|
41638
|
-
(this.showCoverage ? this.
|
|
41650
|
+
const h =
|
|
41651
|
+
(this.showCoverage ? this.coverageTrackHeight : 0) +
|
|
41639
41652
|
(this.showAlignments ? this.alignmentTrack.height : 0);
|
|
41640
41653
|
this.trackView.setTrackHeight(h);
|
|
41641
41654
|
}
|
|
@@ -41949,7 +41962,6 @@
|
|
|
41949
41962
|
constructor(config, parent) {
|
|
41950
41963
|
this.parent = parent;
|
|
41951
41964
|
this.featureSource = parent.featureSource;
|
|
41952
|
-
this.height = config.coverageTrackHeight !== undefined ? config.coverageTrackHeight : DEFAULT_COVERAGE_TRACK_HEIGHT;
|
|
41953
41965
|
|
|
41954
41966
|
this.paintAxis = paintAxis;
|
|
41955
41967
|
this.top = 0;
|
|
@@ -41964,6 +41976,10 @@
|
|
|
41964
41976
|
|
|
41965
41977
|
}
|
|
41966
41978
|
|
|
41979
|
+
get height() {
|
|
41980
|
+
return this.parent.coverageTrackHeight
|
|
41981
|
+
}
|
|
41982
|
+
|
|
41967
41983
|
draw(options) {
|
|
41968
41984
|
|
|
41969
41985
|
const pixelTop = options.pixelTop;
|
|
@@ -42711,7 +42727,7 @@
|
|
|
42711
42727
|
const seqstring = clickedAlignment.seq;
|
|
42712
42728
|
if (seqstring && "*" != seqstring) {
|
|
42713
42729
|
|
|
42714
|
-
if(seqstring.length < maxSequenceSize) {
|
|
42730
|
+
if (seqstring.length < maxSequenceSize) {
|
|
42715
42731
|
list.push({
|
|
42716
42732
|
label: 'BLAT read sequence',
|
|
42717
42733
|
click: () => {
|
|
@@ -44658,25 +44674,34 @@
|
|
|
44658
44674
|
* THE SOFTWARE.
|
|
44659
44675
|
*/
|
|
44660
44676
|
|
|
44661
|
-
const DEFAULT_COLOR = "rgb(150,150,150)";
|
|
44662
|
-
|
|
44663
44677
|
class WigTrack extends TrackBase {
|
|
44664
44678
|
|
|
44679
|
+
static defaults = {
|
|
44680
|
+
height: 50,
|
|
44681
|
+
color: 'rgb(150, 150, 150)',
|
|
44682
|
+
altColor: 'rgb(150, 150, 150)',
|
|
44683
|
+
flipAxis: false,
|
|
44684
|
+
logScale: false,
|
|
44685
|
+
windowFunction: 'mean',
|
|
44686
|
+
graphType: 'bar',
|
|
44687
|
+
autoscale: true,
|
|
44688
|
+
normalize: undefined,
|
|
44689
|
+
scaleFactor: undefined
|
|
44690
|
+
}
|
|
44691
|
+
|
|
44665
44692
|
constructor(config, browser) {
|
|
44666
44693
|
super(config, browser);
|
|
44667
44694
|
}
|
|
44668
44695
|
|
|
44669
44696
|
init(config) {
|
|
44697
|
+
|
|
44670
44698
|
super.init(config);
|
|
44671
44699
|
|
|
44672
44700
|
this.type = "wig";
|
|
44673
|
-
this.height = config.height || 50;
|
|
44674
44701
|
this.featureType = 'numeric';
|
|
44675
44702
|
this.paintAxis = paintAxis;
|
|
44676
44703
|
|
|
44677
44704
|
const format = config.format ? config.format.toLowerCase() : config.format;
|
|
44678
|
-
this.flipAxis = config.flipAxis ? config.flipAxis : false;
|
|
44679
|
-
this.logScale = config.logScale ? config.logScale : false;
|
|
44680
44705
|
if (config.featureSource) {
|
|
44681
44706
|
this.featureSource = config.featureSource;
|
|
44682
44707
|
delete config.featureSource;
|
|
@@ -44688,18 +44713,16 @@
|
|
|
44688
44713
|
this.featureSource = FeatureSource(config, this.browser.genome);
|
|
44689
44714
|
}
|
|
44690
44715
|
|
|
44691
|
-
|
|
44692
|
-
|
|
44716
|
+
|
|
44717
|
+
// Override autoscale default
|
|
44718
|
+
if(config.max === undefined || config.autoscale === true) {
|
|
44719
|
+
this.autoscale = true;
|
|
44720
|
+
} else {
|
|
44693
44721
|
this.dataRange = {
|
|
44694
44722
|
min: config.min || 0,
|
|
44695
44723
|
max: config.max
|
|
44696
44724
|
};
|
|
44697
44725
|
}
|
|
44698
|
-
|
|
44699
|
-
this.windowFunction = config.windowFunction || "mean";
|
|
44700
|
-
this.graphType = config.graphType || "bar";
|
|
44701
|
-
this.normalize = config.normalize; // boolean, for use with "TDF" files
|
|
44702
|
-
this.scaleFactor = config.scaleFactor; // optional scale factor, ignored if normalize === true;
|
|
44703
44726
|
}
|
|
44704
44727
|
|
|
44705
44728
|
async postInit() {
|
|
@@ -44789,7 +44812,7 @@
|
|
|
44789
44812
|
const pixelWidth = options.pixelWidth;
|
|
44790
44813
|
options.pixelHeight;
|
|
44791
44814
|
const bpEnd = bpStart + pixelWidth * bpPerPixel + 1;
|
|
44792
|
-
const posColor = this.color ||
|
|
44815
|
+
const posColor = this.color || WigTrack.defaults.color;
|
|
44793
44816
|
|
|
44794
44817
|
let baselineColor;
|
|
44795
44818
|
if (typeof posColor === "string" && posColor.startsWith("rgb(")) {
|
|
@@ -44933,7 +44956,7 @@
|
|
|
44933
44956
|
*/
|
|
44934
44957
|
|
|
44935
44958
|
getColorForFeature(f) {
|
|
44936
|
-
let c = (f.value < 0 && this.altColor) ? this.altColor : this.color ||
|
|
44959
|
+
let c = (f.value < 0 && this.altColor) ? this.altColor : this.color || WigTrack.defaults.color;
|
|
44937
44960
|
return (typeof c === "function") ? c(f.value) : c
|
|
44938
44961
|
}
|
|
44939
44962
|
|
|
@@ -44944,20 +44967,6 @@
|
|
|
44944
44967
|
this.trackView = undefined;
|
|
44945
44968
|
}
|
|
44946
44969
|
|
|
44947
|
-
/**
|
|
44948
|
-
* Return the current state of the track. Used to create sessions and bookmarks.
|
|
44949
|
-
*
|
|
44950
|
-
* @returns {*|{}}
|
|
44951
|
-
*/
|
|
44952
|
-
getState() {
|
|
44953
|
-
|
|
44954
|
-
const config = super.getState();
|
|
44955
|
-
|
|
44956
|
-
if (this.flipAxis !== undefined) config.flipAxis = this.flipAxis;
|
|
44957
|
-
if (this.logScale !== undefined) config.logScale = this.logScale;
|
|
44958
|
-
|
|
44959
|
-
return config
|
|
44960
|
-
}
|
|
44961
44970
|
}
|
|
44962
44971
|
|
|
44963
44972
|
/**
|
|
@@ -45845,6 +45854,17 @@
|
|
|
45845
45854
|
|
|
45846
45855
|
class InteractionTrack extends TrackBase {
|
|
45847
45856
|
|
|
45857
|
+
static defaults = {
|
|
45858
|
+
height: 250,
|
|
45859
|
+
theta: Math.PI / 4,
|
|
45860
|
+
arcOrientation: true,
|
|
45861
|
+
showBlocks: true,
|
|
45862
|
+
blockHeight: 3,
|
|
45863
|
+
thickness: 1,
|
|
45864
|
+
alpha: 0.02,
|
|
45865
|
+
logScale: true,
|
|
45866
|
+
}
|
|
45867
|
+
|
|
45848
45868
|
constructor(config, browser) {
|
|
45849
45869
|
super(config, browser);
|
|
45850
45870
|
}
|
|
@@ -45852,16 +45872,10 @@
|
|
|
45852
45872
|
init(config) {
|
|
45853
45873
|
|
|
45854
45874
|
super.init(config);
|
|
45855
|
-
|
|
45875
|
+
|
|
45856
45876
|
this.sinTheta = Math.sin(this.theta);
|
|
45857
45877
|
this.cosTheta = Math.cos(this.theta);
|
|
45858
|
-
this.height = config.height || 250;
|
|
45859
45878
|
this.arcType = getArcType(config); // nested | proportional | inView | partialInView
|
|
45860
|
-
this.arcOrientation = (config.arcOrientation === undefined ? true : config.arcOrientation); // true for up, false for down
|
|
45861
|
-
this.showBlocks = config.showBlocks === undefined ? true : config.showBlocks;
|
|
45862
|
-
this.blockHeight = config.blockHeight || 3;
|
|
45863
|
-
this.thickness = config.thickness || 1;
|
|
45864
|
-
this.color = config.color;
|
|
45865
45879
|
this.alpha = config.alpha || 0.02; // was: 0.15
|
|
45866
45880
|
this.painter = {flipAxis: !this.arcOrientation, dataRange: this.dataRange, paintAxis: paintAxis};
|
|
45867
45881
|
|
|
@@ -45873,7 +45887,6 @@
|
|
|
45873
45887
|
this.valueColumn = "score";
|
|
45874
45888
|
}
|
|
45875
45889
|
|
|
45876
|
-
this.logScale = config.logScale !== false; // i.e. defaul to true (undefined => true)
|
|
45877
45890
|
if (config.max) {
|
|
45878
45891
|
this.dataRange = {
|
|
45879
45892
|
min: config.min || 0,
|
|
@@ -45898,7 +45911,7 @@
|
|
|
45898
45911
|
|
|
45899
45912
|
if (typeof this.featureSource.getHeader === "function") {
|
|
45900
45913
|
this.header = await this.featureSource.getHeader();
|
|
45901
|
-
if(this.disposed) return; // This track was removed during async load
|
|
45914
|
+
if (this.disposed) return; // This track was removed during async load
|
|
45902
45915
|
}
|
|
45903
45916
|
|
|
45904
45917
|
// Set properties from track line
|
|
@@ -45971,7 +45984,7 @@
|
|
|
45971
45984
|
feature.drawState = undefined;
|
|
45972
45985
|
|
|
45973
45986
|
let color;
|
|
45974
|
-
if(typeof this.color === 'function') {
|
|
45987
|
+
if (typeof this.color === 'function') {
|
|
45975
45988
|
color = this.color(feature);
|
|
45976
45989
|
} else {
|
|
45977
45990
|
color = this.color || feature.color || DEFAULT_ARC_COLOR;
|
|
@@ -46316,7 +46329,7 @@
|
|
|
46316
46329
|
contextMenuItemList(clickState) {
|
|
46317
46330
|
|
|
46318
46331
|
// Experimental JBrowse feature
|
|
46319
|
-
if (this.browser.circularView
|
|
46332
|
+
if (this.browser.circularView) {
|
|
46320
46333
|
const viewport = clickState.viewport;
|
|
46321
46334
|
const list = [];
|
|
46322
46335
|
|
|
@@ -46345,7 +46358,7 @@
|
|
|
46345
46358
|
|
|
46346
46359
|
// inView features are simply features that have been drawn, i.e. have a drawState
|
|
46347
46360
|
const inView = cachedFeatures.filter(f => f.drawState);
|
|
46348
|
-
if(inView.length === 0) return;
|
|
46361
|
+
if (inView.length === 0) return;
|
|
46349
46362
|
|
|
46350
46363
|
const chords = makeBedPEChords(inView);
|
|
46351
46364
|
sendChords(chords, this, refFrame, 0.5);
|
|
@@ -46381,7 +46394,7 @@
|
|
|
46381
46394
|
|
|
46382
46395
|
popupData(clickState, features) {
|
|
46383
46396
|
|
|
46384
|
-
if(features === undefined) features = this.clickedFeatures(clickState);
|
|
46397
|
+
if (features === undefined) features = this.clickedFeatures(clickState);
|
|
46385
46398
|
|
|
46386
46399
|
const data = [];
|
|
46387
46400
|
for (let feature of features) {
|
|
@@ -46405,7 +46418,7 @@
|
|
|
46405
46418
|
const columnNames = this.header.columnNames;
|
|
46406
46419
|
const stdColumns = this.header.hiccups ? 6 : 10;
|
|
46407
46420
|
for (let i = stdColumns; i < columnNames.length; i++) {
|
|
46408
|
-
if(this.header.colorColumn === i) continue;
|
|
46421
|
+
if (this.header.colorColumn === i) continue;
|
|
46409
46422
|
if (columnNames[i] === 'info') {
|
|
46410
46423
|
extractInfoColumn(data, f.extras[i - stdColumns]);
|
|
46411
46424
|
} else {
|
|
@@ -46427,7 +46440,7 @@
|
|
|
46427
46440
|
|
|
46428
46441
|
// We use the cached features rather than method to avoid async load. If the
|
|
46429
46442
|
// feature is not already loaded this won't work, but the user wouldn't be mousing over it either.
|
|
46430
|
-
const featureList =
|
|
46443
|
+
const featureList = clickState.viewport.cachedFeatures;
|
|
46431
46444
|
const candidates = [];
|
|
46432
46445
|
if (featureList) {
|
|
46433
46446
|
const proportional = (this.arcType === "proportional" || this.arcType === "inView" || this.arcType === "partialInView");
|
|
@@ -46473,26 +46486,6 @@
|
|
|
46473
46486
|
}
|
|
46474
46487
|
return candidates.map((c) => c.feature)
|
|
46475
46488
|
}
|
|
46476
|
-
|
|
46477
|
-
/**
|
|
46478
|
-
* Return the current state of the track. Used to create sessions and bookmarks.
|
|
46479
|
-
*
|
|
46480
|
-
* @returns {*|{}}
|
|
46481
|
-
*/
|
|
46482
|
-
getState() {
|
|
46483
|
-
|
|
46484
|
-
const config = super.getState();
|
|
46485
|
-
|
|
46486
|
-
// if (this.height !== undefined) config.height = this.height;
|
|
46487
|
-
if (this.arcType !== undefined) config.arcType = this.arcType;
|
|
46488
|
-
if (this.arcOrientation !== undefined) config.arcOrientation = this.arcOrientation;
|
|
46489
|
-
if (this.showBlocks !== undefined) config.showBlocks = this.showBlocks;
|
|
46490
|
-
if (this.blockHeight !== undefined) config.blockHeight = this.blockHeight;
|
|
46491
|
-
if (this.thickness !== undefined) config.thickness = this.thickness;
|
|
46492
|
-
if (this.alpha !== undefined) config.alpha = this.alpha;
|
|
46493
|
-
|
|
46494
|
-
return config
|
|
46495
|
-
}
|
|
46496
46489
|
}
|
|
46497
46490
|
|
|
46498
46491
|
function getMidpoints(feature, genome) {
|
|
@@ -46699,6 +46692,31 @@
|
|
|
46699
46692
|
|
|
46700
46693
|
class VariantTrack extends TrackBase {
|
|
46701
46694
|
|
|
46695
|
+
static defaults = {
|
|
46696
|
+
displayMode: "EXPANDED",
|
|
46697
|
+
sortDirection: "ASC",
|
|
46698
|
+
showGenotypes: true,
|
|
46699
|
+
squishedVariantHeight: 2,
|
|
46700
|
+
squishedCallHeight: 1,
|
|
46701
|
+
expandedCallHeight: 10,
|
|
46702
|
+
expandedVGap: 2,
|
|
46703
|
+
squishedVGap: 1,
|
|
46704
|
+
expandedGroupGap: 10,
|
|
46705
|
+
squishedGroupGap: 5,
|
|
46706
|
+
featureHeight: 14,
|
|
46707
|
+
noGenotypeColor: "rgb(200,180,180)",
|
|
46708
|
+
noCallColor: "rgb(225, 225, 225)",
|
|
46709
|
+
nonRefColor: "rgb(200, 200, 215)",
|
|
46710
|
+
mixedColor: "rgb(200, 220, 200)",
|
|
46711
|
+
homrefColor: "rgb(200, 200, 200)",
|
|
46712
|
+
homvarColor: "rgb(17,248,254)",
|
|
46713
|
+
hetvarColor: "rgb(34,12,253)",
|
|
46714
|
+
colorBy: undefined,
|
|
46715
|
+
visibilityWindow: undefined,
|
|
46716
|
+
labelDisplayMode: undefined,
|
|
46717
|
+
type: "variant"
|
|
46718
|
+
}
|
|
46719
|
+
|
|
46702
46720
|
constructor(config, browser) {
|
|
46703
46721
|
super(config, browser);
|
|
46704
46722
|
}
|
|
@@ -46707,41 +46725,18 @@
|
|
|
46707
46725
|
|
|
46708
46726
|
super.init(config);
|
|
46709
46727
|
|
|
46710
|
-
this.visibilityWindow = config.visibilityWindow;
|
|
46711
|
-
this.displayMode = config.displayMode || "EXPANDED"; // COLLAPSED | EXPANDED | SQUISHED
|
|
46712
|
-
this.labelDisplayMode = config.labelDisplayMode;
|
|
46713
46728
|
this.expandedVariantHeight = config.expandedVariantHeight || config.variantHeight || 10;
|
|
46714
|
-
|
|
46715
|
-
this.squishedCallHeight = config.squishedCallHeight || 1;
|
|
46716
|
-
this.expandedCallHeight = config.expandedCallHeight || 10;
|
|
46717
|
-
this.expandedVGap = config.expandedVGap !== undefined ? config.expandedVGap : 2;
|
|
46718
|
-
this.squishedVGap = config.squishedVGap !== undefined ? config.squishedVGap : 1;
|
|
46719
|
-
this.expandedGroupGap = config.expandedGroupGap || 10;
|
|
46720
|
-
this.squishedGroupGap = config.squishedGroupGap || 5;
|
|
46721
|
-
this.featureHeight = config.featureHeight || 14;
|
|
46722
|
-
this.visibilityWindow = config.visibilityWindow;
|
|
46729
|
+
|
|
46723
46730
|
this.featureSource = FeatureSource(config, this.browser.genome);
|
|
46724
|
-
|
|
46725
|
-
this.noCallColor = config.noCallColor || "rgb(225, 225, 225)";
|
|
46726
|
-
this.nonRefColor = config.nonRefColor || "rgb(200, 200, 215)";
|
|
46727
|
-
this.mixedColor = config.mixedColor || "rgb(200, 220, 200)";
|
|
46728
|
-
this.homrefColor = config.homrefColor || "rgb(200, 200, 200)";
|
|
46729
|
-
this.homvarColor = config.homvarColor || "rgb(17,248,254)";
|
|
46730
|
-
this.hetvarColor = config.hetvarColor || "rgb(34,12,253)";
|
|
46731
|
-
this.sortDirection = "ASC";
|
|
46732
|
-
this.type = config.type || "variant";
|
|
46733
|
-
|
|
46734
|
-
this.colorBy = config.colorBy; // Can be undefined => default
|
|
46731
|
+
|
|
46735
46732
|
this._initColorBy = config.colorBy;
|
|
46736
46733
|
if (config.colorTable) {
|
|
46737
46734
|
this.colorTables = new Map();
|
|
46738
46735
|
this.colorTables.set(config.colorBy, new ColorTable(config.colorTable));
|
|
46739
46736
|
}
|
|
46740
|
-
|
|
46741
46737
|
this._strokecolor = config.strokecolor;
|
|
46742
46738
|
this._context_hook = config.context_hook;
|
|
46743
46739
|
|
|
46744
|
-
this.showGenotypes = config.showGenotypes === undefined ? true : config.showGenotypes;
|
|
46745
46740
|
|
|
46746
46741
|
// The number of variant rows are computed dynamically, but start with "1" by default
|
|
46747
46742
|
this.variantRowCount(1);
|
|
@@ -46751,7 +46746,7 @@
|
|
|
46751
46746
|
async postInit() {
|
|
46752
46747
|
|
|
46753
46748
|
this.header = await this.getHeader(); // cricital, don't remove'
|
|
46754
|
-
if(this.disposed) return
|
|
46749
|
+
if (this.disposed) return // This track was removed during async load
|
|
46755
46750
|
if (undefined === this.visibilityWindow && this.config.indexed !== false) {
|
|
46756
46751
|
const fn = isFile(this.config.url) ? this.config.url.name : this.config.url;
|
|
46757
46752
|
if (isString(fn) && fn.toLowerCase().includes("gnomad")) {
|
|
@@ -46854,7 +46849,7 @@
|
|
|
46854
46849
|
this.variantBandHeight = TOP_MARGIN + rowCount * (variantHeight + vGap);
|
|
46855
46850
|
|
|
46856
46851
|
let callSets = this.callSets;
|
|
46857
|
-
if(!callSets && this._f) {
|
|
46852
|
+
if (!callSets && this._f) {
|
|
46858
46853
|
callSets = this._f.callSets; // "Complementary" variant for structural variants
|
|
46859
46854
|
}
|
|
46860
46855
|
const nCalls = this.getCallsetsLength();
|
|
@@ -46894,9 +46889,9 @@
|
|
|
46894
46889
|
|
|
46895
46890
|
//only paint stroke if a color is defined
|
|
46896
46891
|
let strokecolor = this.getVariantStrokecolor(variant);
|
|
46897
|
-
if (strokecolor){
|
|
46898
|
-
|
|
46899
|
-
|
|
46892
|
+
if (strokecolor) {
|
|
46893
|
+
context.strokeStyle = strokecolor;
|
|
46894
|
+
context.strokeRect(x, y, w, h);
|
|
46900
46895
|
}
|
|
46901
46896
|
|
|
46902
46897
|
// call hook if _context_hook fn is defined
|
|
@@ -46912,7 +46907,7 @@
|
|
|
46912
46907
|
this.sampleHeight = nVariantRows * (callHeight + vGap); // For each sample, there is a call for each variant at this position
|
|
46913
46908
|
|
|
46914
46909
|
let sampleNumber = 0;
|
|
46915
|
-
if(callSets && variant.calls) {
|
|
46910
|
+
if (callSets && variant.calls) {
|
|
46916
46911
|
for (let callSet of callSets) {
|
|
46917
46912
|
const call = variant.calls[callSet.id];
|
|
46918
46913
|
if (call) {
|
|
@@ -46988,13 +46983,12 @@
|
|
|
46988
46983
|
} else if ("MIXED" === v.type) {
|
|
46989
46984
|
variantColor = this.mixedColor;
|
|
46990
46985
|
} else {
|
|
46991
|
-
variantColor = this.
|
|
46986
|
+
variantColor = this.color;
|
|
46992
46987
|
}
|
|
46993
46988
|
return variantColor
|
|
46994
46989
|
}
|
|
46995
46990
|
|
|
46996
46991
|
|
|
46997
|
-
|
|
46998
46992
|
getVariantStrokecolor(variant) {
|
|
46999
46993
|
|
|
47000
46994
|
const v = variant._f || variant;
|
|
@@ -47010,13 +47004,13 @@
|
|
|
47010
47004
|
|
|
47011
47005
|
callContextHook(variant, context, x, y, w, h) {
|
|
47012
47006
|
if (this._context_hook) {
|
|
47013
|
-
|
|
47014
|
-
|
|
47007
|
+
if (typeof this._context_hook === "function") {
|
|
47008
|
+
const v = variant._f || variant;
|
|
47015
47009
|
|
|
47016
|
-
|
|
47017
|
-
|
|
47018
|
-
|
|
47019
|
-
|
|
47010
|
+
context.save();
|
|
47011
|
+
this._context_hook(v, context, x, y, w, h);
|
|
47012
|
+
context.restore();
|
|
47013
|
+
}
|
|
47020
47014
|
}
|
|
47021
47015
|
}
|
|
47022
47016
|
|
|
@@ -47060,7 +47054,7 @@
|
|
|
47060
47054
|
*/
|
|
47061
47055
|
popupData(clickState, featureList) {
|
|
47062
47056
|
|
|
47063
|
-
if(featureList === undefined) featureList = this.clickedFeatures(clickState);
|
|
47057
|
+
if (featureList === undefined) featureList = this.clickedFeatures(clickState);
|
|
47064
47058
|
const genomicLocation = clickState.genomicLocation;
|
|
47065
47059
|
const genomeID = this.browser.genome.id;
|
|
47066
47060
|
const sampleInformation = this.browser.sampleInformation;
|
|
@@ -47288,12 +47282,12 @@
|
|
|
47288
47282
|
sendChordsForViewport(viewport) {
|
|
47289
47283
|
const refFrame = viewport.referenceFrame;
|
|
47290
47284
|
let inView;
|
|
47291
|
-
if("all" === refFrame.chr) {
|
|
47285
|
+
if ("all" === refFrame.chr) {
|
|
47292
47286
|
const all = this.featureSource.getAllFeatures();
|
|
47293
47287
|
const arrays = Object.keys(all).map(k => all[k]);
|
|
47294
47288
|
inView = [].concat(...arrays);
|
|
47295
47289
|
} else {
|
|
47296
|
-
|
|
47290
|
+
inView = this.featureSource.featureCache.queryFeatures(refFrame.chr, refFrame.start, refFrame.end);
|
|
47297
47291
|
|
|
47298
47292
|
}
|
|
47299
47293
|
|
|
@@ -57531,7 +57525,7 @@
|
|
|
57531
57525
|
let locusObject = parseLocusString(browser, locus);
|
|
57532
57526
|
|
|
57533
57527
|
if (!locusObject) {
|
|
57534
|
-
const feature = browser.genome.featureDB
|
|
57528
|
+
const feature = browser.genome.featureDB.get(locus.toUpperCase());
|
|
57535
57529
|
if (feature) {
|
|
57536
57530
|
locusObject = {
|
|
57537
57531
|
chr: feature.chr,
|
|
@@ -59384,7 +59378,7 @@
|
|
|
59384
59378
|
|
|
59385
59379
|
renderTable(records) {
|
|
59386
59380
|
|
|
59387
|
-
Array.from(this.
|
|
59381
|
+
Array.from(this.tableRowContainer.querySelectorAll('.igv-roi-table-row')).forEach(el => el.remove());
|
|
59388
59382
|
|
|
59389
59383
|
if (records.length > 0) {
|
|
59390
59384
|
|
|
@@ -59392,7 +59386,7 @@
|
|
|
59392
59386
|
|
|
59393
59387
|
for (let record of sortedRecords) {
|
|
59394
59388
|
const row = this.tableRowDOM(record);
|
|
59395
|
-
this.
|
|
59389
|
+
this.tableRowContainer.appendChild(row);
|
|
59396
59390
|
}
|
|
59397
59391
|
|
|
59398
59392
|
}
|
|
@@ -59432,14 +59426,14 @@
|
|
|
59432
59426
|
|
|
59433
59427
|
event.stopPropagation();
|
|
59434
59428
|
|
|
59435
|
-
const selected = this.
|
|
59429
|
+
const selected = this.tableDOM.querySelectorAll('.igv-roi-table-row-selected');
|
|
59436
59430
|
const loci = [];
|
|
59437
59431
|
for (let el of selected) {
|
|
59438
59432
|
const { locus } = parseRegionKey(el.dataset.region);
|
|
59439
59433
|
loci.push(locus);
|
|
59440
59434
|
}
|
|
59441
59435
|
|
|
59442
|
-
for (let el of this.
|
|
59436
|
+
for (let el of this.tableDOM.querySelectorAll('.igv-roi-table-row')) {
|
|
59443
59437
|
el.classList.remove('igv-roi-table-row-selected');
|
|
59444
59438
|
}
|
|
59445
59439
|
|
|
@@ -62072,7 +62066,7 @@
|
|
|
62072
62066
|
|
|
62073
62067
|
function embedCSS() {
|
|
62074
62068
|
|
|
62075
|
-
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: 210px;\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}\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 height: 32px;\n line-height: 32px;\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: space-between;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container div {\n margin-left: 0;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container div:last-child {\n margin-left: 0;\n margin-right: 0;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container-750 {\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget {\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 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: 24px;\n width: 24px;\n margin-left: unset;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:last-child {\n height: 24px;\n width: 24px;\n margin-left: 8px;\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: 24px;\n width: 24px;\n margin-left: unset;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:last-child {\n height: 24px;\n width: 24px;\n margin-left: 8px;\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-clicked {\n color: white;\n background-color: #737373;\n}\n\n.igv-navbar-button:hover {\n cursor: pointer;\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-next-gen {\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-next-gen > 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-next-gen > div:first-child > div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-roi-menu-next-gen > div:first-child > div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-menu-next-gen > 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-next-gen > 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-next-gen > div:last-child > div:not(:first-child):hover {\n background-color: rgba(127, 127, 127, 0.1);\n}\n.igv-roi-menu-next-gen > 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-next-gen > 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: fit-content;\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 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 height: fit-content;\n padding: 4px;\n margin-left: 4px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n word-break: break-all;\n max-height: 300px;\n overflow-y: auto;\n}\n.igv-roi-table > .igv-roi-table-goto-explainer {\n margin-left: 4px;\n color: #7F7F7F;\n font-style: italic;\n border-top: solid lightgray;\n margin-top: 5px;\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 white-space: nowrap;\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: scroll;\n min-height: 72px;\n height: 144px;\n max-height: 480px;\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}\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 {\n position: absolute;\n z-index: 1024;\n width: 144px;\n border-color: #7f7f7f;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\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}\n.igv-roi-menu > div:not(:last-child) {\n border-bottom-color: rgba(128, 128, 128, 0.5);\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-roi-menu > div:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-top-color: transparent;\n border-top-style: solid;\n border-top-width: 0;\n}\n.igv-roi-menu > 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: 0;\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}\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-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-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 margin-top: 5px;\n width: 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 background-color: #c4c4c4;\n}\n.igv-track-drag-column .igv-track-drag-handle-hover {\n background-color: #787878;\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';
|
|
62069
|
+
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: 210px;\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}\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 height: 32px;\n line-height: 32px;\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: space-between;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container div {\n margin-left: 0;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container div:last-child {\n margin-left: 0;\n margin-right: 0;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container-750 {\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget {\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 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: 24px;\n width: 24px;\n margin-left: unset;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:last-child {\n height: 24px;\n width: 24px;\n margin-left: 8px;\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: 24px;\n width: 24px;\n margin-left: unset;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:last-child {\n height: 24px;\n width: 24px;\n margin-left: 8px;\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-clicked {\n color: white;\n background-color: #737373;\n}\n\n.igv-navbar-button:hover {\n cursor: pointer;\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-next-gen {\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-next-gen > 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-next-gen > div:first-child > div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-roi-menu-next-gen > div:first-child > div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-menu-next-gen > 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-next-gen > 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-next-gen > div:last-child > div:not(:first-child):hover {\n background-color: rgba(127, 127, 127, 0.1);\n}\n.igv-roi-menu-next-gen > 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-next-gen > 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 {\n position: absolute;\n z-index: 1024;\n width: 144px;\n border-color: #7f7f7f;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\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}\n.igv-roi-menu > div:not(:last-child) {\n border-bottom-color: rgba(128, 128, 128, 0.5);\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-roi-menu > div:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-top-color: transparent;\n border-top-style: solid;\n border-top-width: 0;\n}\n.igv-roi-menu > 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: 0;\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}\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-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-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 margin-top: 5px;\n width: 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 background-color: #c4c4c4;\n}\n.igv-track-drag-column .igv-track-drag-handle-hover {\n background-color: #787878;\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';
|
|
62076
62070
|
|
|
62077
62071
|
var style = document.createElement('style');
|
|
62078
62072
|
style.setAttribute('type', 'text/css');
|