extensions/net.sf.basedb.reggie/trunk/resources/dnaseq-analysis/ascat_confirm.js

Code
Comments
Other
Rev Date Author Line
7289 18 Aug 23 nicklas 1 var Ascat = function()
7289 18 Aug 23 nicklas 2 {
7289 18 Aug 23 nicklas 3   var ascat = {};
7289 18 Aug 23 nicklas 4   var debug = 0;
7289 18 Aug 23 nicklas 5   
7289 18 Aug 23 nicklas 6   var JOB_IMAGE = { 'DONE': 'ok.png', 'ERROR': 'error.png'};
7289 18 Aug 23 nicklas 7   
7313 29 Aug 23 nicklas 8   var selectionIsValid = false;
7289 18 Aug 23 nicklas 9   var ascatItems;
7289 18 Aug 23 nicklas 10   
7289 18 Aug 23 nicklas 11   // Page initialization
7289 18 Aug 23 nicklas 12   ascat.initPage = function()
7289 18 Aug 23 nicklas 13   {
7289 18 Aug 23 nicklas 14     
7289 18 Aug 23 nicklas 15     // Step 1
7313 29 Aug 23 nicklas 16     Events.addEventHandler('ascatItems', 'change', ascat.selectedItemsOnChange);
7313 29 Aug 23 nicklas 17     Events.addEventHandler('step-1', 'wizard-validate', ascat.validateStep1);
7313 29 Aug 23 nicklas 18     
7313 29 Aug 23 nicklas 19     // Step 2
7313 29 Aug 23 nicklas 20     Events.addEventHandler('step-2', 'wizard-initialize', ascat.initializeStep2);
7289 18 Aug 23 nicklas 21
7289 18 Aug 23 nicklas 22     // Navigation
7289 18 Aug 23 nicklas 23     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
7289 18 Aug 23 nicklas 24     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
7289 18 Aug 23 nicklas 25     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
7289 18 Aug 23 nicklas 26     Buttons.addClickHandler('goregister', Wizard.goRegister);
7289 18 Aug 23 nicklas 27       
7289 18 Aug 23 nicklas 28     // Final registration
7289 18 Aug 23 nicklas 29     Events.addEventHandler('wizard', 'wizard-submit', ascat.submit);
7289 18 Aug 23 nicklas 30
7289 18 Aug 23 nicklas 31     Wizard.showLoadingAnimation('Loading bioassays...');
7289 18 Aug 23 nicklas 32     var url = '../Ascat.servlet?ID='+App.getSessionId();
7289 18 Aug 23 nicklas 33     url += '&cmd=GetUnconfirmedAscatItems';
7289 18 Aug 23 nicklas 34     Wizard.asyncJsonRequest(url, ascat.initializeStep1);
7289 18 Aug 23 nicklas 35   }
7289 18 Aug 23 nicklas 36   
7289 18 Aug 23 nicklas 37   // --- Step 1 -----------------------------------
7289 18 Aug 23 nicklas 38   ascat.initializeStep1 = function(response)
7289 18 Aug 23 nicklas 39   {
7289 18 Aug 23 nicklas 40     ascatItems = response.ascatItems;
7289 18 Aug 23 nicklas 41     if (ascatItems.length == 0)
7289 18 Aug 23 nicklas 42     {
7289 18 Aug 23 nicklas 43       Wizard.setFatalError('No ASCAT results available for processing.');
7289 18 Aug 23 nicklas 44       return;
7289 18 Aug 23 nicklas 45     }
7313 29 Aug 23 nicklas 46
7313 29 Aug 23 nicklas 47     var frm = document.forms['reggie'];
7313 29 Aug 23 nicklas 48     var lastTumorId = 0;
7313 29 Aug 23 nicklas 49     var MAX_SELECTED = 10;
7313 29 Aug 23 nicklas 50     for (var ascatNo = 0; ascatNo < ascatItems.length; ascatNo++)
7313 29 Aug 23 nicklas 51     {
7313 29 Aug 23 nicklas 52       var item = ascatItems[ascatNo];
7313 29 Aug 23 nicklas 53       var name = (ascatNo+1)+': '+item.name;
7313 29 Aug 23 nicklas 54       var job = item.job;
7313 29 Aug 23 nicklas 55       
7313 29 Aug 23 nicklas 56       if (item.AscatResult)
7313 29 Aug 23 nicklas 57       {
7313 29 Aug 23 nicklas 58         name += ' ['+Strings.encodeTags(item.AscatResult)+']';
7313 29 Aug 23 nicklas 59       }
7313 29 Aug 23 nicklas 60       else if (job.status == 'ERROR')
7313 29 Aug 23 nicklas 61       {
7313 29 Aug 23 nicklas 62         name += ' [Failed]';
7313 29 Aug 23 nicklas 63       }
7313 29 Aug 23 nicklas 64       
7313 29 Aug 23 nicklas 65       if (ascatNo < MAX_SELECTED) lastTumorId = item.tumor.id;
7313 29 Aug 23 nicklas 66       var option = new Option(name, item.id, false, ascatNo < MAX_SELECTED || item.tumor.id == lastTumorId);
7313 29 Aug 23 nicklas 67       frm.ascatItems.options[frm.ascatItems.length] = option;
7313 29 Aug 23 nicklas 68     }
7313 29 Aug 23 nicklas 69     selectionIsValid = true;
7313 29 Aug 23 nicklas 70     Wizard.setInputStatus('ascatItems', 'valid');
7313 29 Aug 23 nicklas 71     Doc.show('step-1');
7313 29 Aug 23 nicklas 72     Doc.show('gonext');
7313 29 Aug 23 nicklas 73     frm.ascatItems.focus();
7313 29 Aug 23 nicklas 74   }
7313 29 Aug 23 nicklas 75   
7313 29 Aug 23 nicklas 76   ascat.selectedItemsOnChange = function()
7313 29 Aug 23 nicklas 77   {
7313 29 Aug 23 nicklas 78     var frm = document.forms['reggie'];
7313 29 Aug 23 nicklas 79     selectionIsValid = false;
7313 29 Aug 23 nicklas 80     var numSelected = 0;
7313 29 Aug 23 nicklas 81     Wizard.setInputStatus('ascatItems');
7289 18 Aug 23 nicklas 82     
7313 29 Aug 23 nicklas 83     for (var ascatNo = 0; ascatNo < frm.ascatItems.length; ascatNo++)
7313 29 Aug 23 nicklas 84     {
7313 29 Aug 23 nicklas 85       if (frm.ascatItems[ascatNo].selected) 
7313 29 Aug 23 nicklas 86       {
7313 29 Aug 23 nicklas 87         numSelected++;
7313 29 Aug 23 nicklas 88         break; // We only need to know that at least one item is selected
7313 29 Aug 23 nicklas 89       }
7313 29 Aug 23 nicklas 90     }
7313 29 Aug 23 nicklas 91     if (numSelected == 0)
7313 29 Aug 23 nicklas 92     {
7313 29 Aug 23 nicklas 93       Wizard.setInputStatus('ascatItems', 'invalid', 'Select at least one item');
7313 29 Aug 23 nicklas 94       return;
7313 29 Aug 23 nicklas 95     }
7313 29 Aug 23 nicklas 96     selectionIsValid = true;
7313 29 Aug 23 nicklas 97     Wizard.setInputStatus('ascatItems', 'valid');
7313 29 Aug 23 nicklas 98   }
7313 29 Aug 23 nicklas 99   
7313 29 Aug 23 nicklas 100   ascat.validateStep1 = function(event)
7313 29 Aug 23 nicklas 101   {
7313 29 Aug 23 nicklas 102     if (!selectionIsValid) event.preventDefault();
7313 29 Aug 23 nicklas 103   }
7313 29 Aug 23 nicklas 104
7313 29 Aug 23 nicklas 105   // --- Step 2 -----------------------------------
7313 29 Aug 23 nicklas 106   ascat.initializeStep2 = function(response)
7313 29 Aug 23 nicklas 107   {
7313 29 Aug 23 nicklas 108     var frm = document.forms['reggie'];
7313 29 Aug 23 nicklas 109     var selectedItems = [];
7313 29 Aug 23 nicklas 110     for (var ascatNo = 0; ascatNo < frm.ascatItems.length; ascatNo++)
7313 29 Aug 23 nicklas 111     {
7313 29 Aug 23 nicklas 112       if (frm.ascatItems[ascatNo].selected) 
7313 29 Aug 23 nicklas 113       {
7313 29 Aug 23 nicklas 114         selectedItems[selectedItems.length] = frm.ascatItems[ascatNo].value;
7313 29 Aug 23 nicklas 115       }
7313 29 Aug 23 nicklas 116     }
7313 29 Aug 23 nicklas 117     
7313 29 Aug 23 nicklas 118     Wizard.showLoadingAnimation('Loading bioassays...');
7313 29 Aug 23 nicklas 119     var url = '../Ascat.servlet?ID='+App.getSessionId();
7313 29 Aug 23 nicklas 120     url += '&cmd=GetUnconfirmedAscatItems&items='+selectedItems.join(',');
7313 29 Aug 23 nicklas 121     Wizard.asyncJsonRequest(url, ascat.ascatDetailsLoaded);    
7313 29 Aug 23 nicklas 122   }
7313 29 Aug 23 nicklas 123   
7313 29 Aug 23 nicklas 124   ascat.ascatDetailsLoaded = function(response)
7313 29 Aug 23 nicklas 125   {
7313 29 Aug 23 nicklas 126     ascatItems = response.ascatItems;
7313 29 Aug 23 nicklas 127     if (ascatItems.length == 0)
7313 29 Aug 23 nicklas 128     {
7313 29 Aug 23 nicklas 129       Wizard.setFatalError('No ASCAT results available for processing.');
7313 29 Aug 23 nicklas 130       return;
7313 29 Aug 23 nicklas 131     }
7313 29 Aug 23 nicklas 132     
7289 18 Aug 23 nicklas 133     var html = '<table id="ascatTable">';
7289 18 Aug 23 nicklas 134     html += '<thead class="bg-filled-100">';
7289 18 Aug 23 nicklas 135     // Header row
7289 18 Aug 23 nicklas 136     html += '<tr>';
7341 11 Sep 23 nicklas 137     html += '<th>ASCAT Item</th>';
7289 18 Aug 23 nicklas 138     html += '<th class="dottedleft"></th>';
7289 18 Aug 23 nicklas 139     html += '<th class="dottedleft"></th>';
7289 18 Aug 23 nicklas 140     html += '<th class="dottedleft" colspan="3">Images</th>';
7289 18 Aug 23 nicklas 141     html += '<th class="dottedleft"></th>';
7289 18 Aug 23 nicklas 142     html += '<th class="dottedleft"></th>';
7293 22 Aug 23 nicklas 143     html += '<th class="dottedleft" colspan="3">Actions</th>';
7289 18 Aug 23 nicklas 144     html += '<th class="dottedleft"></th>';
7289 18 Aug 23 nicklas 145     html += '</tr>';
7289 18 Aug 23 nicklas 146     
7289 18 Aug 23 nicklas 147     html += '<tr>';
7341 11 Sep 23 nicklas 148     html += '<th>Parent items - Tumor / Normal</th>';
7289 18 Aug 23 nicklas 149     html += '<th class="dottedleft">Parameters</th>';
7289 18 Aug 23 nicklas 150     html += '<th class="dottedleft">Results</th>';
7289 18 Aug 23 nicklas 151     html += '<th class="dottedleft">Sunrise plot</th>';
7289 18 Aug 23 nicklas 152     html += '<th>ASCAT profile</th>';
7289 18 Aug 23 nicklas 153     html += '<th>Segmentation plot</th>';
7289 18 Aug 23 nicklas 154
7289 18 Aug 23 nicklas 155     html += '<th class="dottedleft">Job</th>';
7289 18 Aug 23 nicklas 156     html += '<th class="dottedleft">Files</th>';
7289 18 Aug 23 nicklas 157     
7293 22 Aug 23 nicklas 158     html += '<th class="dottedleft">Results</th>';
7293 22 Aug 23 nicklas 159     html += '<th>Re-analyze</th>';
7293 22 Aug 23 nicklas 160     html += '<th>Delete</th>';
7289 18 Aug 23 nicklas 161     html += '<th class="dottedleft">Comments</th>';
7289 18 Aug 23 nicklas 162     html += '</tr>';
7289 18 Aug 23 nicklas 163     html += '</thead>';
7289 18 Aug 23 nicklas 164     html += '<tbody>';
7289 18 Aug 23 nicklas 165     var numWithError = 0;
7289 18 Aug 23 nicklas 166     for (var ascatNo = 0; ascatNo < ascatItems.length; ascatNo++)
7289 18 Aug 23 nicklas 167     {
7289 18 Aug 23 nicklas 168       var item = ascatItems[ascatNo];
7289 18 Aug 23 nicklas 169       var job = item.job;
7341 11 Sep 23 nicklas 170       var tumor = item.tumor;
7341 11 Sep 23 nicklas 171       var normal = item.normal;
7289 18 Aug 23 nicklas 172       var isError = job.status == 'ERROR';
7289 18 Aug 23 nicklas 173       
7289 18 Aug 23 nicklas 174       html += '<tr class="highlight ' + (ascatNo % 4 < 2 ? 'evenrow' : 'oddrow') + '">';
7341 11 Sep 23 nicklas 175       html += '<td class="prompt if-yellow"><b>'+Strings.encodeTags(item.name)+'</b>';
7341 11 Sep 23 nicklas 176       html += '<span class="link case-summary" data-name="'+Strings.encodeTags(item.name)+'" title="Show case summary"><img src="../images/case_summary.png"></span>';
7341 11 Sep 23 nicklas 177       // Parent tumor and normal alignments
7341 11 Sep 23 nicklas 178       html += '<div class="aligned-table">';
7341 11 Sep 23 nicklas 179       html += '<div>Aligned pairs</div>';
7341 11 Sep 23 nicklas 180       html += '<div>'+Reggie.formatCount(tumor.ALIGNED_PAIRS)+'</div>';
7341 11 Sep 23 nicklas 181       html += '<div>'+Reggie.formatCount(normal.ALIGNED_PAIRS)+'</div>';
7341 11 Sep 23 nicklas 182       html += '<div>Coverage</div>';
7341 11 Sep 23 nicklas 183       html += '<div>'+Reggie.formatNumber(tumor.MEAN_COVERAGE)+'&thinsp;±&thinsp;'+Reggie.formatNumber(tumor.SD_COVERAGE)+'</div>';
7341 11 Sep 23 nicklas 184       html += '<div>'+Reggie.formatNumber(normal.MEAN_COVERAGE)+'&thinsp;±&thinsp;'+Reggie.formatNumber(normal.SD_COVERAGE)+'</div>';
7341 11 Sep 23 nicklas 185       html += '<div>Duplication</div>';
7341 11 Sep 23 nicklas 186       html += '<div>'+Reggie.formatNumber(tumor.FRACTION_DUPLICATION*100, '%', 0)+' (<span title="Optical duplicates">'+Reggie.formatNumber(tumor.FRACTION_OPTICAL_DUPLICATION*100, '%', 0)+'</span>)</div>';
7341 11 Sep 23 nicklas 187       html += '<div>'+Reggie.formatNumber(normal.FRACTION_DUPLICATION*100, '%', 0)+' (<span title="Optical duplicates">'+Reggie.formatNumber(normal.FRACTION_OPTICAL_DUPLICATION*100, '%', 0)+'</span>)</div>';
7341 11 Sep 23 nicklas 188       html += '</div>';
7341 11 Sep 23 nicklas 189       html += '</td>';
7289 18 Aug 23 nicklas 190       // Parameters
7289 18 Aug 23 nicklas 191       html += '<td class="dottedleft">';
7289 18 Aug 23 nicklas 192       html += '<div class="smalltable">';
7341 11 Sep 23 nicklas 193       if (item.MinDepth) html += '<div>Min depth</div><div>'+Numbers.formatNumber(item.MinDepth)+'</div>';
7341 11 Sep 23 nicklas 194       if (item.Penalty) html += '<div>Penalty</div><div>'+Numbers.formatNumber(item.Penalty)+'</div>';
7341 11 Sep 23 nicklas 195       if (item.ImbalanceTest) html += '<div>Imbalance test</div><div>'+Strings.encodeTags(item.ImbalanceTest)+'</div>';
7289 18 Aug 23 nicklas 196       if (item.TauManual) html += '<div>Tau</div><div>'+Numbers.formatNumber(item.TauManual, 2)+'</div>';
7289 18 Aug 23 nicklas 197       if (item.RhoManual) html += '<div>Rho</div><div>'+Numbers.formatNumber(item.RhoManual, 2)+'</div>';
7289 18 Aug 23 nicklas 198       if (item.PsiManual) html += '<div>Psi</div><div>'+Numbers.formatNumber(item.PsiManual, 2)+'</div>';
7289 18 Aug 23 nicklas 199       html += '</div>';
7289 18 Aug 23 nicklas 200       html += '</td>';
7289 18 Aug 23 nicklas 201       
7289 18 Aug 23 nicklas 202       // Results
7289 18 Aug 23 nicklas 203       html += '<td class="dottedleft">';
7289 18 Aug 23 nicklas 204       html += '<div class="smalltable">';
7421 14 Nov 23 nicklas 205       if (item.Purity == null && item.Ploidy == null)
7421 14 Nov 23 nicklas 206       {
7421 14 Nov 23 nicklas 207         html += '<div>No solution</div>';
7421 14 Nov 23 nicklas 208       }
7421 14 Nov 23 nicklas 209       else
7421 14 Nov 23 nicklas 210       {
7421 14 Nov 23 nicklas 211         html += '<div>Purity</div><div>'+(item.Purity != null ? Numbers.formatNumber(item.Purity*100, 0, '%'):'')+'</div>';
7421 14 Nov 23 nicklas 212         html += '<div>Ploidy</div><div>'+Numbers.formatNumber(item.Ploidy, 2)+'</div>';
7421 14 Nov 23 nicklas 213         html += '<div title="Goodness of fit">GoF</div><div>'+Numbers.formatNumber(item.GoodnessOfFit, 1, '%')+'</div>';
7421 14 Nov 23 nicklas 214         html += '<div title="Normal contamination">NC</div><div>'+(item.NormalContamination != null ? Numbers.formatNumber(item.NormalContamination*100, 0, '%'):'')+'</div>';
7421 14 Nov 23 nicklas 215         if (item.NonAberrant=='Yes') html += '<div style="grid-column-start: 1; grid-column-end: 3;">Non-aberrant</div>';
7421 14 Nov 23 nicklas 216       }
7289 18 Aug 23 nicklas 217       html += '</div>';
7289 18 Aug 23 nicklas 218       
7289 18 Aug 23 nicklas 219       html += '<td class="dottedleft">';
7289 18 Aug 23 nicklas 220       if  (item.sunrisePlot)
7289 18 Aug 23 nicklas 221       {
7295 23 Aug 23 nicklas 222         html += '<img class="link plot-link" data-file-id="'+item.sunrisePlot.id+'" data-width="800" data-height="800" title="View full image" src="../../thumbnails.jar/Thumbnails.servlet?ID='+App.getSessionId()+'&file='+item.sunrisePlot.id+'&size=MEDIUM">';
7289 18 Aug 23 nicklas 223       }
7289 18 Aug 23 nicklas 224       html += '</td>';
7289 18 Aug 23 nicklas 225       html += '<td>';
7289 18 Aug 23 nicklas 226       if  (item.ascatPlot)
7289 18 Aug 23 nicklas 227       {
7295 23 Aug 23 nicklas 228         html += '<img class="link plot-link" data-file-id="'+item.ascatPlot.id+'" data-width="1500" data-height="800" title="View full image" src="../../thumbnails.jar/Thumbnails.servlet?ID='+App.getSessionId()+'&file='+item.ascatPlot.id+'&size=XLARGE">';
7289 18 Aug 23 nicklas 229       }
7289 18 Aug 23 nicklas 230       html += '</td>';
7289 18 Aug 23 nicklas 231       html += '<td>';
7289 18 Aug 23 nicklas 232       if  (item.segmentationPlot)
7289 18 Aug 23 nicklas 233       {
7295 23 Aug 23 nicklas 234         html += '<img class="link plot-link" data-file-id="'+item.segmentationPlot.id+'" data-width="1200" data-height="800" title="View full image" src="../../thumbnails.jar/Thumbnails.servlet?ID='+App.getSessionId()+'&file='+item.segmentationPlot.id+'&size=LARGE">';
7289 18 Aug 23 nicklas 235       }
7289 18 Aug 23 nicklas 236       html += '</td>';
7289 18 Aug 23 nicklas 237       
7289 18 Aug 23 nicklas 238       html += '<td class="dottedleft">';
7289 18 Aug 23 nicklas 239       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>';
7289 18 Aug 23 nicklas 240       if (job.debug)
7289 18 Aug 23 nicklas 241       {
7289 18 Aug 23 nicklas 242         html += '<img src="../images/'+(isError?'bug-red':'bug-green')+'.png" title="This job was run in DEBUG mode">'
7289 18 Aug 23 nicklas 243       }
7289 18 Aug 23 nicklas 244       html += '</td>';
7341 11 Sep 23 nicklas 245       html += '<td class="dottedleft">';
7289 18 Aug 23 nicklas 246       if (item.DataFilesFolder && job.server)
7289 18 Aug 23 nicklas 247       {
7289 18 Aug 23 nicklas 248         html += '<span class="link file-link" data-server="'+Strings.encodeTags(job.server)+'" data-folder="'+Strings.encodeTags(item.DataFilesFolder)+'" data-item-id="'+item.id+'" title="View generated files"><img src="../images/remote_folder.png"></span>';
7289 18 Aug 23 nicklas 249       }
7341 11 Sep 23 nicklas 250       if (item.imbalanceTest)
7289 18 Aug 23 nicklas 251       {
7405 08 Nov 23 nicklas 252         html += '<span class="link view-tabular" data-file-id="'+item.imbalanceTest.id+'" data-width="600" data-height="800" title="View allelic imbalance test scores"><img src="../images/report.png"></span>';
7289 18 Aug 23 nicklas 253       }
7405 08 Nov 23 nicklas 254       if (item.stats)
7405 08 Nov 23 nicklas 255       {
7405 08 Nov 23 nicklas 256         html += '<span class="link view-tabular" data-file-id="'+item.stats.id+'" data-width="600" data-height="800" title="View more metrics"><img src="../images/metrics.png"></span>';
7405 08 Nov 23 nicklas 257       }
7341 11 Sep 23 nicklas 258       html += '</td>';
7289 18 Aug 23 nicklas 259       
7289 18 Aug 23 nicklas 260       var reanalyzeChecked = isError ? ' checked' : '';
7289 18 Aug 23 nicklas 261       var deleteChecked = reanalyzeChecked;
7293 22 Aug 23 nicklas 262       var commentDisabled = isError ? ' disabled' : '';
7289 18 Aug 23 nicklas 263       if (isError) numWithError++;
7289 18 Aug 23 nicklas 264
7293 22 Aug 23 nicklas 265       html += '<td class="dottedleft ascat-results">';
7293 22 Aug 23 nicklas 266       if (!isError)
7293 22 Aug 23 nicklas 267       {
7293 22 Aug 23 nicklas 268         html += '<label><input type="radio" id="undecided.'+item.id+'" name="results.'+item.id+'" checked value="Undecided">Undecided</label><br>';
7293 22 Aug 23 nicklas 269         html += '<label><input type="radio" id="accept.'+item.id+'" name="results.'+item.id+'" value="Accepted">Accepted</label><br>';
7293 22 Aug 23 nicklas 270         html += '<label><input type="radio" id="noaccept.'+item.id+'" name="results.'+item.id+'" value="NotAccepted">Not accepted</label><br>';
7293 22 Aug 23 nicklas 271       }
7293 22 Aug 23 nicklas 272       html += '</td>';
7293 22 Aug 23 nicklas 273       html += '<td><input type="checkbox" id="reanalyze.'+item.id+'" name="reanalyze.'+item.id+'"'+reanalyzeChecked+'></td>';
7293 22 Aug 23 nicklas 274       html += '<td><input type="checkbox" id="delete.'+item.id+'" name="delete.'+item.id+'" data-item-id="'+item.id+'" '+deleteChecked+'></td>';
7293 22 Aug 23 nicklas 275       html += '<td class="dottedleft comment"><input type="text" id="comment.'+item.id+'" name="comment.'+item.id+'" '+commentDisabled+' value="'+Strings.encodeTags(item.comment)+'"></td>';
7289 18 Aug 23 nicklas 276       html += '</tr>';
7289 18 Aug 23 nicklas 277     }
7289 18 Aug 23 nicklas 278     html += '</tbody>';
7289 18 Aug 23 nicklas 279     html += '</table>';
7313 29 Aug 23 nicklas 280     Doc.element('ascatResults').innerHTML = html;
7289 18 Aug 23 nicklas 281     
7313 29 Aug 23 nicklas 282     Forms.linkCheckboxesWithLabels(Doc.element('ascatResults'));
7289 18 Aug 23 nicklas 283     
7341 11 Sep 23 nicklas 284     // Case summary links
7341 11 Sep 23 nicklas 285     var cs = document.getElementsByClassName('case-summary');
7341 11 Sep 23 nicklas 286     for (var i = 0; i < cs.length; i++)
7341 11 Sep 23 nicklas 287     {
7341 11 Sep 23 nicklas 288       Events.addEventHandler(cs[i], 'click', Reggie.openCaseSummaryPopupOnEvent);
7341 11 Sep 23 nicklas 289     }
7341 11 Sep 23 nicklas 290
7293 22 Aug 23 nicklas 291     // If 'delete' is active the other options should be disabled
7293 22 Aug 23 nicklas 292     for (var ascatNo = 0; ascatNo < ascatItems.length; ascatNo++)
7293 22 Aug 23 nicklas 293     {
7293 22 Aug 23 nicklas 294       var item = ascatItems[ascatNo];
7293 22 Aug 23 nicklas 295       Events.addEventHandler('delete.'+item.id, 'click', ascat.deleteOnChange);
7293 22 Aug 23 nicklas 296     }
7293 22 Aug 23 nicklas 297     
7341 11 Sep 23 nicklas 298     // Add click handler to tabular files
7341 11 Sep 23 nicklas 299     var tabular = document.getElementsByClassName('view-tabular');
7341 11 Sep 23 nicklas 300     for (var i = 0; i < tabular.length; i++)
7341 11 Sep 23 nicklas 301     {
7341 11 Sep 23 nicklas 302       Events.addEventHandler(tabular[i], 'click', ascat.viewTabular);
7341 11 Sep 23 nicklas 303     }
7341 11 Sep 23 nicklas 304     
7289 18 Aug 23 nicklas 305     // Add click handler to plot
7289 18 Aug 23 nicklas 306     var plots = document.getElementsByClassName('plot-link');
7289 18 Aug 23 nicklas 307     for (var i = 0; i < plots.length; i++)
7289 18 Aug 23 nicklas 308     {
7289 18 Aug 23 nicklas 309       Events.addEventHandler(plots[i], 'click', ascat.plotOnClick);
7289 18 Aug 23 nicklas 310     }
7289 18 Aug 23 nicklas 311     
7289 18 Aug 23 nicklas 312     // Add click handler to items
7289 18 Aug 23 nicklas 313     var clickableItems = document.getElementsByClassName('item-link');
7289 18 Aug 23 nicklas 314     for (var i = 0; i < clickableItems.length; i++)
7289 18 Aug 23 nicklas 315     {
7289 18 Aug 23 nicklas 316       Events.addEventHandler(clickableItems[i], 'click', Items.itemOnClick);
7289 18 Aug 23 nicklas 317     }
7289 18 Aug 23 nicklas 318     
7289 18 Aug 23 nicklas 319     // Add click handler to file links
7289 18 Aug 23 nicklas 320     var clickableItems = document.getElementsByClassName('file-link');
7289 18 Aug 23 nicklas 321     for (var i = 0; i < clickableItems.length; i++)
7289 18 Aug 23 nicklas 322     {
7289 18 Aug 23 nicklas 323       Events.addEventHandler(clickableItems[i], 'click', ascat.fileLinkOnClick);
7289 18 Aug 23 nicklas 324     }
7289 18 Aug 23 nicklas 325
7313 29 Aug 23 nicklas 326     Wizard.setCurrentStep(2);
7313 29 Aug 23 nicklas 327     Doc.show('step-2');
7289 18 Aug 23 nicklas 328     Doc.show('goregister');
7313 29 Aug 23 nicklas 329     Doc.show('gocancel');
7289 18 Aug 23 nicklas 330   }
7289 18 Aug 23 nicklas 331   
7293 22 Aug 23 nicklas 332   ascat.deleteOnChange = function(event)
7293 22 Aug 23 nicklas 333   {
7293 22 Aug 23 nicklas 334     var itemId = Data.get(event.currentTarget, 'item-id');
7293 22 Aug 23 nicklas 335     var disable = event.currentTarget.checked;
7293 22 Aug 23 nicklas 336     ascat.disableElement('undecided.'+itemId, disable);
7293 22 Aug 23 nicklas 337     ascat.disableElement('accept.'+itemId, disable);
7293 22 Aug 23 nicklas 338     ascat.disableElement('noaccept.'+itemId, disable);
7293 22 Aug 23 nicklas 339     ascat.disableElement('comment.'+itemId, disable);
7293 22 Aug 23 nicklas 340   }
7293 22 Aug 23 nicklas 341   
7293 22 Aug 23 nicklas 342   ascat.disableElement = function(element, disable)
7293 22 Aug 23 nicklas 343   {
7293 22 Aug 23 nicklas 344     element = Doc.element(element);
7293 22 Aug 23 nicklas 345     if (element) element.disabled = disable;
7293 22 Aug 23 nicklas 346   }
7293 22 Aug 23 nicklas 347   
7341 11 Sep 23 nicklas 348   ascat.viewTabular = function(event)
7341 11 Sep 23 nicklas 349   {
7341 11 Sep 23 nicklas 350     var fileId = Data.int(event.currentTarget, 'file-id');
7341 11 Sep 23 nicklas 351     var width = Data.get(event.currentTarget, 'width', 900);
7341 11 Sep 23 nicklas 352     var height = Data.get(event.currentTarget, 'height', 600);
7341 11 Sep 23 nicklas 353     var url = '../Session.servlet?ID=' + App.getSessionId();
7341 11 Sep 23 nicklas 354     url += '&cmd=ViewTabular';
7341 11 Sep 23 nicklas 355     url += '&fileId='+fileId;
7341 11 Sep 23 nicklas 356     Dialogs.openPopup(url, 'ViewTabular'+fileId, width, height);
7341 11 Sep 23 nicklas 357   }
7341 11 Sep 23 nicklas 358   
7289 18 Aug 23 nicklas 359   ascat.plotOnClick = function(event)
7289 18 Aug 23 nicklas 360   {
7289 18 Aug 23 nicklas 361     var fileId = Data.get(event.currentTarget, 'file-id');
7295 23 Aug 23 nicklas 362     var width = Data.get(event.currentTarget, 'width', 900);
7295 23 Aug 23 nicklas 363     var height = Data.get(event.currentTarget, 'height', 600);
7289 18 Aug 23 nicklas 364     var controller = Items.getController('FILE');
7289 18 Aug 23 nicklas 365     var url = App.getRoot() + controller.url;
7289 18 Aug 23 nicklas 366     url += '?ID='+App.getSessionId();
7289 18 Aug 23 nicklas 367     url += '&cmd=ViewFile&item_id='+fileId;
7295 23 Aug 23 nicklas 368     Dialogs.openPopup(url, 'AscatPlot'+fileId, width, height);
7289 18 Aug 23 nicklas 369   }
7289 18 Aug 23 nicklas 370   
7289 18 Aug 23 nicklas 371   ascat.fileLinkOnClick = function(event)
7289 18 Aug 23 nicklas 372   {
7289 18 Aug 23 nicklas 373     var folder = Data.get(event.currentTarget, 'folder');
7289 18 Aug 23 nicklas 374     var server = Data.get(event.currentTarget, 'server');
7289 18 Aug 23 nicklas 375     var itemId = Data.get(event.currentTarget, 'item-id');
7289 18 Aug 23 nicklas 376     server = server.replace(/\s*\[.*\]/, '');
7289 18 Aug 23 nicklas 377     var url = '../analysis/view_remote_files.jsp?ID=' + App.getSessionId();
7289 18 Aug 23 nicklas 378     url += '&clusterId='+server;
7289 18 Aug 23 nicklas 379     url += '&archive=project-archive-dna';
7289 18 Aug 23 nicklas 380     url += '&path='+encodeURIComponent(folder);
7289 18 Aug 23 nicklas 381     url += '&itemType=DERIVEDBIOASSAY&itemId='+itemId;
7289 18 Aug 23 nicklas 382     Dialogs.openPopup(url, 'ViewProjectFiles', 750, 500);
7289 18 Aug 23 nicklas 383   }
7289 18 Aug 23 nicklas 384   
7289 18 Aug 23 nicklas 385   ascat.submit = function()
7289 18 Aug 23 nicklas 386   {
7289 18 Aug 23 nicklas 387     var frm = document.forms['reggie'];
7289 18 Aug 23 nicklas 388     var submitInfo = {};
7289 18 Aug 23 nicklas 389     
7289 18 Aug 23 nicklas 390     var all = [];
7289 18 Aug 23 nicklas 391     submitInfo.ascatItems = all;
7289 18 Aug 23 nicklas 392     for (var ascatNo = 0; ascatNo < ascatItems.length; ascatNo++)
7289 18 Aug 23 nicklas 393     {
7289 18 Aug 23 nicklas 394       var item = ascatItems[ascatNo];
7289 18 Aug 23 nicklas 395       var tmp = {};
7289 18 Aug 23 nicklas 396       tmp.id = item.id;
7289 18 Aug 23 nicklas 397       
7293 22 Aug 23 nicklas 398       tmp.reAnalyze = frm['reanalyze.'+item.id].checked;
7289 18 Aug 23 nicklas 399       tmp.delete = frm['delete.'+item.id].checked;
7289 18 Aug 23 nicklas 400       tmp.comment = frm['comment.'+item.id].value;
7293 22 Aug 23 nicklas 401       if (frm['results.'+item.id])
7293 22 Aug 23 nicklas 402       {
7293 22 Aug 23 nicklas 403         tmp.ascatResult = frm['results.'+item.id].value;
7293 22 Aug 23 nicklas 404       }
7289 18 Aug 23 nicklas 405       
7289 18 Aug 23 nicklas 406       all[all.length] = tmp;
7289 18 Aug 23 nicklas 407     }
7289 18 Aug 23 nicklas 408
7289 18 Aug 23 nicklas 409     var url = '../Ascat.servlet?ID='+App.getSessionId();
7289 18 Aug 23 nicklas 410     url += '&cmd=RegisterAscatResults';
7289 18 Aug 23 nicklas 411     Wizard.showLoadingAnimation('Performing registration...');
7289 18 Aug 23 nicklas 412     Wizard.asyncJsonRequest(url, ascat.submissionResults, 'POST', JSON.stringify(submitInfo));
7289 18 Aug 23 nicklas 413   }
7289 18 Aug 23 nicklas 414   
7289 18 Aug 23 nicklas 415   ascat.submissionResults = function(response)
7289 18 Aug 23 nicklas 416   {
7289 18 Aug 23 nicklas 417     Wizard.showFinalMessage(response.messages);
7289 18 Aug 23 nicklas 418     Doc.show('gorestart');
7289 18 Aug 23 nicklas 419   }
7289 18 Aug 23 nicklas 420   
7289 18 Aug 23 nicklas 421   return ascat;
7289 18 Aug 23 nicklas 422 }();
7289 18 Aug 23 nicklas 423
7289 18 Aug 23 nicklas 424 Doc.onLoad(Ascat.initPage);
7289 18 Aug 23 nicklas 425