igv-rails 1.0.9.2 → 1.0.9.3
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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/igv/rails/version.rb +1 -1
- data/vendor/assets/javascripts/igv.js +300 -81
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e41e71ec86fc4750c6e787e26956d1d377bb5c53
|
4
|
+
data.tar.gz: 67e4aa36df01edd7e27bf9a30a2b636d430c8eff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ef0d543d13439794623a3c1309e00f91ded938e4e869750aa4115479101b0f9a288b92e77594aefcb18bf087db3411b76717ee6afdab3744e78267f1ba0ea93
|
7
|
+
data.tar.gz: d37f2aa24171507dd7d6ea336541c78441436a31d490a6bce3a22dec739fd2aabacbc595fe6c322f361e2f9a003d3e5188ee9d68c896ee9bbf2061c92414fa97
|
data/README.md
CHANGED
@@ -89,9 +89,9 @@ This is [igv-web](https://www.broadinstitute.org/software/igv/home) GEMified for
|
|
89
89
|
bundle gem igv-rails
|
90
90
|
cd igv-rails
|
91
91
|
mkdir -p vendor/assets/javascripts
|
92
|
-
curl https://igv.org/web/beta/igv-
|
92
|
+
curl https://igv.org/web/beta/igv-beta.js -o vendor/assets/javascripts/igv.js
|
93
93
|
mkdir -p vendor/assets/stylesheets
|
94
|
-
curl https://igv.org/web/beta/igv.css -o vendor/assets/stylesheets/igv.css
|
94
|
+
curl https://igv.org/web/beta/igv-beta.css -o vendor/assets/stylesheets/igv.css
|
95
95
|
echo "" >> README.md; echo "# igv appended README #" >> README.md; echo "" >> README.md
|
96
96
|
curl https://github.com/broadinstitute/igv-web/blob/master/README.md >> README.md
|
97
97
|
echo "" >> LICENSE; echo "# igv appended LICENSE #" >> LICENSE; echo "" >> LICENSE
|
data/lib/igv/rails/version.rb
CHANGED
@@ -2776,7 +2776,7 @@ var igv = (function (igv) {
|
|
2776
2776
|
.then(function (chrToIndex) {
|
2777
2777
|
|
2778
2778
|
var chrId, queryChr, alignmentContainer;
|
2779
|
-
|
2779
|
+
|
2780
2780
|
queryChr = self.chrAliasTable.hasOwnProperty(chr) ? self.chrAliasTable[chr] : chr;
|
2781
2781
|
|
2782
2782
|
chrId = chrToIndex[queryChr];
|
@@ -2816,7 +2816,7 @@ var igv = (function (igv) {
|
|
2816
2816
|
.then(function (compressed) {
|
2817
2817
|
|
2818
2818
|
var ba = new Uint8Array(igv.unbgzf(compressed)); //new Uint8Array(igv.unbgzf(compressed)); //, c.maxv.block - c.minv.block + 1));
|
2819
|
-
igv.BamUtils.decodeBamRecords(ba, c.minv.offset, alignmentContainer, bpStart, bpEnd, chrId, self.indexToChr
|
2819
|
+
igv.BamUtils.decodeBamRecords(ba, c.minv.offset, alignmentContainer, bpStart, bpEnd, chrId, self.indexToChr, self.filter);
|
2820
2820
|
|
2821
2821
|
fulfill(alignmentContainer);
|
2822
2822
|
|
@@ -3361,16 +3361,6 @@ var igv = (function (igv) {
|
|
3361
3361
|
|
3362
3362
|
};
|
3363
3363
|
|
3364
|
-
igv.BAMTrack.prototype.popupData = function (genomicLocation, xOffset, yOffset, referenceFrame) {
|
3365
|
-
|
3366
|
-
if (yOffset >= this.coverageTrack.top && yOffset < this.coverageTrack.height) {
|
3367
|
-
return this.coverageTrack.popupData(genomicLocation, xOffset, this.coverageTrack.top, referenceFrame);
|
3368
|
-
} else {
|
3369
|
-
return this.alignmentTrack.popupData(genomicLocation, xOffset, yOffset - this.alignmentTrack.top, referenceFrame);
|
3370
|
-
}
|
3371
|
-
|
3372
|
-
};
|
3373
|
-
|
3374
3364
|
igv.BAMTrack.prototype.popupDataWithConfiguration = function (config) {
|
3375
3365
|
|
3376
3366
|
if (config.y >= this.coverageTrack.top && config.y < this.coverageTrack.height) {
|
@@ -3871,7 +3861,6 @@ var igv = (function (igv) {
|
|
3871
3861
|
function drawPairConnector(alignment, yRect, alignmentHeight) {
|
3872
3862
|
|
3873
3863
|
var alignmentColor = getAlignmentColor.call(self, alignment.firstAlignment),
|
3874
|
-
outlineColor = 'alignmentColor',
|
3875
3864
|
xBlockStart = (alignment.connectingStart - bpStart) / bpPerPixel,
|
3876
3865
|
xBlockEnd = (alignment.connectingEnd - bpStart) / bpPerPixel,
|
3877
3866
|
yStrokedLine = yRect + alignmentHeight / 2;
|
@@ -3884,7 +3873,7 @@ var igv = (function (igv) {
|
|
3884
3873
|
alignmentColor = igv.addAlphaToRGB(alignmentColor, "0.15");
|
3885
3874
|
}
|
3886
3875
|
|
3887
|
-
igv.graphics.setProperties(ctx, {fillStyle: alignmentColor, strokeStyle:
|
3876
|
+
igv.graphics.setProperties(ctx, {fillStyle: alignmentColor, strokeStyle: alignmentColor});
|
3888
3877
|
|
3889
3878
|
igv.graphics.strokeLine(ctx, xBlockStart, yStrokedLine, xBlockEnd, yStrokedLine);
|
3890
3879
|
|
@@ -4446,7 +4435,7 @@ var igv = (function (igv) {
|
|
4446
4435
|
} else {
|
4447
4436
|
qualArray = [];
|
4448
4437
|
for (j = 0; j < lseq; ++j) {
|
4449
|
-
qualArray.push(ba[p + j]
|
4438
|
+
qualArray.push(ba[p + j]);
|
4450
4439
|
}
|
4451
4440
|
}
|
4452
4441
|
p += lseq;
|
@@ -6837,7 +6826,7 @@ var igv = (function (igv) {
|
|
6837
6826
|
trackView = new igv.TrackView(this, $(this.trackContainerDiv), track);
|
6838
6827
|
this.trackViews.push(trackView);
|
6839
6828
|
this.reorderTracks();
|
6840
|
-
trackView.
|
6829
|
+
trackView.update();
|
6841
6830
|
};
|
6842
6831
|
|
6843
6832
|
igv.Browser.prototype.reorderTracks = function () {
|
@@ -11269,6 +11258,8 @@ var igv = (function (igv) {
|
|
11269
11258
|
}
|
11270
11259
|
} else if (config.sourceType === "bigquery") {
|
11271
11260
|
this.reader = new igv.BigQueryFeatureReader(config);
|
11261
|
+
} else if (config.sourceType === 'ucscservice') {
|
11262
|
+
this.reader = new igv.UCSCServiceReader(config.source);
|
11272
11263
|
} else if (config.source !== undefined) {
|
11273
11264
|
this.reader = new igv.CustomServiceReader(config.source);
|
11274
11265
|
}
|
@@ -11597,7 +11588,7 @@ var igv = (function (igv) {
|
|
11597
11588
|
}
|
11598
11589
|
this.maxRows = config.maxRows;
|
11599
11590
|
|
11600
|
-
if (
|
11591
|
+
if (config.url &&
|
11601
11592
|
(
|
11602
11593
|
igv.filenameOrURLHasSuffix(config.url, '.bigbed') || igv.filenameOrURLHasSuffix(config.url, '.bb')
|
11603
11594
|
||
|
@@ -11616,13 +11607,14 @@ var igv = (function (igv) {
|
|
11616
11607
|
this.render = renderVariant;
|
11617
11608
|
this.homvarColor = "rgb(17,248,254)";
|
11618
11609
|
this.hetvarColor = "rgb(34,12,253)";
|
11619
|
-
}
|
11620
|
-
else if ("FusionJuncSpan" === config.type) {
|
11610
|
+
} else if ("FusionJuncSpan" === config.type) {
|
11621
11611
|
this.render = renderFusionJuncSpan;
|
11622
11612
|
this.height = config.height || 50;
|
11623
11613
|
this.autoHeight = false;
|
11624
|
-
}
|
11625
|
-
|
11614
|
+
} else if ("snp" === config.type) {
|
11615
|
+
// TODO -- snp specific render function
|
11616
|
+
this.render = renderFeature;
|
11617
|
+
} else {
|
11626
11618
|
this.render = renderFeature;
|
11627
11619
|
this.arrowSpacing = 30;
|
11628
11620
|
|
@@ -11682,6 +11674,7 @@ var igv = (function (igv) {
|
|
11682
11674
|
* @returns {*}
|
11683
11675
|
*/
|
11684
11676
|
igv.FeatureTrack.prototype.computePixelHeight = function (features) {
|
11677
|
+
var height;
|
11685
11678
|
|
11686
11679
|
if (this.displayMode === "COLLAPSED") {
|
11687
11680
|
return this.variantHeight;
|
@@ -11691,11 +11684,15 @@ var igv = (function (igv) {
|
|
11691
11684
|
if (features && (typeof features.forEach === "function")) {
|
11692
11685
|
features.forEach(function (feature) {
|
11693
11686
|
|
11694
|
-
if (feature.row && feature.row > maxRow)
|
11687
|
+
if (feature.row && feature.row > maxRow) {
|
11688
|
+
maxRow = feature.row;
|
11689
|
+
}
|
11695
11690
|
|
11696
11691
|
});
|
11697
11692
|
}
|
11698
|
-
|
11693
|
+
|
11694
|
+
height = Math.max(this.variantHeight, (maxRow + 1) * ("SQUISHED" === this.displayMode ? this.squishedCallHeight : this.expandedCallHeight));
|
11695
|
+
return height;
|
11699
11696
|
|
11700
11697
|
}
|
11701
11698
|
|
@@ -11726,7 +11723,7 @@ var igv = (function (igv) {
|
|
11726
11723
|
if (gene.end < bpStart) continue;
|
11727
11724
|
if (gene.start > bpEnd) break;
|
11728
11725
|
|
11729
|
-
if(!selectedFeature && selectedFeatureName && selectedFeatureName === gene.name.toUpperCase()) {
|
11726
|
+
if (!selectedFeature && selectedFeatureName && selectedFeatureName === gene.name.toUpperCase()) {
|
11730
11727
|
selectedFeature = gene;
|
11731
11728
|
}
|
11732
11729
|
else {
|
@@ -11734,7 +11731,7 @@ var igv = (function (igv) {
|
|
11734
11731
|
}
|
11735
11732
|
}
|
11736
11733
|
|
11737
|
-
if(selectedFeature) {
|
11734
|
+
if (selectedFeature) {
|
11738
11735
|
c = selectedFeature.color;
|
11739
11736
|
selectedFeature.color = "rgb(255,0,0)";
|
11740
11737
|
track.render.call(this, selectedFeature, bpStart, bpPerPixel, pixelHeight, ctx, options);
|
@@ -11761,30 +11758,51 @@ var igv = (function (igv) {
|
|
11761
11758
|
// feature is not already loaded this won't work, but the user wouldn't be mousing over it either.
|
11762
11759
|
if (this.featureSource.featureCache) {
|
11763
11760
|
|
11764
|
-
var
|
11765
|
-
|
11766
|
-
|
11767
|
-
|
11761
|
+
var tolerance,
|
11762
|
+
featureList,
|
11763
|
+
row,
|
11764
|
+
popupData,
|
11765
|
+
ss,
|
11766
|
+
ee,
|
11767
|
+
str,
|
11768
|
+
filtered,
|
11769
|
+
mapped;
|
11770
|
+
|
11771
|
+
// We need some tolerance around genomicLocation, start with +/- 2 pixels
|
11772
|
+
tolerance = 2 * referenceFrame.bpPerPixel;
|
11773
|
+
ss = genomicLocation - tolerance;
|
11774
|
+
ee = genomicLocation + tolerance;
|
11775
|
+
featureList = this.featureSource.featureCache.queryFeatures(referenceFrame.chrName, ss, ee);
|
11768
11776
|
|
11769
11777
|
if ('COLLAPSED' !== this.displayMode) {
|
11770
|
-
row = 'SQUISHED' === this.displayMode ? Math.floor(yOffset /
|
11778
|
+
row = 'SQUISHED' === this.displayMode ? Math.floor((yOffset - 2)/this.expandedCallHeight) : Math.floor((yOffset - 5)/this.squishedCallHeight);
|
11771
11779
|
}
|
11772
11780
|
|
11773
11781
|
if (featureList && featureList.length > 0) {
|
11774
11782
|
|
11783
|
+
// filtered = _.filter(featureList, function (ff) {
|
11784
|
+
// return ff.end >= ss && ff.start <= ee;
|
11785
|
+
// });
|
11786
|
+
//
|
11787
|
+
// mapped = _.map(filtered, function (f) {
|
11788
|
+
// return f.row;
|
11789
|
+
// });
|
11790
|
+
//
|
11791
|
+
// str = mapped.join(' ');
|
11775
11792
|
|
11776
|
-
|
11793
|
+
popupData = [];
|
11777
11794
|
featureList.forEach(function (feature) {
|
11778
|
-
|
11779
|
-
|
11795
|
+
var featureData;
|
11796
|
+
|
11797
|
+
if (feature.end >= ss && feature.start <= ee) {
|
11798
|
+
|
11799
|
+
// console.log('row ' + row + ' feature-rows ' + str + ' features ' + _.size(featureList));
|
11780
11800
|
|
11781
|
-
// If row number is specified use it
|
11782
11801
|
if (row === undefined || feature.row === undefined || row === feature.row) {
|
11783
|
-
|
11802
|
+
|
11784
11803
|
if (feature.popupData) {
|
11785
11804
|
featureData = feature.popupData(genomicLocation);
|
11786
|
-
}
|
11787
|
-
else {
|
11805
|
+
} else {
|
11788
11806
|
featureData = extractPopupData(feature);
|
11789
11807
|
}
|
11790
11808
|
if (featureData) {
|
@@ -11831,7 +11849,7 @@ var igv = (function (igv) {
|
|
11831
11849
|
|
11832
11850
|
menuItems.push(igv.colorPickerMenuItem(popover, this.trackView));
|
11833
11851
|
|
11834
|
-
mapped = _.map(["COLLAPSED", "SQUISHED", "EXPANDED"], function(displayMode, index) {
|
11852
|
+
mapped = _.map(["COLLAPSED", "SQUISHED", "EXPANDED"], function (displayMode, index) {
|
11835
11853
|
return {
|
11836
11854
|
object: $(markupStringified(displayMode, index, self.displayMode)),
|
11837
11855
|
click: function () {
|
@@ -11850,17 +11868,17 @@ var igv = (function (igv) {
|
|
11850
11868
|
chosen;
|
11851
11869
|
|
11852
11870
|
lut =
|
11853
|
-
|
11854
|
-
|
11855
|
-
|
11856
|
-
|
11857
|
-
|
11871
|
+
{
|
11872
|
+
"COLLAPSED": "Collapse",
|
11873
|
+
"SQUISHED": "Squish",
|
11874
|
+
"EXPANDED": "Expand"
|
11875
|
+
};
|
11858
11876
|
|
11859
11877
|
chosen = (0 === index) ? '<div class="igv-track-menu-border-top">' : '<div>';
|
11860
11878
|
if (displayMode === selfDisplayMode) {
|
11861
|
-
return chosen + '<i class="fa fa-check fa-check-shim"></i>' + lut[
|
11879
|
+
return chosen + '<i class="fa fa-check fa-check-shim"></i>' + lut[displayMode] + '</div>'
|
11862
11880
|
} else {
|
11863
|
-
return chosen + '<i class="fa fa-check fa-check-shim fa-check-hidden"></i>' + lut[
|
11881
|
+
return chosen + '<i class="fa fa-check fa-check-shim fa-check-hidden"></i>' + lut[displayMode] + '</div>';
|
11864
11882
|
}
|
11865
11883
|
|
11866
11884
|
}
|
@@ -12039,10 +12057,9 @@ var igv = (function (igv) {
|
|
12039
12057
|
}
|
12040
12058
|
|
12041
12059
|
|
12042
|
-
|
12043
12060
|
textFitsInBox = (boxX1 - boxX) > ctx.measureText(feature.name).width;
|
12044
12061
|
|
12045
|
-
if (
|
12062
|
+
if ((feature.name !== undefined && feature.name.toUpperCase() === selectedFeatureName) ||
|
12046
12063
|
((textFitsInBox || geneColor) && this.displayMode !== "SQUISHED" && feature.name !== undefined)) {
|
12047
12064
|
geneFontStyle = {
|
12048
12065
|
font: '10px PT Sans',
|
@@ -12205,6 +12222,144 @@ var igv = (function (igv) {
|
|
12205
12222
|
})
|
12206
12223
|
(igv || {});
|
12207
12224
|
|
12225
|
+
/*
|
12226
|
+
* The MIT License (MIT)
|
12227
|
+
*
|
12228
|
+
* Copyright (c) 2016-2017 The Regents of the University of California
|
12229
|
+
* Author: Jim Robinson
|
12230
|
+
*
|
12231
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12232
|
+
* of this software and associated documentation files (the "Software"), to deal
|
12233
|
+
* in the Software without restriction, including without limitation the rights
|
12234
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
12235
|
+
* copies of the Software, and to permit persons to whom the Software is
|
12236
|
+
* furnished to do so, subject to the following conditions:
|
12237
|
+
*
|
12238
|
+
* The above copyright notice and this permission notice shall be included in
|
12239
|
+
* all copies or substantial portions of the Software.
|
12240
|
+
*
|
12241
|
+
*
|
12242
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
12243
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
12244
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
12245
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
12246
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
12247
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
12248
|
+
* THE SOFTWARE.
|
12249
|
+
*/
|
12250
|
+
|
12251
|
+
/**
|
12252
|
+
* Created by jrobinso on 9/25/17.
|
12253
|
+
*/
|
12254
|
+
|
12255
|
+
var igv = (function (igv) {
|
12256
|
+
|
12257
|
+
|
12258
|
+
igv.FeatureUtils = {
|
12259
|
+
|
12260
|
+
packFeatures: function (features, maxRows, sorted) {
|
12261
|
+
|
12262
|
+
var start;
|
12263
|
+
var end;
|
12264
|
+
|
12265
|
+
if (!features) return;
|
12266
|
+
|
12267
|
+
maxRows = maxRows || 10000;
|
12268
|
+
|
12269
|
+
if(!sorted) {
|
12270
|
+
features.sort(function (a, b) {
|
12271
|
+
return a.start - b.start;
|
12272
|
+
});
|
12273
|
+
}
|
12274
|
+
|
12275
|
+
|
12276
|
+
|
12277
|
+
if (features.length === 0) {
|
12278
|
+
return [];
|
12279
|
+
|
12280
|
+
} else {
|
12281
|
+
|
12282
|
+
var bucketList = [],
|
12283
|
+
allocatedCount = 0,
|
12284
|
+
lastAllocatedCount = 0,
|
12285
|
+
nextStart,
|
12286
|
+
row,
|
12287
|
+
index,
|
12288
|
+
bucket,
|
12289
|
+
feature,
|
12290
|
+
gap = 2,
|
12291
|
+
packedRows = [],
|
12292
|
+
bucketStart;
|
12293
|
+
|
12294
|
+
start = features[0].start;
|
12295
|
+
end = features[features.length - 1].start;
|
12296
|
+
|
12297
|
+
bucketStart = Math.max(start, features[0].start);
|
12298
|
+
nextStart = bucketStart;
|
12299
|
+
|
12300
|
+
features.forEach(function (alignment) {
|
12301
|
+
|
12302
|
+
var buckListIndex = Math.max(0, alignment.start - bucketStart);
|
12303
|
+
if (bucketList[buckListIndex] === undefined) {
|
12304
|
+
bucketList[buckListIndex] = [];
|
12305
|
+
}
|
12306
|
+
bucketList[buckListIndex].push(alignment);
|
12307
|
+
});
|
12308
|
+
|
12309
|
+
|
12310
|
+
row = 0;
|
12311
|
+
|
12312
|
+
while (allocatedCount < features.length && packedRows.length < maxRows) {
|
12313
|
+
|
12314
|
+
|
12315
|
+
while (nextStart <= end) {
|
12316
|
+
|
12317
|
+
bucket = undefined;
|
12318
|
+
|
12319
|
+
while (!bucket && nextStart <= end) {
|
12320
|
+
|
12321
|
+
index = nextStart - bucketStart;
|
12322
|
+
if (bucketList[index] === undefined) {
|
12323
|
+
++nextStart; // No buckets at this index
|
12324
|
+
} else {
|
12325
|
+
bucket = bucketList[index];
|
12326
|
+
}
|
12327
|
+
|
12328
|
+
} // while (bucket)
|
12329
|
+
|
12330
|
+
if (!bucket) {
|
12331
|
+
break;
|
12332
|
+
}
|
12333
|
+
feature = bucket.pop();
|
12334
|
+
if (0 === bucket.length) {
|
12335
|
+
bucketList[index] = undefined;
|
12336
|
+
}
|
12337
|
+
|
12338
|
+
feature.row = row;
|
12339
|
+
|
12340
|
+
nextStart = feature.end + gap;
|
12341
|
+
++allocatedCount;
|
12342
|
+
|
12343
|
+
} // while (nextStart)
|
12344
|
+
|
12345
|
+
row++;
|
12346
|
+
nextStart = bucketStart;
|
12347
|
+
|
12348
|
+
if (allocatedCount === lastAllocatedCount) break; // Protect from infinite loops
|
12349
|
+
|
12350
|
+
lastAllocatedCount = allocatedCount;
|
12351
|
+
|
12352
|
+
} // while (allocatedCount)
|
12353
|
+
|
12354
|
+
}
|
12355
|
+
}
|
12356
|
+
|
12357
|
+
}
|
12358
|
+
|
12359
|
+
|
12360
|
+
return igv;
|
12361
|
+
})(igv || {});
|
12362
|
+
|
12208
12363
|
/*
|
12209
12364
|
* The MIT License (MIT)
|
12210
12365
|
*
|
@@ -13208,6 +13363,69 @@ var igv = (function (igv) {
|
|
13208
13363
|
return igv;
|
13209
13364
|
})(igv || {});
|
13210
13365
|
|
13366
|
+
/*
|
13367
|
+
* The MIT License (MIT)
|
13368
|
+
*
|
13369
|
+
* Copyright (c) 2016-2017 The Regents of the University of California
|
13370
|
+
* Author: Jim Robinson
|
13371
|
+
*
|
13372
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
13373
|
+
* of this software and associated documentation files (the "Software"), to deal
|
13374
|
+
* in the Software without restriction, including without limitation the rights
|
13375
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13376
|
+
* copies of the Software, and to permit persons to whom the Software is
|
13377
|
+
* furnished to do so, subject to the following conditions:
|
13378
|
+
*
|
13379
|
+
* The above copyright notice and this permission notice shall be included in
|
13380
|
+
* all copies or substantial portions of the Software.
|
13381
|
+
*
|
13382
|
+
*
|
13383
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13384
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
13385
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
13386
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
13387
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
13388
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
13389
|
+
* THE SOFTWARE.
|
13390
|
+
*/
|
13391
|
+
|
13392
|
+
var igv = (function (igv) {
|
13393
|
+
|
13394
|
+
igv.UCSCServiceReader = function (config) {
|
13395
|
+
this.config = config;
|
13396
|
+
};
|
13397
|
+
|
13398
|
+
igv.UCSCServiceReader.prototype.readFeatures = function (chr, start, end) {
|
13399
|
+
var self = this,
|
13400
|
+
url = this.config.url + '&table=' + this.config.tableName + '&chr=' + chr + '&start=' + start + '&end=' + end;
|
13401
|
+
|
13402
|
+
return new Promise(function (fulfill, reject) {
|
13403
|
+
igv.xhr.loadJson(url, self.config)
|
13404
|
+
.then(function (data) {
|
13405
|
+
if (data) {
|
13406
|
+
data.forEach(function (json) {
|
13407
|
+
decodeJson(json);
|
13408
|
+
});
|
13409
|
+
fulfill(data);
|
13410
|
+
} else {
|
13411
|
+
fulfill(null);
|
13412
|
+
}
|
13413
|
+
})
|
13414
|
+
.catch(function (error) {
|
13415
|
+
reject(error);
|
13416
|
+
});
|
13417
|
+
});
|
13418
|
+
};
|
13419
|
+
|
13420
|
+
// TODO -- generalize
|
13421
|
+
function decodeJson(feature) {
|
13422
|
+
if(feature.start) feature.start = Number.parseInt(feature.start);
|
13423
|
+
if(feature.end) feature.end = Number.parseInt(feature.end);
|
13424
|
+
}
|
13425
|
+
|
13426
|
+
return igv;
|
13427
|
+
})(igv || {});
|
13428
|
+
|
13211
13429
|
/*
|
13212
13430
|
* The MIT License (MIT)
|
13213
13431
|
*
|
@@ -13916,7 +14134,7 @@ var igv = (function (igv) {
|
|
13916
14134
|
|
13917
14135
|
return new Promise(function (fulfill, reject) {
|
13918
14136
|
|
13919
|
-
|
14137
|
+
getChrAliasTable().then(function (chrAliasTable) {
|
13920
14138
|
|
13921
14139
|
var queryChr = chrAliasTable.hasOwnProperty(chr) ? chrAliasTable[chr] : chr,
|
13922
14140
|
readURL = self.url + "/reads/search";
|
@@ -13937,7 +14155,7 @@ var igv = (function (igv) {
|
|
13937
14155
|
|
13938
14156
|
}).catch(reject);
|
13939
14157
|
|
13940
|
-
function
|
14158
|
+
function getChrAliasTable() {
|
13941
14159
|
|
13942
14160
|
if (self.chrAliasTable) {
|
13943
14161
|
return Promise.resolve(self.chrAliasTable);
|
@@ -13983,7 +14201,7 @@ var igv = (function (igv) {
|
|
13983
14201
|
else {
|
13984
14202
|
|
13985
14203
|
// Try hardcoded constants -- workaround for non-compliant data at Google
|
13986
|
-
|
14204
|
+
populateChrAliasTable(self.chrAliasTable, self.config.datasetId);
|
13987
14205
|
|
13988
14206
|
fulfill(self.chrAliasTable);
|
13989
14207
|
}
|
@@ -14241,10 +14459,10 @@ var igv = (function (igv) {
|
|
14241
14459
|
/**
|
14242
14460
|
* Hardcoded hack to work around some non-compliant google datasets
|
14243
14461
|
*
|
14244
|
-
* @param
|
14462
|
+
* @param chrAliasTable
|
14245
14463
|
* @param datasetId
|
14246
14464
|
*/
|
14247
|
-
function
|
14465
|
+
function populateChrAliasTable(chrAliasTable, datasetId) {
|
14248
14466
|
var i;
|
14249
14467
|
if ("461916304629" === datasetId || "337315832689" === datasetId) {
|
14250
14468
|
for (i = 1; i < 23; i++) {
|
@@ -14638,7 +14856,7 @@ var igv = (function (igv) {
|
|
14638
14856
|
|
14639
14857
|
self.readHeader().then(function (header) {
|
14640
14858
|
|
14641
|
-
|
14859
|
+
getChrAliasTable().then(function (chrAliasTable) {
|
14642
14860
|
|
14643
14861
|
var queryChr = chrAliasTable.hasOwnProperty(chr) ? chrAliasTable[chr] : chr,
|
14644
14862
|
readURL = self.url + "/variants/search";
|
@@ -14669,7 +14887,7 @@ var igv = (function (igv) {
|
|
14669
14887
|
});
|
14670
14888
|
|
14671
14889
|
|
14672
|
-
function
|
14890
|
+
function getChrAliasTable() {
|
14673
14891
|
|
14674
14892
|
return new Promise(function (fulfill, reject) {
|
14675
14893
|
|
@@ -23224,12 +23442,12 @@ var igv = (function (igv) {
|
|
23224
23442
|
if (undefined === igv.browser || undefined === igv.browser.formats) {
|
23225
23443
|
return undefined;
|
23226
23444
|
} else {
|
23227
|
-
return igv.browser.formats[
|
23445
|
+
return igv.browser.formats[name];
|
23228
23446
|
}
|
23229
23447
|
|
23230
23448
|
};
|
23231
23449
|
|
23232
|
-
igv.createTrackWithConfiguration = function(conf) {
|
23450
|
+
igv.createTrackWithConfiguration = function (conf) {
|
23233
23451
|
|
23234
23452
|
var type = (undefined === conf.type) ? 'unknown_type' : conf.type.toLowerCase();
|
23235
23453
|
|
@@ -23239,6 +23457,7 @@ var igv = (function (igv) {
|
|
23239
23457
|
break;
|
23240
23458
|
|
23241
23459
|
case "annotation":
|
23460
|
+
case "snp":
|
23242
23461
|
case "genes":
|
23243
23462
|
case "fusionjuncspan":
|
23244
23463
|
return new igv.FeatureTrack(conf);
|
@@ -23279,7 +23498,7 @@ var igv = (function (igv) {
|
|
23279
23498
|
|
23280
23499
|
};
|
23281
23500
|
|
23282
|
-
igv.inferTrackTypes = function(config) {
|
23501
|
+
igv.inferTrackTypes = function (config) {
|
23283
23502
|
|
23284
23503
|
function translateDeprecatedTypes(config) {
|
23285
23504
|
|
@@ -23437,7 +23656,7 @@ var igv = (function (igv) {
|
|
23437
23656
|
|
23438
23657
|
track.height = config.height || ('wig' === config.type ? 50 : 100);
|
23439
23658
|
|
23440
|
-
if(config.autoHeight === undefined) config.autoHeight = config.autoheight; // Some case confusion in the initial releasae
|
23659
|
+
if (config.autoHeight === undefined) config.autoHeight = config.autoheight; // Some case confusion in the initial releasae
|
23441
23660
|
|
23442
23661
|
track.autoHeight = config.autoHeight === undefined ? (config.height === undefined) : config.autoHeight;
|
23443
23662
|
track.minHeight = config.minHeight || Math.min(50, track.height);
|
@@ -23447,7 +23666,7 @@ var igv = (function (igv) {
|
|
23447
23666
|
track.visibilityWindow = config.visibilityWindow;
|
23448
23667
|
}
|
23449
23668
|
|
23450
|
-
if(track.type === undefined) {
|
23669
|
+
if (track.type === undefined) {
|
23451
23670
|
track.type = config.type;
|
23452
23671
|
}
|
23453
23672
|
|
@@ -23466,7 +23685,7 @@ var igv = (function (igv) {
|
|
23466
23685
|
}
|
23467
23686
|
};
|
23468
23687
|
|
23469
|
-
igv.inferIndexPath = function(url, extension) {
|
23688
|
+
igv.inferIndexPath = function (url, extension) {
|
23470
23689
|
|
23471
23690
|
var path, idx;
|
23472
23691
|
|
@@ -23474,7 +23693,7 @@ var igv = (function (igv) {
|
|
23474
23693
|
throw new Error("Cannot infer an index path for a local File. Please select explicitly")
|
23475
23694
|
}
|
23476
23695
|
|
23477
|
-
if(url.includes("?")) {
|
23696
|
+
if (url.includes("?")) {
|
23478
23697
|
idx = url.indexOf("?");
|
23479
23698
|
return url.substring(0, idx) + "." + extension + url.substring(idx);
|
23480
23699
|
} else {
|
@@ -23563,13 +23782,13 @@ var igv = (function (igv) {
|
|
23563
23782
|
menuItems;
|
23564
23783
|
|
23565
23784
|
config =
|
23566
|
-
|
23567
|
-
|
23568
|
-
|
23569
|
-
|
23570
|
-
|
23571
|
-
|
23572
|
-
|
23785
|
+
{
|
23786
|
+
popover: popover,
|
23787
|
+
viewport: viewport,
|
23788
|
+
genomicLocation: genomicLocation,
|
23789
|
+
x: xOffset,
|
23790
|
+
y: yOffset
|
23791
|
+
};
|
23573
23792
|
|
23574
23793
|
menuItems = [];
|
23575
23794
|
if (viewport.trackView.track.popupMenuItemList) {
|
@@ -23633,7 +23852,7 @@ var igv = (function (igv) {
|
|
23633
23852
|
|
23634
23853
|
all = [];
|
23635
23854
|
if (trackView.track.menuItemList) {
|
23636
|
-
all = menuItems.concat(
|
23855
|
+
all = menuItems.concat(igv.trackMenuItemListHelper(trackView.track.menuItemList(popover)));
|
23637
23856
|
}
|
23638
23857
|
|
23639
23858
|
if (trackView.track.removable !== false) {
|
@@ -23653,13 +23872,13 @@ var igv = (function (igv) {
|
|
23653
23872
|
return all;
|
23654
23873
|
};
|
23655
23874
|
|
23656
|
-
igv.trackMenuItemListHelper = function(itemList) {
|
23875
|
+
igv.trackMenuItemListHelper = function (itemList) {
|
23657
23876
|
|
23658
23877
|
var list = [];
|
23659
23878
|
|
23660
23879
|
if (_.size(itemList) > 0) {
|
23661
23880
|
|
23662
|
-
list = _.map(itemList, function(item, i) {
|
23881
|
+
list = _.map(itemList, function (item, i) {
|
23663
23882
|
var $e;
|
23664
23883
|
|
23665
23884
|
if (item.name) {
|
@@ -23677,7 +23896,7 @@ var igv = (function (igv) {
|
|
23677
23896
|
$e.click(item.click);
|
23678
23897
|
}
|
23679
23898
|
|
23680
|
-
return {
|
23899
|
+
return {object: $e, init: (item.init || undefined)};
|
23681
23900
|
});
|
23682
23901
|
}
|
23683
23902
|
|
@@ -23708,7 +23927,7 @@ var igv = (function (igv) {
|
|
23708
23927
|
$e.text(menuItemLabel);
|
23709
23928
|
|
23710
23929
|
|
23711
|
-
clickHandler = function(){
|
23930
|
+
clickHandler = function () {
|
23712
23931
|
var $element = $(trackView.trackDiv);
|
23713
23932
|
igv.dialog.configure(dialogLabelHandler, dialogInputValue, dialogClickHandler, undefined, undefined);
|
23714
23933
|
igv.dialog.show($element);
|
@@ -23717,7 +23936,7 @@ var igv = (function (igv) {
|
|
23717
23936
|
|
23718
23937
|
$e.click(clickHandler);
|
23719
23938
|
|
23720
|
-
return {
|
23939
|
+
return {object: $e, init: undefined};
|
23721
23940
|
};
|
23722
23941
|
|
23723
23942
|
igv.dataRangeMenuItem = function (popover, trackView) {
|
@@ -23736,7 +23955,7 @@ var igv = (function (igv) {
|
|
23736
23955
|
|
23737
23956
|
$e.click(clickHandler);
|
23738
23957
|
|
23739
|
-
return {
|
23958
|
+
return {object: $e, init: undefined};
|
23740
23959
|
};
|
23741
23960
|
|
23742
23961
|
igv.colorPickerMenuItem = function (popover, trackView) {
|
@@ -23758,13 +23977,13 @@ var igv = (function (igv) {
|
|
23758
23977
|
defaultColor = trackView.track.config.color || igv.browser.constants.defaultColor;
|
23759
23978
|
|
23760
23979
|
offset =
|
23761
|
-
|
23762
|
-
|
23763
|
-
|
23764
|
-
|
23980
|
+
{
|
23981
|
+
left: ($(trackView.trackDiv).offset().left + $(trackView.trackDiv).width()) - igv.colorPicker.$container.width(),
|
23982
|
+
top: $(trackView.trackDiv).offset().top
|
23983
|
+
};
|
23765
23984
|
|
23766
23985
|
colorUpdateHandler = function (color) {
|
23767
|
-
trackView.setColor(
|
23986
|
+
trackView.setColor(color)
|
23768
23987
|
};
|
23769
23988
|
|
23770
23989
|
igv.colorPicker.configure(trackView, color, defaultColor, offset, colorUpdateHandler);
|
@@ -23776,7 +23995,7 @@ var igv = (function (igv) {
|
|
23776
23995
|
|
23777
23996
|
$e.click(clickHandler);
|
23778
23997
|
|
23779
|
-
return {
|
23998
|
+
return {object: $e, init: undefined};
|
23780
23999
|
|
23781
24000
|
};
|
23782
24001
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: igv-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.9.
|
4
|
+
version: 1.0.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Van Etten, PhD
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|