From 19584bbe62e4aff9cf6576e728852d3a67233952 Mon Sep 17 00:00:00 2001 From: Pujan Joshi Date: Wed, 1 Apr 2015 12:53:22 -0400 Subject: [PATCH] download fixed --- FileSaver.min.js | 7 + VQI_GenomeBrowser.js | 600 ++++++++++++++++++++++--------------------- 2 files changed, 321 insertions(+), 286 deletions(-) create mode 100644 FileSaver.min.js diff --git a/FileSaver.min.js b/FileSaver.min.js new file mode 100644 index 0000000..b1cb31d --- /dev/null +++ b/FileSaver.min.js @@ -0,0 +1,7 @@ +/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ +var saveAs=saveAs||"undefined"!==typeof navigator&&navigator.msSaveOrOpenBlob&&navigator.msSaveOrOpenBlob.bind(navigator)||function(a){"use strict";if("undefined"===typeof navigator||!/MSIE [1-9]\./.test(navigator.userAgent)){var k=a.document,n=k.createElementNS("http://www.w3.org/1999/xhtml","a"),w="download"in n,x=function(c){var e=k.createEvent("MouseEvents");e.initMouseEvent("click",!0,!1,a,0,0,0,0,0,!1,!1,!1,!1,0,null);c.dispatchEvent(e)},q=a.webkitRequestFileSystem,u=a.requestFileSystem||q||a.mozRequestFileSystem, +y=function(c){(a.setImmediate||a.setTimeout)(function(){throw c;},0)},r=0,s=function(c){var e=function(){"string"===typeof c?(a.URL||a.webkitURL||a).revokeObjectURL(c):c.remove()};a.chrome?e():setTimeout(e,500)},t=function(c,a,d){a=[].concat(a);for(var b=a.length;b--;){var l=c["on"+a[b]];if("function"===typeof l)try{l.call(c,d||c)}catch(f){y(f)}}},m=function(c,e){var d=this,b=c.type,l=!1,f,p,k=function(){t(d,["writestart","progress","write","writeend"])},g=function(){if(l||!f)f=(a.URL||a.webkitURL|| +a).createObjectURL(c);p?p.location.href=f:void 0==a.open(f,"_blank")&&"undefined"!==typeof safari&&(a.location.href=f);d.readyState=d.DONE;k();s(f)},h=function(a){return function(){if(d.readyState!==d.DONE)return a.apply(this,arguments)}},m={create:!0,exclusive:!1},v;d.readyState=d.INIT;e||(e="download");if(w)f=(a.URL||a.webkitURL||a).createObjectURL(c),n.href=f,n.download=e,x(n),d.readyState=d.DONE,k(),s(f);else{a.chrome&&b&&"application/octet-stream"!==b&&(v=c.slice||c.webkitSlice,c=v.call(c,0, +c.size,"application/octet-stream"),l=!0);q&&"download"!==e&&(e+=".download");if("application/octet-stream"===b||q)p=a;u?(r+=c.size,u(a.TEMPORARY,r,h(function(a){a.root.getDirectory("saved",m,h(function(a){var b=function(){a.getFile(e,m,h(function(a){a.createWriter(h(function(b){b.onwriteend=function(b){p.location.href=a.toURL();d.readyState=d.DONE;t(d,"writeend",b);s(a)};b.onerror=function(){var a=b.error;a.code!==a.ABORT_ERR&&g()};["writestart","progress","write","abort"].forEach(function(a){b["on"+ +a]=d["on"+a]});b.write(c);d.abort=function(){b.abort();d.readyState=d.DONE};d.readyState=d.WRITING}),g)}),g)};a.getFile(e,{create:!1},h(function(a){a.remove();b()}),h(function(a){a.code===a.NOT_FOUND_ERR?b():g()}))}),g)}),g)):g()}},b=m.prototype;b.abort=function(){this.readyState=this.DONE;t(this,"abort")};b.readyState=b.INIT=0;b.WRITING=1;b.DONE=2;b.error=b.onwritestart=b.onprogress=b.onwrite=b.onabort=b.onerror=b.onwriteend=null;return function(a,b){return new m(a,b)}}}("undefined"!==typeof self&& +self||"undefined"!==typeof window&&window||this.content);"undefined"!==typeof module&&null!==module?module.exports=saveAs:"undefined"!==typeof define&&null!==define&&null!=define.amd&&define([],function(){return saveAs}); \ No newline at end of file diff --git a/VQI_GenomeBrowser.js b/VQI_GenomeBrowser.js index 82f64d8..812a767 100755 --- a/VQI_GenomeBrowser.js +++ b/VQI_GenomeBrowser.js @@ -7,7 +7,7 @@ function VQI_GenomeBrowser(id) { var margin = 50; - var panExtent = [0,width]; + var panExtent = [0, width]; var trackList = []; @@ -56,13 +56,13 @@ function VQI_GenomeBrowser(id) { graph(chrom, chrom_start, chrom_end); }; /*this.makeNavigationForm = function () { - var navigateBox = ""; - var navigateButton = ""; - var form = ""; - $("#" + divId).append(form); - $("#" + divId + " #navigatebutton").on("click", navigateToRegion.bind(this)); - }; - this.makeNavigationForm();*/ + var navigateBox = ""; + var navigateButton = ""; + var form = ""; + $("#" + divId).append(form); + $("#" + divId + " #navigatebutton").on("click", navigateToRegion.bind(this)); + }; + this.makeNavigationForm();*/ var browseToGene = function () { var geneName = $("#" + divId + " #geneName").val(); @@ -175,13 +175,13 @@ function VQI_GenomeBrowser(id) { var removeTrack = function () { var removedTrackName = $("#" + divId + " #removeTrack").val(); - if(removedTrackName != null) + if (removedTrackName != null) { for (var i in trackList) { var thisTrack = trackList[i]; if (thisTrack['name'] === removedTrackName) { svg.select("g." + trackList[i]['name']).remove(); - trackList.splice(i,1); + trackList.splice(i, 1); break; } } @@ -198,7 +198,7 @@ function VQI_GenomeBrowser(id) { var value = thisTrack['name']; removeTrackSelect += ""; } - removeTrackSelect += ""; + removeTrackSelect += ""; var removeButton = ""; var form = "
" + removeTrackSelect + removeButton + "
"; @@ -207,14 +207,16 @@ function VQI_GenomeBrowser(id) { }; this.makeFormForRemoveTrack(); - var exportTrack = function(){ + var exportTrack = function () { +// alert("here"); - var outputFile = window.prompt("What do you want to name your output file (Note: This won't have any effect on Safari)") || 'export'; - outputFile = outputFile.replace('.csv','') + '.txt' +// var outputFile = window.prompt("What do you want to name your output file (Note: This won't have any effect on Safari)") || 'export'; +// outputFile = outputFile.replace('.csv','') + '.txt' + var track_name = $("#" + divId + " #exportTrack").val(); + var track = this.getTrackByName(track_name); +// console.log(track); - var track = this.getTrackByName($("#" + divId + " #exportTrack").val()); - - exportTrackToText(track, outputFile); + exportTrackToText(track, track_name); } this.makeFormForExportTrack = function () { @@ -225,9 +227,9 @@ function VQI_GenomeBrowser(id) { var value = thisTrack['name']; exportTrackSelect += ""; } - exportTrackSelect += ""; + exportTrackSelect += ""; - var exportButton = "Export"; + var exportButton = ""; var form = "
" + exportTrackSelect + exportButton + "
"; $("#" + divId).append(form); $("#" + divId + " #exporttrackbutton").on("click", exportTrack.bind(this)); @@ -266,38 +268,38 @@ function VQI_GenomeBrowser(id) { var zoom = d3.behavior.zoom(); var clipPath = graphRegion.append("clipPath") - .attr("id", "clip") - .append("rect") - .attr("width", width) - .attr("height", height) - .attr("y", -margin); //to make this work with all the transformations. + .attr("id", "clip") + .append("rect") + .attr("width", width) + .attr("height", height) + .attr("y", -margin); //to make this work with all the transformations. //set up tool tips /*var tip = d3.tip() - .attr('class', 'd3-tip') - .offset([-20, 0]) - .html(function (d) { -// if(/) -// if - var strand = ""; - if (d.length > indexArray.strand) { - strand = " (" + d[indexArray.strand] + ")"; - } - return "" + d[indexArray.name] + strand + "" - + "(" + d[indexArray.chr] + " : " + d[indexArray.start] + " - " + d[indexArray.end] + ")" + ""; - }); - - svg.call(tip); - - d3.selectAll(".d3-tip").style({ - "line-height": "1", - "font-weight": "bold", - "padding": "12px", - "background": "rgba(0, 0, 0, 0.8)", - "color": "#fff", - "border-radius": "2px" - });*/ + .attr('class', 'd3-tip') + .offset([-20, 0]) + .html(function (d) { + // if(/) + // if + var strand = ""; + if (d.length > indexArray.strand) { + strand = " (" + d[indexArray.strand] + ")"; + } + return "" + d[indexArray.name] + strand + "" + + "(" + d[indexArray.chr] + " : " + d[indexArray.start] + " - " + d[indexArray.end] + ")" + ""; + }); + + svg.call(tip); + + d3.selectAll(".d3-tip").style({ + "line-height": "1", + "font-weight": "bold", + "padding": "12px", + "background": "rgba(0, 0, 0, 0.8)", + "color": "#fff", + "border-radius": "2px" + });*/ var zoomed = function () { @@ -306,7 +308,7 @@ function VQI_GenomeBrowser(id) { //svg.selectAll("g.scalable").attr("transform", "translate(" + d3.event.translate[0] + ",0)scale(" + d3.event.scale + ",1)"); //fast, scales as a group, but doesn't draw at large zooms - svg.selectAll("g.scalable").attr("transform", "translate(" + zoom.translate()[0]+",0)scale(" + zoom.scale() + ",1)"); + svg.selectAll("g.scalable").attr("transform", "translate(" + zoom.translate()[0] + ",0)scale(" + zoom.scale() + ",1)"); //slow, scales elements individually, draws at large zooms //svg.selectAll("g.scalable").selectAll("*").attr("transform", "translate(" + zoom.translate()[0]+",0)scale(" + zoom.scale() + ",1)"); @@ -326,17 +328,17 @@ function VQI_GenomeBrowser(id) { $("#" + divId + " #navigate").val(chrom_curr + ":" + Math.round(xScale.domain()[0]) + "-" + Math.round(xScale.domain()[1])); }; - var panLimit = function() { + var panLimit = function () { - var divisor = (width) / ((xScale.domain()[1]-xScale.domain()[0])*zoom.scale()); - minX = -(((xScale.domain()[0]-xScale.domain()[1])*zoom.scale())+(panExtent[1]-(panExtent[1]-(width/divisor)))), - maxX = -(((xScale.domain()[0]-xScale.domain()[1]))+(panExtent[1]-panExtent[0]))*divisor*zoom.scale(); + var divisor = (width) / ((xScale.domain()[1] - xScale.domain()[0]) * zoom.scale()); + minX = -(((xScale.domain()[0] - xScale.domain()[1]) * zoom.scale()) + (panExtent[1] - (panExtent[1] - (width / divisor)))), + maxX = -(((xScale.domain()[0] - xScale.domain()[1])) + (panExtent[1] - panExtent[0])) * divisor * zoom.scale(); - tx = xScale.domain()[0] < panExtent[0] ? - minX : - xScale.domain()[1] > panExtent[1] ? - maxX : - zoom.translate()[0]; + tx = xScale.domain()[0] < panExtent[0] ? + minX : + xScale.domain()[1] > panExtent[1] ? + maxX : + zoom.translate()[0]; return tx; } @@ -345,50 +347,50 @@ function VQI_GenomeBrowser(id) { graph(chrom, chrom_start, chrom_end); }; - var setBounds = function(min, max){ + var setBounds = function (min, max) { var xMin = Number(min) > panExtent[0] ? Number(min) : panExtent[0]; var xMax = Number(max) < panExtent[1] ? Number(max) : panExtent[1]; xScale.domain([panExtent[0], panExtent[1]]) .range([0, width]); - zoom.scaleExtent([1,(panExtent[1]-panExtent[0])/50]); + zoom.scaleExtent([1, (panExtent[1] - panExtent[0]) / 50]); zoom.x(xScale).on("zoom", zoomed); svg.call(zoom); - var scale = (panExtent[1]-panExtent[0])/(xMax - xMin); + var scale = (panExtent[1] - panExtent[0]) / (xMax - xMin); zoom.scale(scale); //translates scale with regards to the middle of xMin and xMax - var divisor = (width) / ((xScale.domain()[1]-xScale.domain()[0])*scale); - var minX = -(((xScale.domain()[0]-xScale.domain()[1])*scale)+(panExtent[1]-(panExtent[1]-(width/divisor)))); - var maxX = -(((xScale.domain()[0]-xScale.domain()[1]))+(panExtent[1]-panExtent[0]))*divisor*scale; + var divisor = (width) / ((xScale.domain()[1] - xScale.domain()[0]) * scale); + var minX = -(((xScale.domain()[0] - xScale.domain()[1]) * scale) + (panExtent[1] - (panExtent[1] - (width / divisor)))); + var maxX = -(((xScale.domain()[0] - xScale.domain()[1])) + (panExtent[1] - panExtent[0])) * divisor * scale; var midScale = d3.scale.linear() - .domain([panExtent[0] + (xMax - xMin) / 2, panExtent[1] - (xMax - xMin) / 2]) - .range([minX,maxX]); + .domain([panExtent[0] + (xMax - xMin) / 2, panExtent[1] - (xMax - xMin) / 2]) + .range([minX, maxX]); - var zoomWidth = midScale((xMax + xMin)/2); + var zoomWidth = midScale((xMax + xMin) / 2); - zoom.translate([zoomWidth,0]) - .scale(scale); + zoom.translate([zoomWidth, 0]) + .scale(scale); zoomed(); - // minNumber.property("value", xMin); - // maxNumber.property("value", xMax); + // minNumber.property("value", xMin); + // maxNumber.property("value", xMax); } - var setPanExtent = function(min, max){ + var setPanExtent = function (min, max) { var mins = []; var maxs = []; - if(min != null && max != null) + if (min != null && max != null) { mins.push(Number(min)); maxs.push(Number(max)); @@ -396,16 +398,16 @@ function VQI_GenomeBrowser(id) { for (var i in trackList) { mins.push(d3.min(trackList[i], function (d) { - return Number(d[indexArray.start]) + return Number(d[indexArray.start]) })); maxs.push(d3.max(trackList[i], function (d) { - return Number(d[indexArray.end]) + return Number(d[indexArray.end]) })); } min = d3.min(mins); max = d3.max(maxs); - + panExtent[0] = isNaN(min) ? 0 : min; panExtent[1] = isNaN(max) ? width : max; @@ -418,7 +420,7 @@ function VQI_GenomeBrowser(id) { var graph = function (chromosome, min, max) { //Only need to set bounds if current chromosome is already graphed - if(chromosome == chrom_curr) + if (chromosome == chrom_curr) { setBounds(min, max); return; @@ -431,10 +433,10 @@ function VQI_GenomeBrowser(id) { chrom_curr = chromosome; if (min == null || max == null) { - setBounds(panExtent[0],panExtent[1]); + setBounds(panExtent[0], panExtent[1]); } else { - setBounds(Number(min),Number(max)); + setBounds(Number(min), Number(max)); } for (var i in trackList) { @@ -455,11 +457,11 @@ function VQI_GenomeBrowser(id) { //check if min and max of whole graph needs to be readjusted var min = d3.min(data, function (d) { return Number(d[indexArray.start]) - }); + }); var max = d3.max(data, function (d) { return Number(d[indexArray.start]) - }); - if(min < panExtent[0] || max > panExtent[1]) + }); + if (min < panExtent[0] || max > panExtent[1]) { setPanExtent(min, max); graph(chrom_curr); @@ -473,11 +475,11 @@ function VQI_GenomeBrowser(id) { //name of track name = name || "track-" + (trackIndex + 1); - if(type == 'cpg'){ + if (type == 'cpg') { addCpgTrack(thisData, name); data['type'] = 'cpg'; - } - if(type == 'bed'){ + }else{ +// if (type == 'bed') { addBEDTrack(thisData, name); data['type'] = 'bed'; } @@ -487,57 +489,61 @@ function VQI_GenomeBrowser(id) { return data; } - var addCpgTrack = function(data, name){ + var addCpgTrack = function (data, name) { var bufferSpace = 20; var fHeight = 50; svg.attr("height", Number(svg.attr("height")) + fHeight + bufferSpace); var thisY = Number(svg.attr("height")) - 2 * margin - fHeight / 2; - if(graphRegion.select("g." + name).empty()) + if (graphRegion.select("g." + name).empty()) { graphRegion.append("g") - .attr("class", name) + .attr("class", name) } var trackGroup = graphRegion.select("g." + name) - .attr("transform", "translate(" + 0 + "," + thisY + ")"); + .attr("transform", "translate(" + 0 + "," + thisY + ")"); - if(trackGroup.select("text." + name).empty()) + if (trackGroup.select("text." + name).empty()) { trackGroup.append("text") - .attr("class", name) - .attr("x", 0) - .attr("y", -fHeight / 2 - bufferSpace/2) - .attr("font-family", "sans-serif") - .attr("font-size", "12px") - .attr("fill", "red") - .text(name); + .attr("class", name) + .attr("x", 0) + .attr("y", -fHeight / 2 - bufferSpace / 2) + .attr("font-family", "sans-serif") + .attr("font-size", "12px") + .attr("fill", "red") + .text(name); } //Just a line trackGroup.append("line") - .attr("x1", 0) - .attr("y1", 0) - .attr("x2", width) - .attr("y2", 0) - .style("stroke", "blue"); + .attr("x1", 0) + .attr("y1", 0) + .attr("x2", width) + .attr("y2", 0) + .style("stroke", "blue"); - if(trackGroup.select("g.scalable").empty()) + if (trackGroup.select("g.scalable").empty()) { trackGroup.append("g") - .attr("clip-path", "url(#clip)") - .append("g") - .attr("class", "scalable"); + .attr("clip-path", "url(#clip)") + .append("g") + .attr("class", "scalable"); } var trackScalableGroup = trackGroup.select("g.scalable"); trackScalableGroup.selectAll("rect") - .data(data, function (d) {return d;}) + .data(data, function (d) { + return d; + }) .exit() .remove(); trackScalableGroup.selectAll("rect") - .data(data, function (d) {return d;}) + .data(data, function (d) { + return d; + }) .enter() .append("rect"); @@ -569,17 +575,17 @@ function VQI_GenomeBrowser(id) { return offset;//height / 2 + margin + offset }); /*if(trackScalableGroup.select("rect").empty()) - { - trackScalableGroup.append("rect") - .style("fill-opacity", ".4") - .style("stroke", "red") - .style("fill", "red") - .style("vector-effect", "non-scaling-stroke") - .attr("height", 40) - .attr("width", fullXScale(2000000) - fullXScale(1000000)) - .attr("x", fullXScale(1000000)) - .attr("y", height / 2 + margin); - }*/ + { + trackScalableGroup.append("rect") + .style("fill-opacity", ".4") + .style("stroke", "red") + .style("fill", "red") + .style("vector-effect", "non-scaling-stroke") + .attr("height", 40) + .attr("width", fullXScale(2000000) - fullXScale(1000000)) + .attr("x", fullXScale(1000000)) + .attr("y", height / 2 + margin); + }*/ $(trackScalableGroup.selectAll('*')[0]).tipsy({ gravity: 'n', html: true, @@ -591,53 +597,59 @@ function VQI_GenomeBrowser(id) { }); } - var addBEDTrack = function(data, name){ + var addBEDTrack = function (data, name) { var bufferSpace = 20; var fHeight = 10; svg.attr("height", Number(svg.attr("height")) + fHeight + bufferSpace); var thisY = Number(svg.attr("height")) - 2 * margin - fHeight / 2; - if(graphRegion.select("g." + name).empty()) + if (graphRegion.select("g." + name).empty()) { graphRegion.append("g") - .attr("class", name) + .attr("class", name) } var trackGroup = graphRegion.select("g." + name) - .attr("transform", "translate(" + 0 + "," + thisY + ")"); + .attr("transform", "translate(" + 0 + "," + thisY + ")"); - if(trackGroup.select("text." + name).empty()) + if (trackGroup.select("text." + name).empty()) { trackGroup.append("text") - .attr("class", name) - .attr("x", 0) - .attr("y", -fHeight / 2 - bufferSpace / 2) - .attr("font-family", "sans-serif") - .attr("font-size", "12px") - .attr("fill", "red") - .text(name); - } - - if(trackGroup.select("g.scalable").empty()) + .attr("class", name) + .attr("x", 0) + .attr("y", -fHeight / 2 - bufferSpace / 2) + .attr("font-family", "sans-serif") + .attr("font-size", "12px") + .attr("fill", "red") + .text(name); + } + + if (trackGroup.select("g.scalable").empty()) { trackGroup.append("g") - .attr("clip-path", "url(#clip)") - .append("g") - .attr("class", "scalable"); + .attr("clip-path", "url(#clip)") + .append("g") + .attr("class", "scalable"); } var trackScalableGroup = trackGroup.select("g.scalable"); trackScalableGroup.selectAll("line") - .data(data, function (d) {return d;}) + .data(data, function (d) { + return d; + }) .exit() .remove(); trackScalableGroup.selectAll("line") - .data(data, function (d){return d;}) + .data(data, function (d) { + return d; + }) .enter() .append("line"); var tracks = trackScalableGroup.selectAll("line") - .data(data, function (d){return d;}) + .data(data, function (d) { + return d; + }) .attr("x1", function (d) { return fullXScale(d[indexArray.start]); }) @@ -656,38 +668,44 @@ function VQI_GenomeBrowser(id) { .attr("class", "scalable") - if(data[0].length >= indexArray.exonEnds) + if (data[0].length >= indexArray.exonEnds) { var exons = []; $.each(data, function (index, value) { - var exonStarts = value[indexArray.exonStarts].slice(1,value[indexArray.exonStarts].length - 2).split(","); - var exonEnds = value[indexArray.exonEnds].slice(1,value[indexArray.exonEnds].length - 2).split(","); + var exonStarts = value[indexArray.exonStarts].slice(1, value[indexArray.exonStarts].length - 2).split(","); + var exonEnds = value[indexArray.exonEnds].slice(1, value[indexArray.exonEnds].length - 2).split(","); - for(var i = 0; i < exonStarts.length; i++) + for (var i = 0; i < exonStarts.length; i++) { var exon = []; exon[indexArray.chr] = value[indexArray.chr]; - exon[indexArray.name] = value[indexArray.name] + " Exon " + (i+1) + "/" + exonStarts.length; + exon[indexArray.name] = value[indexArray.name] + " Exon " + (i + 1) + "/" + exonStarts.length; exon[indexArray.start] = parseInt(exonStarts[i]); exon[indexArray.end] = parseInt(exonEnds[i]); - exons.push(exon); + exons.push(exon); } }); console.log(exons[1]); trackScalableGroup.selectAll("rect") - .data(data, function (d) {return d;}) - .exit() - .remove(); + .data(data, function (d) { + return d; + }) + .exit() + .remove(); trackScalableGroup.selectAll("rect") - .data(exons, function (d) {return d;}) + .data(exons, function (d) { + return d; + }) .enter() .append("rect"); trackScalableGroup.selectAll("rect") - .data(exons, function (d) {return d;}) + .data(exons, function (d) { + return d; + }) .attr("x", function (d) { return fullXScale(d[indexArray.start]); }) @@ -717,7 +735,7 @@ function VQI_GenomeBrowser(id) { }); } - var addHeightTrack = function(data, name){ + var addHeightTrack = function (data, name) { var bufferSpace = 10; var fHeight = 100; var thisY = Number(svg.attr("height")) - margin + fHeight / 2 + bufferSpace; @@ -731,9 +749,9 @@ function VQI_GenomeBrowser(id) { var yMax = d3.max(data, function (d) { return isNaN(d[indexArray.score]) ? 0 : Number(d[indexArray.score]) }) + 1; - - yScale.domain([yMin,yMax]) - .range([thisY + fHeight/2, thisY - fHeight/2]); + + yScale.domain([yMin, yMax]) + .range([thisY + fHeight / 2, thisY - fHeight / 2]); var trackGroup = svg.select("g." + name); @@ -745,7 +763,7 @@ function VQI_GenomeBrowser(id) { var yAxisSelection = trackGroup.append("g") .call(yAxis) .attr("class", "axis " + name) - .attr("transform", "translate(" + margin + "," + 0 + ")"); + .attr("transform", "translate(" + margin + "," + 0 + ")"); d3.selectAll(".axis path, .axis line").style({ "fill": "none", @@ -758,66 +776,82 @@ function VQI_GenomeBrowser(id) { var trackScalableGroup = trackGroup.select("g.scalable"); - if(trackScalableGroup.select("g.height").empty()) + if (trackScalableGroup.select("g.height").empty()) { trackScalableGroup.append("g") - .attr("class", "height") + .attr("class", "height") } var trackHeightGroup = svg.select("g.height"); - var lines = data.filter(function (d){return d[indexArray.score] == "";}); - var rects = data.filter(function (d){return !isNaN(d[indexArray.score]) && d[indexArray.score] != "";}); + var lines = data.filter(function (d) { + return d[indexArray.score] == ""; + }); + var rects = data.filter(function (d) { + return !isNaN(d[indexArray.score]) && d[indexArray.score] != ""; + }); trackHeightGroup.selectAll("rect") - .data(rects, function (d) {return d;}) + .data(rects, function (d) { + return d; + }) .exit() .remove(); trackHeightGroup.selectAll("rect") - .data(rects, function(d){return d;}) - .enter() - .append("rect"); + .data(rects, function (d) { + return d; + }) + .enter() + .append("rect"); trackHeightGroup.selectAll("rect") - .data(rects, function(d){return d;}) - .attr("x", function (d) { - return fullXScale(Number(d[indexArray.start])); - }) - .attr("y", function (d) { - return d < 0 ? yScale(0) : yScale(d[indexArray.score]); - }) - .attr("height", function (d) { - return Math.abs(yScale(d[indexArray.score]) - yScale(0)); - }) - .attr("width", function (d) { - return fullXScale(Number(d[indexArray.end])) - fullXScale(Number(d[indexArray.start])); - }) - .style("fill-opacity", ".8") - .style("stroke", "gray") - .style("fill", "gray") + .data(rects, function (d) { + return d; + }) + .attr("x", function (d) { + return fullXScale(Number(d[indexArray.start])); + }) + .attr("y", function (d) { + return d < 0 ? yScale(0) : yScale(d[indexArray.score]); + }) + .attr("height", function (d) { + return Math.abs(yScale(d[indexArray.score]) - yScale(0)); + }) + .attr("width", function (d) { + return fullXScale(Number(d[indexArray.end])) - fullXScale(Number(d[indexArray.start])); + }) + .style("fill-opacity", ".8") + .style("stroke", "gray") + .style("fill", "gray") trackHeightGroup.selectAll("line") - .data(lines, function (d) {return d;}) + .data(lines, function (d) { + return d; + }) .exit() .remove(); trackHeightGroup.selectAll("line") - .data(lines, function(d){return d;}) - .enter() - .append("line"); + .data(lines, function (d) { + return d; + }) + .enter() + .append("line"); trackHeightGroup.selectAll("line") - .data(lines, function(d){return d;}) - .attr("x1", function (d) { - return fullXScale(d[indexArray.start]); - }) - .attr("y1",yScale(0)) - .attr("x2", function (d) { - return fullXScale(d[indexArray.end]); - }) - .attr("y2", yScale(0)) - .style("stroke", "black") - .style("stroke-width", "2px") + .data(lines, function (d) { + return d; + }) + .attr("x1", function (d) { + return fullXScale(d[indexArray.start]); + }) + .attr("y1", yScale(0)) + .attr("x2", function (d) { + return fullXScale(d[indexArray.end]); + }) + .attr("y2", yScale(0)) + .style("stroke", "black") + .style("stroke-width", "2px") } this.addTrack = function (data, name, type) { @@ -845,82 +879,82 @@ function VQI_GenomeBrowser(id) { } /*var submitFile = function () { - genomeData = []; - chromosomes = []; - var file_dir = "./saved-data/"; - file_dir = "../../../saved-data/"; - var cpg = file_dir + "./CpG_site_hg19.txt"; - var shoer = file_dir + "./shoer_hg19.txt"; - var shelve = file_dir + "./shelve_hg19.txt"; - - //Will read the 3 files and place all data into genomeData - //as objects with attributes 'chromosome', 'start', 'end', 'type' - - $.get(cpg, function (data) { - var cpgData = data.trim().split("\n"); - $.each(cpgData, function (index, value) { - cpgData[index] = cpgData[index].trim().split("\t").map(function (item) { - return isNaN(Number(item)) ? item : Number(item); - }); - }); - - //get all unique chromosomes - var currentChromosome = ""; - $.each(cpgData, function (index, value) { - if (value[0] != currentChromosome) - { - chromosomes.push(value[0]); - currentChromosome = value[0]; - } - }); - - - cpgData = cpgData.map(function (data) { -// return {"chromosome": data[0], "start": data[1], "end": data[2], "type": "cpg"} - return [data[0], data[1], data[2], "cpg"]; - - }); - genomeData = genomeData.concat(cpgData); - }); - - $.get(shoer, function (data) { - var tempShoreData = data.trim().split("\n"); - $.each(tempShoreData, function (index, value) { - tempShoreData[index] = tempShoreData[index].trim().split("\t").map(function (item) { - return isNaN(Number(item)) ? item : Number(item); - }); - }); - var shoreData = []; - $.each(tempShoreData, function (index, value) { -// shoreData.push({"chromosome": value[0], "start": value[1], "end": value[2], "type": "shore"}); - shoreData.push([value[0], value[1], value[2], "shore"]); - shoreData.push([value[0], value[3], value[4], "shore"]); -// shoreData.push({"chromosome": value[0], "start": value[3], "end": value[4], "type": "shore"}); - }); - genomeData = genomeData.concat(shoreData); - }); - - $.get(shelve, function (data) { - var tempShelveData = data.trim().split("\n"); - $.each(tempShelveData, function (index, value) { - tempShelveData[index] = tempShelveData[index].trim().split("\t").map(function (item) { - return isNaN(Number(item)) ? item : Number(item); - }); - }); - var shelveData = []; - $.each(tempShelveData, function (index, value) { - shelveData.push([value[0], value[1], value[2], "shelve"]); -// shelveData.push({"chromosome": value[0], "start": value[1], "end": value[2], "type": "shelve"}); - shelveData.push([value[0], value[3], value[4], "shelve"]); -// shelveData.push({"chromosome": value[0], "start": value[3], "end": value[4], "type": "shelve"}); - }); - genomeData = genomeData.concat(shelveData); - graph(chromosomes[0]); - }); - } - - d3.select("#" + id + " #submit").on("click", submitFile.bind(this)); -// submitFile();*/ + genomeData = []; + chromosomes = []; + var file_dir = "./saved-data/"; + file_dir = "../../../saved-data/"; + var cpg = file_dir + "./CpG_site_hg19.txt"; + var shoer = file_dir + "./shoer_hg19.txt"; + var shelve = file_dir + "./shelve_hg19.txt"; + + //Will read the 3 files and place all data into genomeData + //as objects with attributes 'chromosome', 'start', 'end', 'type' + + $.get(cpg, function (data) { + var cpgData = data.trim().split("\n"); + $.each(cpgData, function (index, value) { + cpgData[index] = cpgData[index].trim().split("\t").map(function (item) { + return isNaN(Number(item)) ? item : Number(item); + }); + }); + + //get all unique chromosomes + var currentChromosome = ""; + $.each(cpgData, function (index, value) { + if (value[0] != currentChromosome) + { + chromosomes.push(value[0]); + currentChromosome = value[0]; + } + }); + + + cpgData = cpgData.map(function (data) { + // return {"chromosome": data[0], "start": data[1], "end": data[2], "type": "cpg"} + return [data[0], data[1], data[2], "cpg"]; + + }); + genomeData = genomeData.concat(cpgData); + }); + + $.get(shoer, function (data) { + var tempShoreData = data.trim().split("\n"); + $.each(tempShoreData, function (index, value) { + tempShoreData[index] = tempShoreData[index].trim().split("\t").map(function (item) { + return isNaN(Number(item)) ? item : Number(item); + }); + }); + var shoreData = []; + $.each(tempShoreData, function (index, value) { + // shoreData.push({"chromosome": value[0], "start": value[1], "end": value[2], "type": "shore"}); + shoreData.push([value[0], value[1], value[2], "shore"]); + shoreData.push([value[0], value[3], value[4], "shore"]); + // shoreData.push({"chromosome": value[0], "start": value[3], "end": value[4], "type": "shore"}); + }); + genomeData = genomeData.concat(shoreData); + }); + + $.get(shelve, function (data) { + var tempShelveData = data.trim().split("\n"); + $.each(tempShelveData, function (index, value) { + tempShelveData[index] = tempShelveData[index].trim().split("\t").map(function (item) { + return isNaN(Number(item)) ? item : Number(item); + }); + }); + var shelveData = []; + $.each(tempShelveData, function (index, value) { + shelveData.push([value[0], value[1], value[2], "shelve"]); + // shelveData.push({"chromosome": value[0], "start": value[1], "end": value[2], "type": "shelve"}); + shelveData.push([value[0], value[3], value[4], "shelve"]); + // shelveData.push({"chromosome": value[0], "start": value[3], "end": value[4], "type": "shelve"}); + }); + genomeData = genomeData.concat(shelveData); + graph(chromosomes[0]); + }); + } + + d3.select("#" + id + " #submit").on("click", submitFile.bind(this)); + // submitFile();*/ this.loadCPGFiles = function (cpg, shoer, shelf) { genomeData = []; @@ -1076,6 +1110,7 @@ function VQI_GenomeBrowser(id) { // }; this.getTrackByName = function (name) { +// console.log(name); for (var i in trackList) { var thisTrack = trackList[i]; if (thisTrack['name'] === name) { @@ -1106,36 +1141,29 @@ function VQI_GenomeBrowser(id) { }; - var exportTrackToText = function(data, filename) { + var exportTrackToText = function (data, filename) { temp = []; //console.log(data[1].join("\t")); - for(i in data) + for (i in data) { - if(data[i].constructor === Array) + if (data[i].constructor === Array) { var row = data[i].join("\t"); - temp.push(row); + temp.push(row); } } - var txt = temp.join("\n"); - - // Data URI - var txtData = 'data:text/csv;charset=utf-8,' + encodeURIComponent(txt); + var txt = temp.join("\r\n"); - //var encodedUri = encodeURI(csvContent); - window.open(txtData); - /*$("#" + divId + " #exporttrackbutton").attr("href", txtData); - $("#" + divId + " #exporttrackbutton").attr("download", filename);*/ - } + var blob = new Blob([txt], {type: "text/csv;charset=utf-8"}); + saveAs(blob, filename + ".txt"); -// this.makeFormForColocalization(); -} -VQI_GenomeBrowser.prototype = new VQI_Publisher(); + } +} \ No newline at end of file