igv 3.0.3 → 3.0.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/dist/igv.js CHANGED
@@ -25222,9 +25222,7 @@
25222
25222
  } else {
25223
25223
  combinedFeatures = this.combineFeaturesByType(features);
25224
25224
  }
25225
- combinedFeatures.sort(function (a, b) {
25226
- return a.start - b.start
25227
- });
25225
+
25228
25226
  this.numberExons(combinedFeatures, genomicInterval);
25229
25227
  this.nameFeatures(combinedFeatures);
25230
25228
  return combinedFeatures
@@ -29781,20 +29779,30 @@
29781
29779
  await this.readHeader();
29782
29780
  }
29783
29781
 
29782
+ let allFeatures;
29784
29783
  const index = await this.getIndex();
29785
29784
  if (index) {
29786
29785
  this.indexed = true;
29787
- return this.loadFeaturesWithIndex(chr, start, end)
29786
+ allFeatures = await this.loadFeaturesWithIndex(chr, start, end);
29788
29787
  } else if (this.dataURI) {
29789
29788
  this.indexed = false;
29790
- return this.loadFeaturesFromDataURI()
29789
+ allFeatures = await this.loadFeaturesFromDataURI();
29791
29790
  } else if ("service" === this.config.sourceType) {
29792
- return this.loadFeaturesFromService(chr, start, end)
29791
+ allFeatures = await this.loadFeaturesFromService(chr, start, end);
29793
29792
  } else {
29794
29793
  this.indexed = false;
29795
- return this.loadFeaturesNoIndex()
29794
+ allFeatures = await this.loadFeaturesNoIndex();
29796
29795
  }
29797
29796
 
29797
+ allFeatures.sort(function (a, b) {
29798
+ if (a.chr === b.chr) {
29799
+ return a.start - b.start
29800
+ } else {
29801
+ return a.chr.localeCompare(b.chr)
29802
+ }
29803
+ });
29804
+
29805
+ return allFeatures
29798
29806
  }
29799
29807
 
29800
29808
  async readHeader() {
@@ -29966,9 +29974,6 @@
29966
29974
  await this._parse(allFeatures, dataWrapper, chr, end, start);
29967
29975
 
29968
29976
  }
29969
- allFeatures.sort(function (a, b) {
29970
- return a.start - b.start
29971
- });
29972
29977
 
29973
29978
  return allFeatures
29974
29979
  }
@@ -29998,8 +30003,13 @@
29998
30003
 
29999
30004
  let features = await this.parser.parseFeatures(dataWrapper);
30000
30005
 
30001
- // Filter psuedo-features (e.g. created mates for VCF SV records) TODO why?
30002
- //slicedFeatures = slicedFeatures.filter(f => f._f === undefined)
30006
+ features.sort(function (a, b) {
30007
+ if (a.chr === b.chr) {
30008
+ return a.start - b.start
30009
+ } else {
30010
+ return a.chr.localeCompare(b.chr)
30011
+ }
30012
+ });
30003
30013
 
30004
30014
  // Filter features not in requested range.
30005
30015
  if (undefined === chr) {
@@ -30008,26 +30018,21 @@
30008
30018
  let inInterval = false;
30009
30019
  for (let i = 0; i < features.length; i++) {
30010
30020
  const f = features[i];
30011
- if (f.chr !== chr) {
30012
- if (allFeatures.length === 0) {
30013
- continue //adjacent chr to the left
30014
- } else {
30015
- break //adjacent chr to the right
30021
+ if (f.chr === chr) {
30022
+ if (f.start > end) {
30023
+ allFeatures.push(f); // First feature beyond interval
30024
+ break
30016
30025
  }
30017
- }
30018
- if (f.start > end) {
30019
- allFeatures.push(f); // First feature beyond interval
30020
- break
30021
- }
30022
- if (f.end >= start && f.start <= end) {
30023
- // All this to grab first feature before start of interval. Needed for some track renderers, like line plot
30024
- if (!inInterval) {
30025
- inInterval = true;
30026
- if (i > 0) {
30027
- allFeatures.push(features[i - 1]);
30026
+ if (f.end >= start && f.start <= end) {
30027
+ // All this to grab first feature before start of interval. Needed for some track renderers, like line plot
30028
+ if (!inInterval) {
30029
+ inInterval = true;
30030
+ if (i > 0) {
30031
+ allFeatures.push(features[i - 1]);
30032
+ }
30028
30033
  }
30034
+ allFeatures.push(f);
30029
30035
  }
30030
- allFeatures.push(f);
30031
30036
  }
30032
30037
  }
30033
30038
  }
@@ -34501,7 +34506,11 @@
34501
34506
  if (name === undefined) name = feature.id || feature.ID;
34502
34507
  if (!name || name === '.') return
34503
34508
 
34504
- let centerX = (featureX + featureX1) / 2;
34509
+ let pixelXOffset = options.pixelXOffset || 0;
34510
+ const t1 = Math.max(featureX, -pixelXOffset);
34511
+ const t2 = Math.min(featureX1, -pixelXOffset + options.viewportWidth);
34512
+ let centerX = (t1 + t2) / 2;
34513
+ //let centerX = (featureX + featureX1) / 2
34505
34514
 
34506
34515
  let transform;
34507
34516
  if (this.displayMode === "COLLAPSED" && this.labelDisplayMode === "SLANT") {
@@ -34780,7 +34789,6 @@
34780
34789
  displayMode: "EXPANDED", // COLLAPSED | EXPANDED | SQUISHED
34781
34790
  margin: 10,
34782
34791
  featureHeight: 14,
34783
- autoHeight: false,
34784
34792
  useScore: false
34785
34793
  }
34786
34794
 
@@ -35312,7 +35320,8 @@
35312
35320
 
35313
35321
  function onDragEnd() {
35314
35322
  if (track.trackView && track.displayMode !== "SQUISHED") {
35315
- track.trackView.updateViews(); // TODO -- refine this to the viewport that was dragged after DOM refactor
35323
+ // Repaint views to adjust feature name if center is moved out of view
35324
+ track.trackView.repaintViews();
35316
35325
  }
35317
35326
  }
35318
35327
 
@@ -43049,7 +43058,7 @@
43049
43058
  const viewportsToRepaint = visibleViewports.filter(vp => vp.needsRepaint()).filter(viewport => viewport.checkZoomIn());
43050
43059
 
43051
43060
  // Get viewports that require a data load
43052
- const viewportsToReload = viewportsToRepaint.filter(viewport => viewport.needsReload());
43061
+ const viewportsToReload = visibleViewports.filter(viewport => viewport.needsReload());
43053
43062
 
43054
43063
  // Trigger viewport to load features needed to cover current genomic range
43055
43064
  // NOTE: these must be loaded synchronously, do not user Promise.all, not all file readers are thread safe
@@ -67614,8 +67623,6 @@
67614
67623
  this.trackView.setTrackHeight(this.config.height || CNVPytorTrack.DEFAULT_TRACK_HEIGHT);
67615
67624
  this.trackView.checkContentHeight();
67616
67625
  this.trackView.updateViews();
67617
- this.trackView.track.autoHeight = false;
67618
-
67619
67626
 
67620
67627
  } finally {
67621
67628
  this.trackView.stopSpinner();
@@ -68036,13 +68043,8 @@
68036
68043
  this.divider = config.divider || "rgb(225,225,225)";
68037
68044
  this.dotSize = config.dotSize || 2;
68038
68045
  this.height = config.height || 100;
68039
- this.autoHeight = false;
68040
68046
  this.disableButtons = config.disableButtons;
68041
68047
 
68042
- // Limit visibility window to 2 mb, gtex server gets flaky beyond that
68043
- //this.visibilityWindow = config.visibilityWindow === undefined ?
68044
- // 2000000 : config.visibilityWindow >= 0 ? Math.min(2000000, config.visibilityWindow) : 2000000
68045
-
68046
68048
  this.featureSource = FeatureSource(config, this.browser.genome);
68047
68049
  }
68048
68050
 
@@ -70521,7 +70523,7 @@
70521
70523
  })
70522
70524
  }
70523
70525
 
70524
- const _version = "3.0.3";
70526
+ const _version = "3.0.4";
70525
70527
  function version() {
70526
70528
  return _version
70527
70529
  }
@@ -74625,7 +74627,7 @@
74625
74627
  */
74626
74628
  async loadGenome(idOrConfig) {
74627
74629
 
74628
- if(idOrConfig.genarkAccession) {
74630
+ if (idOrConfig.genarkAccession) {
74629
74631
  idOrConfig.url = convertToHubURL(idOrConfig.genarkAccession);
74630
74632
  }
74631
74633
 
@@ -75921,7 +75923,7 @@
75921
75923
 
75922
75924
  if (dragObject && dragObject.viewport.referenceFrame.start !== dragObject.start) {
75923
75925
  this.updateViews();
75924
- this.fireEvent('trackdragend');
75926
+ this.fireEvent('trackdragend', [dragObject.viewport]);
75925
75927
  }
75926
75928
  }
75927
75929