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);
+    }
+  });
+};