Mercurial > repos > immport-devteam > cs_overview
diff js/csOverview.js @ 2:a64ece32a01a draft default tip
"planemo upload for repository https://github.com/ImmPortDB/immport-galaxy-tools/tree/master/flowtools/cs_overview commit a46097db0b6056e1125237393eb6974cfd51eb41"
author | azomics |
---|---|
date | Tue, 28 Jul 2020 08:32:36 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/js/csOverview.js Tue Jul 28 08:32:36 2020 -0400 @@ -0,0 +1,250 @@ +// Copyright (c) 2016 Northrop Grumman. +// All rights reserved. + +var url = "./csOverview.tsv", + boxplotUrl = "./csBoxplotData.json", + pctablecontent, + newSmpNames= {}, + newPopNames = {}, + configBoxplot = {}, + configAreaplot = {}; + +var waitForFinalEvent = (function () { + var timers = {}; + return function (callback, ms, uniqueId) { + if (!uniqueId) { + uniqueId = "Don't call this twice without a uniqueId"; + } + if (timers[uniqueId]) { + clearTimeout (timers[uniqueId]); + } + timers[uniqueId] = setTimeout(callback, ms); + }; +})(); + +var preprocess = function(text){ + var crossSampleData = d3.tsv.parseRows(text).map(function(row) { + return row.map(function(value) { + if (isNaN(value)) { + return value; + } + return +value; + }) + }) + return crossSampleData; +}; + +var displayProp = function() { + d3.text(url, function(error, data) { + var fileID = [], + sampleNames = [], + popTableData = [], + propHeadings = [], + propTableData = [], + propTableHeadings = [], + propTargets = [], + popTableHeadings = [], + propEditorData = [], + popEditorData = [], + smpcol = 2, + propHTML = '<table id="proptable" class="dtable display compact nowrap" cellspacing="0" width="100%"/>', + popHTML = '<table id="popnamestable" class="popt dtable display nowrap compact" cellspacing="0" width="100%"/>'; + + if (error) { + alert("Problem retrieving data"); + return; + } + propHeadings = data.split("\n")[0].split("\t"); + propHeadings.unshift("Comment"); + data = d3.tsv.parse(data); + function propHandle(method, url, d, successCallBack, errorCallBack) { + var output = {data : propTableData}; + successCallBack(output); + } + + function popHandle(method, url, d, successCallBack, errorCallBack) { + var output = {data : popTableData}; + successCallBack(output); + } + + propTableData = $.extend(true,[],data); + propTableData.forEach(function(d) { + d.Comment = d.SampleName; + newSmpNames[d.SampleName] = d.Comment; + fileID.push(d.FileID); + sampleNames.push(d.SampleName); + }); + + for (var i = 3, j = propHeadings.length; i < j; i++){ + propTargets.push(i); + } + propHeadings.forEach(function(d) { + propTableHeadings.push({"data":d, "title":d}); + propEditorData.push({"label":d,"name":d}); + if (d != 'Comment' && d != 'SampleName' && d != "FileID") { + newPopNames[d] = d.toString(); + popTableHeadings.push({"data":d, "title":d}); + popEditorData.push({"label":d,"name":d}); + } + }); + popTableData.push(newPopNames); + pctablecontent = $.extend(true,[],propTableData); + + $('#propDiv').empty(); + $('#propDiv').html(propHTML); + var smpEditor = new $.fn.dataTable.Editor({ + ajax: propHandle, + table: '#proptable', + fields: propEditorData, + idSrc: 'SampleName' + }); + + $('#proptable').on( 'click', 'tbody td:first-child', function (e) { + smpEditor.bubble( this ); + }); + var propTable = $('#proptable').DataTable({ + columns: propTableHeadings, + data: propTableData, + order: [[ smpcol, "asc" ]], + pageLength: 10, + scrollX: true, + scrollCollapse: true, + dom: '<"top"Bi>t<"bottom"lp><"clear">', + columnDefs: [{ + targets: propTargets, + className: "dt-body-right", + render: function(data, type, row){ + return parseFloat(data).toFixed(2) + '%'; + } + }, { + targets: [smpcol - 1, smpcol, smpcol + 1], + className: "dt-body-left", + }], + buttons: [ + 'copy', 'pdfHtml5','csvHtml5', 'colvis' + ], + colReorder: { + fixedColumnsLeft:1 + }, + select: true + }); + + // Add titles to File ID and Sample Name + $('#proptable tr').each(function(i,d){ + if (i > 0) { + $(this).find('td').each(function(j,e){ + if (j == 1 ) { + $(this).prop('title', fileID[i - 1] ); + } + if (j == 2) { + $(this).prop('title', sampleNames[i - 1]); + } + }); + } + }); + + // Add a table below to rename pops + // Might want to change that some other time? + $('#popnamesDiv').html(popHTML); + var popEditor = new $.fn.dataTable.Editor({ + ajax: popHandle, + table: '#popnamestable', + fields: popEditorData, + idSrc: '1' + }); + + $('#popnamestable').on( 'click', 'tbody td', function (e) { + popEditor.bubble(this); + }); + var popTable = $('#popnamestable').DataTable({ + columns: popTableHeadings, + dom: 't', + select: true, + data: popTableData + }); + + smpEditor.on( 'preSubmit', function(e, object, action){ + var data = object.data; + var key = Object.keys(data)[0]; + var count = object.data[key]['Comment']; + + propTableData.forEach(function(d){ + if (d.SampleName === key) { + d.Comment = count; + newSmpNames[key] = count; + } + }); + pctablecontent = $.extend(true, [], propTableData); + }); + popEditor.on( 'preSubmit', function(e, object, action){ + var data = object.data; + var key = Object.keys(data['1'])[0]; + var count = object.data['1'][key]; + popTableData[0][key] = count; + newPopNames[key] = count; + }); + }); +}; + +var displayStackedAreaPlot = function() { + $.ajax({ + url: url, + dataType: "text", + success: function(text) { + configAreaplot = { + displaybutton : '#updateDisplayA', + popSelectj : '.popSelectA', + plotdivj : '#plotDivA', + toggledisplayj : '#togglePlot', + toggledisplay : 'toggleButtonImg', + csdata : preprocess(text), + plotdiv : 'plotDivA', + type : 'areaplot', + table : '#popTableA tbody', + popSelect : 'popSelectA', + allPopulations : [], + selectedPopulations : [], + popSelectAll : '#popSelectAllA', + popSelectCheck : '.popSelectA:checked' + }; + displayToolbar(configAreaplot); + } + }); +}; + +var displayBoxplot = function() { + $.ajax({ + url: boxplotUrl, + dataType: "json", + success: function(data) { + configBoxplot = { + displaybutton : '#updateDisplayC', + toggledisplayj : '#changeDisplayC', + toggledisplay : 'changeDisplayC', + popSelectj : '.popSelectC', + plotdivj : '#plotDivC', + csdata : data, + plotdiv : 'plotDivC', + type : 'boxplot', + table : '#popTableC tbody', + popSelect : 'popSelectC', + allMarkers : [], + selectedMarkers: [], + allPopulations : [], + selectedPopulations : [], + popSelectAll : '#popSelectAllC', + popSelectCheck: '.popSelectC:checked', + mrkrSelectAll : '#mrkrSelectAllC', + mrkrSelectCheck: '.mrkrSelectC:checked', + mrkrSelect : 'mrkrSelectC', + mtable : '#mrkrTableC tbody', + mrkrSelectj: '.mrkrSelectC', + displayvalues: '#displayLabelsC', + displayMFI: '#displayMFIC', + view: 'p', + mrkrNames : Object.keys(data.mfi) + }; + displayToolbar(configBoxplot); + } + }); +};