Mercurial > repos > immport-devteam > cs_overview
comparison 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 |
comparison
equal
deleted
inserted
replaced
1:bca68066a957 | 2:a64ece32a01a |
---|---|
1 // Copyright (c) 2016 Northrop Grumman. | |
2 // All rights reserved. | |
3 | |
4 var url = "./csOverview.tsv", | |
5 boxplotUrl = "./csBoxplotData.json", | |
6 pctablecontent, | |
7 newSmpNames= {}, | |
8 newPopNames = {}, | |
9 configBoxplot = {}, | |
10 configAreaplot = {}; | |
11 | |
12 var waitForFinalEvent = (function () { | |
13 var timers = {}; | |
14 return function (callback, ms, uniqueId) { | |
15 if (!uniqueId) { | |
16 uniqueId = "Don't call this twice without a uniqueId"; | |
17 } | |
18 if (timers[uniqueId]) { | |
19 clearTimeout (timers[uniqueId]); | |
20 } | |
21 timers[uniqueId] = setTimeout(callback, ms); | |
22 }; | |
23 })(); | |
24 | |
25 var preprocess = function(text){ | |
26 var crossSampleData = d3.tsv.parseRows(text).map(function(row) { | |
27 return row.map(function(value) { | |
28 if (isNaN(value)) { | |
29 return value; | |
30 } | |
31 return +value; | |
32 }) | |
33 }) | |
34 return crossSampleData; | |
35 }; | |
36 | |
37 var displayProp = function() { | |
38 d3.text(url, function(error, data) { | |
39 var fileID = [], | |
40 sampleNames = [], | |
41 popTableData = [], | |
42 propHeadings = [], | |
43 propTableData = [], | |
44 propTableHeadings = [], | |
45 propTargets = [], | |
46 popTableHeadings = [], | |
47 propEditorData = [], | |
48 popEditorData = [], | |
49 smpcol = 2, | |
50 propHTML = '<table id="proptable" class="dtable display compact nowrap" cellspacing="0" width="100%"/>', | |
51 popHTML = '<table id="popnamestable" class="popt dtable display nowrap compact" cellspacing="0" width="100%"/>'; | |
52 | |
53 if (error) { | |
54 alert("Problem retrieving data"); | |
55 return; | |
56 } | |
57 propHeadings = data.split("\n")[0].split("\t"); | |
58 propHeadings.unshift("Comment"); | |
59 data = d3.tsv.parse(data); | |
60 function propHandle(method, url, d, successCallBack, errorCallBack) { | |
61 var output = {data : propTableData}; | |
62 successCallBack(output); | |
63 } | |
64 | |
65 function popHandle(method, url, d, successCallBack, errorCallBack) { | |
66 var output = {data : popTableData}; | |
67 successCallBack(output); | |
68 } | |
69 | |
70 propTableData = $.extend(true,[],data); | |
71 propTableData.forEach(function(d) { | |
72 d.Comment = d.SampleName; | |
73 newSmpNames[d.SampleName] = d.Comment; | |
74 fileID.push(d.FileID); | |
75 sampleNames.push(d.SampleName); | |
76 }); | |
77 | |
78 for (var i = 3, j = propHeadings.length; i < j; i++){ | |
79 propTargets.push(i); | |
80 } | |
81 propHeadings.forEach(function(d) { | |
82 propTableHeadings.push({"data":d, "title":d}); | |
83 propEditorData.push({"label":d,"name":d}); | |
84 if (d != 'Comment' && d != 'SampleName' && d != "FileID") { | |
85 newPopNames[d] = d.toString(); | |
86 popTableHeadings.push({"data":d, "title":d}); | |
87 popEditorData.push({"label":d,"name":d}); | |
88 } | |
89 }); | |
90 popTableData.push(newPopNames); | |
91 pctablecontent = $.extend(true,[],propTableData); | |
92 | |
93 $('#propDiv').empty(); | |
94 $('#propDiv').html(propHTML); | |
95 var smpEditor = new $.fn.dataTable.Editor({ | |
96 ajax: propHandle, | |
97 table: '#proptable', | |
98 fields: propEditorData, | |
99 idSrc: 'SampleName' | |
100 }); | |
101 | |
102 $('#proptable').on( 'click', 'tbody td:first-child', function (e) { | |
103 smpEditor.bubble( this ); | |
104 }); | |
105 var propTable = $('#proptable').DataTable({ | |
106 columns: propTableHeadings, | |
107 data: propTableData, | |
108 order: [[ smpcol, "asc" ]], | |
109 pageLength: 10, | |
110 scrollX: true, | |
111 scrollCollapse: true, | |
112 dom: '<"top"Bi>t<"bottom"lp><"clear">', | |
113 columnDefs: [{ | |
114 targets: propTargets, | |
115 className: "dt-body-right", | |
116 render: function(data, type, row){ | |
117 return parseFloat(data).toFixed(2) + '%'; | |
118 } | |
119 }, { | |
120 targets: [smpcol - 1, smpcol, smpcol + 1], | |
121 className: "dt-body-left", | |
122 }], | |
123 buttons: [ | |
124 'copy', 'pdfHtml5','csvHtml5', 'colvis' | |
125 ], | |
126 colReorder: { | |
127 fixedColumnsLeft:1 | |
128 }, | |
129 select: true | |
130 }); | |
131 | |
132 // Add titles to File ID and Sample Name | |
133 $('#proptable tr').each(function(i,d){ | |
134 if (i > 0) { | |
135 $(this).find('td').each(function(j,e){ | |
136 if (j == 1 ) { | |
137 $(this).prop('title', fileID[i - 1] ); | |
138 } | |
139 if (j == 2) { | |
140 $(this).prop('title', sampleNames[i - 1]); | |
141 } | |
142 }); | |
143 } | |
144 }); | |
145 | |
146 // Add a table below to rename pops | |
147 // Might want to change that some other time? | |
148 $('#popnamesDiv').html(popHTML); | |
149 var popEditor = new $.fn.dataTable.Editor({ | |
150 ajax: popHandle, | |
151 table: '#popnamestable', | |
152 fields: popEditorData, | |
153 idSrc: '1' | |
154 }); | |
155 | |
156 $('#popnamestable').on( 'click', 'tbody td', function (e) { | |
157 popEditor.bubble(this); | |
158 }); | |
159 var popTable = $('#popnamestable').DataTable({ | |
160 columns: popTableHeadings, | |
161 dom: 't', | |
162 select: true, | |
163 data: popTableData | |
164 }); | |
165 | |
166 smpEditor.on( 'preSubmit', function(e, object, action){ | |
167 var data = object.data; | |
168 var key = Object.keys(data)[0]; | |
169 var count = object.data[key]['Comment']; | |
170 | |
171 propTableData.forEach(function(d){ | |
172 if (d.SampleName === key) { | |
173 d.Comment = count; | |
174 newSmpNames[key] = count; | |
175 } | |
176 }); | |
177 pctablecontent = $.extend(true, [], propTableData); | |
178 }); | |
179 popEditor.on( 'preSubmit', function(e, object, action){ | |
180 var data = object.data; | |
181 var key = Object.keys(data['1'])[0]; | |
182 var count = object.data['1'][key]; | |
183 popTableData[0][key] = count; | |
184 newPopNames[key] = count; | |
185 }); | |
186 }); | |
187 }; | |
188 | |
189 var displayStackedAreaPlot = function() { | |
190 $.ajax({ | |
191 url: url, | |
192 dataType: "text", | |
193 success: function(text) { | |
194 configAreaplot = { | |
195 displaybutton : '#updateDisplayA', | |
196 popSelectj : '.popSelectA', | |
197 plotdivj : '#plotDivA', | |
198 toggledisplayj : '#togglePlot', | |
199 toggledisplay : 'toggleButtonImg', | |
200 csdata : preprocess(text), | |
201 plotdiv : 'plotDivA', | |
202 type : 'areaplot', | |
203 table : '#popTableA tbody', | |
204 popSelect : 'popSelectA', | |
205 allPopulations : [], | |
206 selectedPopulations : [], | |
207 popSelectAll : '#popSelectAllA', | |
208 popSelectCheck : '.popSelectA:checked' | |
209 }; | |
210 displayToolbar(configAreaplot); | |
211 } | |
212 }); | |
213 }; | |
214 | |
215 var displayBoxplot = function() { | |
216 $.ajax({ | |
217 url: boxplotUrl, | |
218 dataType: "json", | |
219 success: function(data) { | |
220 configBoxplot = { | |
221 displaybutton : '#updateDisplayC', | |
222 toggledisplayj : '#changeDisplayC', | |
223 toggledisplay : 'changeDisplayC', | |
224 popSelectj : '.popSelectC', | |
225 plotdivj : '#plotDivC', | |
226 csdata : data, | |
227 plotdiv : 'plotDivC', | |
228 type : 'boxplot', | |
229 table : '#popTableC tbody', | |
230 popSelect : 'popSelectC', | |
231 allMarkers : [], | |
232 selectedMarkers: [], | |
233 allPopulations : [], | |
234 selectedPopulations : [], | |
235 popSelectAll : '#popSelectAllC', | |
236 popSelectCheck: '.popSelectC:checked', | |
237 mrkrSelectAll : '#mrkrSelectAllC', | |
238 mrkrSelectCheck: '.mrkrSelectC:checked', | |
239 mrkrSelect : 'mrkrSelectC', | |
240 mtable : '#mrkrTableC tbody', | |
241 mrkrSelectj: '.mrkrSelectC', | |
242 displayvalues: '#displayLabelsC', | |
243 displayMFI: '#displayMFIC', | |
244 view: 'p', | |
245 mrkrNames : Object.keys(data.mfi) | |
246 }; | |
247 displayToolbar(configBoxplot); | |
248 } | |
249 }); | |
250 }; |