extensions/net.sf.basedb.reggie/trunk/resources/methylation/beta_confirm.js

Code
Comments
Other
Rev Date Author Line
6879 22 Nov 22 nicklas 1 var Methylation = function()
6879 22 Nov 22 nicklas 2 {
6879 22 Nov 22 nicklas 3   var meth = {};
6879 22 Nov 22 nicklas 4   var debug = 0;
6879 22 Nov 22 nicklas 5   
6879 22 Nov 22 nicklas 6   var JOB_IMAGE = { 'DONE': 'ok.png', 'ERROR': 'error.png'};
6879 22 Nov 22 nicklas 7   
6879 22 Nov 22 nicklas 8   var methylationItems;
6879 22 Nov 22 nicklas 9   
6879 22 Nov 22 nicklas 10   // Page initialization
6879 22 Nov 22 nicklas 11   meth.initPage = function()
6879 22 Nov 22 nicklas 12   {
6879 22 Nov 22 nicklas 13     
6879 22 Nov 22 nicklas 14     // Step 1
6879 22 Nov 22 nicklas 15
6879 22 Nov 22 nicklas 16     // Navigation
6879 22 Nov 22 nicklas 17     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
6879 22 Nov 22 nicklas 18     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
6879 22 Nov 22 nicklas 19     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
6879 22 Nov 22 nicklas 20     Buttons.addClickHandler('goregister', Wizard.goRegister);
6879 22 Nov 22 nicklas 21       
6879 22 Nov 22 nicklas 22     // Final registration
6879 22 Nov 22 nicklas 23     Events.addEventHandler('wizard', 'wizard-submit', meth.submit);
6879 22 Nov 22 nicklas 24
6879 22 Nov 22 nicklas 25     Wizard.showLoadingAnimation('Loading bioassays...');
6879 22 Nov 22 nicklas 26     var url = '../Methylation.servlet?ID='+App.getSessionId();
6879 22 Nov 22 nicklas 27     url += '&cmd=GetUnconfirmedBetaAnalysis';
6879 22 Nov 22 nicklas 28     Wizard.asyncJsonRequest(url, meth.initializeStep1);
6879 22 Nov 22 nicklas 29   }
6879 22 Nov 22 nicklas 30   
6879 22 Nov 22 nicklas 31   // --- Step 1 -----------------------------------
6879 22 Nov 22 nicklas 32   meth.initializeStep1 = function(response)
6879 22 Nov 22 nicklas 33   {
6879 22 Nov 22 nicklas 34     methylationItems = response.methylationItems;
6879 22 Nov 22 nicklas 35     if (methylationItems.length == 0)
6879 22 Nov 22 nicklas 36     {
6879 22 Nov 22 nicklas 37       Wizard.setFatalError('No methylation items available for processing.');
6879 22 Nov 22 nicklas 38       return;
6879 22 Nov 22 nicklas 39     }
6879 22 Nov 22 nicklas 40     
6879 22 Nov 22 nicklas 41     var html = '<table id="methylationTable">';
6879 22 Nov 22 nicklas 42     html += '<thead class="bg-filled-100">';
6879 22 Nov 22 nicklas 43     // Header row
6879 22 Nov 22 nicklas 44     html += '<tr>';
6879 22 Nov 22 nicklas 45     html += '<th></th>';
6879 22 Nov 22 nicklas 46     html += '<th class="dottedleft" colspan="2">BeadChip</th>';
6879 22 Nov 22 nicklas 47     html += '<th class="dottedleft" colspan="3">Median int.</th>';
6879 22 Nov 22 nicklas 48     html += '<th class="dottedleft" colspan="4">Probes</th>';
6879 22 Nov 22 nicklas 49     html += '<th class="dottedleft" colspan="3">Peaks (Infinium I/II)</th>';
6879 22 Nov 22 nicklas 50     html += '<th class="dottedleft"></th>';
6879 22 Nov 22 nicklas 51     html += '<th class="dottedleft"></th>';
6879 22 Nov 22 nicklas 52     html += '<th class="dottedleft"></th>';
6879 22 Nov 22 nicklas 53     html += '<th class="dottedleft" colspan="2">Actions</th>';
6879 22 Nov 22 nicklas 54     html += '<th class="dottedleft">Comment</th>';
6879 22 Nov 22 nicklas 55     html += '</tr>';
6879 22 Nov 22 nicklas 56     
6879 22 Nov 22 nicklas 57     html += '<tr>';
6879 22 Nov 22 nicklas 58     html += '<th>Methylation</th>';
6879 22 Nov 22 nicklas 59     html += '<th class="dottedleft">Sentrix ID</th>';
6879 22 Nov 22 nicklas 60     html += '<th>Position</th>';
6879 22 Nov 22 nicklas 61     html += '<th class="dottedleft">Meth</th>';
6879 22 Nov 22 nicklas 62     html += '<th>Unmeth</th>';
6879 22 Nov 22 nicklas 63     html += '<th class="icon-col"></th>';
6879 22 Nov 22 nicklas 64     html += '<th class="dottedleft">Total</th>';
6879 22 Nov 22 nicklas 65     html += '<th title="Probes with detectionP-value &gt; 0.01.">Bad¹</th>';
6879 22 Nov 22 nicklas 66     html += '<th>Rate</th>';
6879 22 Nov 22 nicklas 67     html += '<th class="icon-col"></th>';
6879 22 Nov 22 nicklas 68     html += '<th class="dottedleft">Meth</th>';
6879 22 Nov 22 nicklas 69     html += '<th>Unmeth</th>';
6879 22 Nov 22 nicklas 70     html += '<th class="icon-col"></th>';
6879 22 Nov 22 nicklas 71     html += '<th class="dottedleft">Warnings</th>';
6879 22 Nov 22 nicklas 72     html += '<th class="dottedleft">Job</th>';
6879 22 Nov 22 nicklas 73     html += '<th class="dottedleft">Files</th>';
6879 22 Nov 22 nicklas 74     html += '<th class="dottedleft"><span id="reanalyze" data-prefix="reanalyze" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Re-analyze</span></th>';
6879 22 Nov 22 nicklas 75     html += '<th><span id="confirm" data-prefix="confirm" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Confirm</span></th>';
6879 22 Nov 22 nicklas 76     html += '<th class="dottedleft"></th>';
6879 22 Nov 22 nicklas 77     html += '</tr>';
6879 22 Nov 22 nicklas 78     html += '</thead>';
6879 22 Nov 22 nicklas 79     html += '<tbody>';
6879 22 Nov 22 nicklas 80     for (var methNo = 0; methNo < methylationItems.length; methNo++)
6879 22 Nov 22 nicklas 81     {
6879 22 Nov 22 nicklas 82       var m = methylationItems[methNo];
6879 22 Nov 22 nicklas 83       var dna = m.dna;
6879 22 Nov 22 nicklas 84       var chip = m.beadChip;
6879 22 Nov 22 nicklas 85       var job = m.job;
6879 22 Nov 22 nicklas 86       var isError = job.status == 'ERROR';
6879 22 Nov 22 nicklas 87       
6879 22 Nov 22 nicklas 88       html += '<tr class="highlight ' + (methNo % 4 < 2 ? 'evenrow' : 'oddrow') + '">';
6879 22 Nov 22 nicklas 89       html += '<td class="prompt">'+m.name+'</td>';
6879 22 Nov 22 nicklas 90       
6879 22 Nov 22 nicklas 91       html += '<td class="dottedleft">'+(chip ? Strings.encodeTags(chip.BeadChipId) : '-')+'</td>';
6879 22 Nov 22 nicklas 92       html += '<td>'+(dna ? Strings.encodeTags(dna.BeadChipPosition) : '-')+'</td>';
6879 22 Nov 22 nicklas 93
6879 22 Nov 22 nicklas 94
6879 22 Nov 22 nicklas 95       html += '<td class="dottedleft">'+Reggie.formatNumber(m.MedianMeth, null, 2)+'</td>';
6879 22 Nov 22 nicklas 96       html += '<td>'+Reggie.formatNumber(m.MedianUnmeth, null, 2)+'</td>';
6879 22 Nov 22 nicklas 97       html += '<td class="icon-col">';
6879 22 Nov 22 nicklas 98       if (m.MedianMeth != null && m.MedianUnmeth != null && (m.MedianMeth+m.MedianUnmeth<21))
6879 22 Nov 22 nicklas 99       {
6879 22 Nov 22 nicklas 100         html += '<img src="../images/warning_small.png" title="Mean signal&lt;10.5">';
6879 22 Nov 22 nicklas 101       }
6879 22 Nov 22 nicklas 102       html += '</td>';
6879 22 Nov 22 nicklas 103
6879 22 Nov 22 nicklas 104       html += '<td class="dottedleft">'+Reggie.formatNumber(m.ProbesRaw, null, 2)+'</td>';
6879 22 Nov 22 nicklas 105       html += '<td>'+Reggie.formatNumber(m.ProbesBad, null, 2)+'</td>';
6879 22 Nov 22 nicklas 106       html += '<td>'+(m.ProbesRate == null ? '':Reggie.formatNumber(m.ProbesRate*100, '%', 2))+'</td>';
6879 22 Nov 22 nicklas 107       html += '<td class="icon-col">';
6879 22 Nov 22 nicklas 108       if (m.ProbesRate != null && m.ProbesRate<0.99)
6879 22 Nov 22 nicklas 109       {
6879 22 Nov 22 nicklas 110         html += '<img src="../images/warning_small.png" title="&gt;1% probes with p&gt;0.01">';
6879 22 Nov 22 nicklas 111       }
6879 22 Nov 22 nicklas 112       html += '</td>';
6879 22 Nov 22 nicklas 113       html += '<td class="dottedleft">';
6879 22 Nov 22 nicklas 114       var peakWarning = null;
6879 22 Nov 22 nicklas 115       if (m.PeakMethI != null || m.PeakMethII != null)
6879 22 Nov 22 nicklas 116       {
6879 22 Nov 22 nicklas 117         if ((m.PeakMethI != null && m.PeakMethI < 0.8) || (m.peakMethII && m.PeakMethII < 0.8))
6879 22 Nov 22 nicklas 118         {
6879 22 Nov 22 nicklas 119           peakWarning = 'Peak Meth &lt;0.8';
6879 22 Nov 22 nicklas 120         } 
6879 22 Nov 22 nicklas 121         html += Reggie.formatNumber(m.PeakMethI, null, 1)+'/'+Reggie.formatNumber(m.PeakMethII, null, 1);
6879 22 Nov 22 nicklas 122       }
6879 22 Nov 22 nicklas 123       html += '</td>';
6879 22 Nov 22 nicklas 124       html += '<td>';
6879 22 Nov 22 nicklas 125       if (m.PeakUnmethI != null || m.PeakUnmethII != null)
6879 22 Nov 22 nicklas 126       {
6879 22 Nov 22 nicklas 127         if ((m.PeakUnmethI != null && m.PeakUnmethI > 0.2) || (m.PeakUnmethII != null && m.PeakUnmethII > 0.2))
6879 22 Nov 22 nicklas 128         {
6879 22 Nov 22 nicklas 129           peakWarning = 'Peak Unmeth &gt;0.2';
6879 22 Nov 22 nicklas 130         }
6879 22 Nov 22 nicklas 131         html += Reggie.formatNumber(m.PeakUnmethI, null, 1)+'/'+Reggie.formatNumber(m.PeakUnmethII, null, 1);
6879 22 Nov 22 nicklas 132       }
6879 22 Nov 22 nicklas 133       html += '</td>';
6879 22 Nov 22 nicklas 134       html += '<td class="icon-col">';
6879 22 Nov 22 nicklas 135       if (m.adjustmentPlots)
6879 22 Nov 22 nicklas 136       {
6879 22 Nov 22 nicklas 137         html += '<span class="link pdf-link" data-file-id="'+m.adjustmentPlots.id+'" data-item-id="'+m.id+'" title="View adjustment plots'+(peakWarning?': '+peakWarning:'')+'">';
6879 22 Nov 22 nicklas 138         html += '<img src="../images/'+(peakWarning?'pdffile_warning.png':'pdffile.png')+'">';
6879 22 Nov 22 nicklas 139         html += '</span>';
6879 22 Nov 22 nicklas 140       }
6879 22 Nov 22 nicklas 141       html += '</td>';
6879 22 Nov 22 nicklas 142       html += '<td class="dottedleft">'+Strings.encodeTags(m.AnalysisFlag)+'</td>';
6879 22 Nov 22 nicklas 143
6879 22 Nov 22 nicklas 144       html += '<td class="dottedleft">';
6879 22 Nov 22 nicklas 145       html += '<span class="link item-link" data-item-type="JOB" data-item-id="'+job.id+'" title="'+Strings.encodeTags(job.statusMessage)+'"><img src="../images/'+JOB_IMAGE[job.status]+'"></span>';
6879 22 Nov 22 nicklas 146       html += '</td>';
6879 22 Nov 22 nicklas 147       if (m.DataFilesFolder && job.server)
6879 22 Nov 22 nicklas 148       {
6879 22 Nov 22 nicklas 149         html += '<td class="dottedleft">';
6879 22 Nov 22 nicklas 150         html += '<span class="link file-link" data-server="'+Strings.encodeTags(job.server)+'" data-folder="'+Strings.encodeTags(m.DataFilesFolder)+'" data-item-id="'+m.id+'" title="View generated files"><img src="../images/remote_folder.png"></span>';
6879 22 Nov 22 nicklas 151         html += '</td>';
6879 22 Nov 22 nicklas 152       }
6879 22 Nov 22 nicklas 153       else
6879 22 Nov 22 nicklas 154       {
6879 22 Nov 22 nicklas 155         html += '<td class="dottedleft">-</td>';
6879 22 Nov 22 nicklas 156       }
6879 22 Nov 22 nicklas 157       
6879 22 Nov 22 nicklas 158       var reanalyzeChecked = isError ? ' checked' : '';
6879 22 Nov 22 nicklas 159       var confirmChecked = !isError ? ' checked' : '';
6879 22 Nov 22 nicklas 160       var confirmDisabled = '';
6879 22 Nov 22 nicklas 161       html += '<td class="dottedleft"><input type="checkbox" name="reanalyze.'+m.id+'"'+reanalyzeChecked+'></td>';
6879 22 Nov 22 nicklas 162       html += '<td><input type="checkbox" name="confirm.'+m.id+'"'+confirmChecked+confirmDisabled+'></td>';
6880 22 Nov 22 nicklas 163       html += '<td class="dottedleft comment"><input type="text" name="comment.'+m.id+'" value="'+Strings.encodeTags(m.comment)+'"></td>';
6879 22 Nov 22 nicklas 164       html += '</tr>';
6879 22 Nov 22 nicklas 165
6879 22 Nov 22 nicklas 166     }
6879 22 Nov 22 nicklas 167     html += '</tbody>';
6879 22 Nov 22 nicklas 168     html += '</table>';
6879 22 Nov 22 nicklas 169     Doc.element('methylationItems').innerHTML = html;
6879 22 Nov 22 nicklas 170     
6879 22 Nov 22 nicklas 171     Events.addEventHandler('reanalyze', 'click', meth.toggleSelection);
6879 22 Nov 22 nicklas 172     Events.addEventHandler('confirm', 'click', meth.toggleSelection);
6879 22 Nov 22 nicklas 173     
6879 22 Nov 22 nicklas 174     // Add click handler to items
6879 22 Nov 22 nicklas 175     var clickableItems = document.getElementsByClassName('item-link');
6879 22 Nov 22 nicklas 176     for (var i = 0; i < clickableItems.length; i++)
6879 22 Nov 22 nicklas 177     {
6879 22 Nov 22 nicklas 178       Events.addEventHandler(clickableItems[i], 'click', Items.itemOnClick);
6879 22 Nov 22 nicklas 179     }
6879 22 Nov 22 nicklas 180     
6879 22 Nov 22 nicklas 181     // Add click handler to file links
6879 22 Nov 22 nicklas 182     var clickableItems = document.getElementsByClassName('file-link');
6879 22 Nov 22 nicklas 183     for (var i = 0; i < clickableItems.length; i++)
6879 22 Nov 22 nicklas 184     {
6879 22 Nov 22 nicklas 185       Events.addEventHandler(clickableItems[i], 'click', meth.fileLinkOnClick);
6879 22 Nov 22 nicklas 186     }
6879 22 Nov 22 nicklas 187
6879 22 Nov 22 nicklas 188     // Add click handler to PDF files
6879 22 Nov 22 nicklas 189     var clickableItems = document.getElementsByClassName('pdf-link');
6879 22 Nov 22 nicklas 190     for (var i = 0; i < clickableItems.length; i++)
6879 22 Nov 22 nicklas 191     {
6879 22 Nov 22 nicklas 192       Events.addEventHandler(clickableItems[i], 'click', Files.viewFileOnClick);
6879 22 Nov 22 nicklas 193     }
6879 22 Nov 22 nicklas 194
6879 22 Nov 22 nicklas 195     Doc.show('step-1');
6879 22 Nov 22 nicklas 196     Doc.show('goregister');
6879 22 Nov 22 nicklas 197   }
6879 22 Nov 22 nicklas 198   
6879 22 Nov 22 nicklas 199   meth.fileLinkOnClick = function(event)
6879 22 Nov 22 nicklas 200   {
6879 22 Nov 22 nicklas 201     var folder = Data.get(event.currentTarget, 'folder');
6879 22 Nov 22 nicklas 202     var server = Data.get(event.currentTarget, 'server');
6879 22 Nov 22 nicklas 203     var itemId = Data.get(event.currentTarget, 'item-id');
6879 22 Nov 22 nicklas 204     server = server.replace(/\s*\[.*\]/, '');
6879 22 Nov 22 nicklas 205     var url = '../analysis/view_remote_files.jsp?ID=' + App.getSessionId();
6879 22 Nov 22 nicklas 206     url += '&clusterId='+server;
6879 22 Nov 22 nicklas 207     url += '&path='+encodeURIComponent(folder);
6879 22 Nov 22 nicklas 208     url += '&itemType=DERIVEDBIOASSAY&itemId='+itemId;
6879 22 Nov 22 nicklas 209     Dialogs.openPopup(url, 'ViewProjectFiles', 750, 500);
6879 22 Nov 22 nicklas 210   }
6879 22 Nov 22 nicklas 211   
6879 22 Nov 22 nicklas 212   meth.toggleSelection = function(event)
6879 22 Nov 22 nicklas 213   {
6879 22 Nov 22 nicklas 214     var prefix = Data.get(event.currentTarget, 'prefix');
6879 22 Nov 22 nicklas 215     var specialKey = event.altKey || event.ctrlKey || event.shiftKey;
6879 22 Nov 22 nicklas 216     
6879 22 Nov 22 nicklas 217     var frm = document.forms['reggie'];
6879 22 Nov 22 nicklas 218     for (var methNo = 0; methNo < methylationItems.length; methNo++)
6879 22 Nov 22 nicklas 219     {
6879 22 Nov 22 nicklas 220       var m = methylationItems[methNo];
6879 22 Nov 22 nicklas 221       var chk = frm[prefix+'.'+m.id];
6879 22 Nov 22 nicklas 222       if (chk && !chk.disabled)
6879 22 Nov 22 nicklas 223       {
6879 22 Nov 22 nicklas 224         chk.checked = specialKey ? false : !chk.checked;
6879 22 Nov 22 nicklas 225       }
6879 22 Nov 22 nicklas 226     }
6879 22 Nov 22 nicklas 227   }
6879 22 Nov 22 nicklas 228   
6879 22 Nov 22 nicklas 229   meth.submit = function()
6879 22 Nov 22 nicklas 230   {
6879 22 Nov 22 nicklas 231     var frm = document.forms['reggie'];
6879 22 Nov 22 nicklas 232     var submitInfo = {};
6879 22 Nov 22 nicklas 233     
6879 22 Nov 22 nicklas 234     var all = [];
6879 22 Nov 22 nicklas 235     submitInfo.methylationItems = all;
6879 22 Nov 22 nicklas 236     for (var methNo = 0; methNo < methylationItems.length; methNo++)
6879 22 Nov 22 nicklas 237     {
6879 22 Nov 22 nicklas 238       var m = methylationItems[methNo];
6879 22 Nov 22 nicklas 239       var tmp = {};
6879 22 Nov 22 nicklas 240       tmp.id = m.id;
6879 22 Nov 22 nicklas 241       
6879 22 Nov 22 nicklas 242       tmp.reanalyze = frm['reanalyze.'+m.id].checked;
6879 22 Nov 22 nicklas 243       tmp.confirm = frm['confirm.'+m.id].checked;
6879 22 Nov 22 nicklas 244       tmp.comment = frm['comment.'+m.id].value;
6879 22 Nov 22 nicklas 245       
6879 22 Nov 22 nicklas 246       all[all.length] = tmp;
6879 22 Nov 22 nicklas 247     }
6879 22 Nov 22 nicklas 248     
6879 22 Nov 22 nicklas 249     var url = '../Methylation.servlet?ID='+App.getSessionId();
6880 22 Nov 22 nicklas 250     url += '&cmd=ConfirmBetaAnalysis';
6879 22 Nov 22 nicklas 251     Wizard.showLoadingAnimation('Performing registration...');
6879 22 Nov 22 nicklas 252     Wizard.asyncJsonRequest(url, meth.submissionResults, 'POST', JSON.stringify(submitInfo));
6879 22 Nov 22 nicklas 253   }
6879 22 Nov 22 nicklas 254   
6879 22 Nov 22 nicklas 255   meth.submissionResults = function(response)
6879 22 Nov 22 nicklas 256   {
6879 22 Nov 22 nicklas 257     Wizard.showFinalMessage(response.messages);
6879 22 Nov 22 nicklas 258     Doc.show('gorestart');
6879 22 Nov 22 nicklas 259   }
6879 22 Nov 22 nicklas 260   
6879 22 Nov 22 nicklas 261   return meth;
6879 22 Nov 22 nicklas 262 }();
6879 22 Nov 22 nicklas 263
6879 22 Nov 22 nicklas 264 Doc.onLoad(Methylation.initPage);
6879 22 Nov 22 nicklas 265