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

Code
Comments
Other
Rev Date Author Line
7436 15 Nov 23 nicklas 1 var VCall = function()
7436 15 Nov 23 nicklas 2 {
7436 15 Nov 23 nicklas 3   var vcall = {};
7436 15 Nov 23 nicklas 4   var debug = 0;
7436 15 Nov 23 nicklas 5   
7436 15 Nov 23 nicklas 6   var JOB_IMAGE = { 'DONE': 'ok.png', 'ERROR': 'error.png'};
7436 15 Nov 23 nicklas 7   var rawBioAssays;
7436 15 Nov 23 nicklas 8   
7436 15 Nov 23 nicklas 9   // Page initialization
7436 15 Nov 23 nicklas 10   vcall.initPage = function()
7436 15 Nov 23 nicklas 11   {
7436 15 Nov 23 nicklas 12     // Step 1
7436 15 Nov 23 nicklas 13     Events.addEventHandler('deleteItemsCreatedByFailedJobs', 'change', vcall.deleteItemsCreatedByFailedJobsOnChange);
7436 15 Nov 23 nicklas 14
7436 15 Nov 23 nicklas 15     // Navigation
7436 15 Nov 23 nicklas 16     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
7436 15 Nov 23 nicklas 17     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
7436 15 Nov 23 nicklas 18     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
7436 15 Nov 23 nicklas 19     Buttons.addClickHandler('goregister', Wizard.goRegister);
7436 15 Nov 23 nicklas 20       
7436 15 Nov 23 nicklas 21     // Final registration
7436 15 Nov 23 nicklas 22     Events.addEventHandler('wizard', 'wizard-submit', vcall.submit);
7436 15 Nov 23 nicklas 23
7436 15 Nov 23 nicklas 24     Wizard.showLoadingAnimation('Loading bioassays...');
7436 15 Nov 23 nicklas 25     var url = '../WgsVariantCalling.servlet?ID='+App.getSessionId();
7436 15 Nov 23 nicklas 26     url += '&cmd=GetUnconfirmed';
7436 15 Nov 23 nicklas 27     Wizard.asyncJsonRequest(url, vcall.initializeStep1);
7436 15 Nov 23 nicklas 28   }
7436 15 Nov 23 nicklas 29   
7436 15 Nov 23 nicklas 30   // --- Step 1 -----------------------------------
7436 15 Nov 23 nicklas 31   vcall.initializeStep1 = function(response)
7436 15 Nov 23 nicklas 32   {
7436 15 Nov 23 nicklas 33     rawBioAssays = response.rawBioAssays;
7436 15 Nov 23 nicklas 34     if (rawBioAssays.length == 0)
7436 15 Nov 23 nicklas 35     {
7436 15 Nov 23 nicklas 36       Wizard.setFatalError('No raw bioassays available for processing.');
7436 15 Nov 23 nicklas 37       return;
7436 15 Nov 23 nicklas 38     }
7436 15 Nov 23 nicklas 39     
7436 15 Nov 23 nicklas 40     var html = '<table id="rawBioAssaysTable">';
7436 15 Nov 23 nicklas 41     html += '<thead class="bg-filled-100">';
7436 15 Nov 23 nicklas 42     // Header row
7436 15 Nov 23 nicklas 43     html += '<tr>';
7436 15 Nov 23 nicklas 44     html += '<th></th>';
7436 15 Nov 23 nicklas 45     html += '<th class="dottedleft"></th>';
7440 16 Nov 23 nicklas 46     html += '<th class="dottedleft"></th>';
7440 16 Nov 23 nicklas 47     html += '<th>Panel</th>';
7440 16 Nov 23 nicklas 48     html += '<th colspan="4">Variant calling</th>'
7436 15 Nov 23 nicklas 49     html += '<th class="dottedleft" colspan="2">Actions</th>';
7436 15 Nov 23 nicklas 50     html += '<th class="dottedleft">Comment</th>';
7436 15 Nov 23 nicklas 51     html += '</tr>';
7436 15 Nov 23 nicklas 52     
7436 15 Nov 23 nicklas 53     html += '<tr>';
7436 15 Nov 23 nicklas 54     html += '<th>Variant call</th>';
7436 15 Nov 23 nicklas 55     html += '<th class="dottedleft">Normal alignment</th>';
7436 15 Nov 23 nicklas 56     html += '<th class="dottedleft">Job</th>'
7440 16 Nov 23 nicklas 57     html += '<th>of normals</th>';
7436 15 Nov 23 nicklas 58     html += '<th>Callable</th>';
7436 15 Nov 23 nicklas 59     html += '<th>Raw</th>';
7436 15 Nov 23 nicklas 60     html += '<th>Filtered</th>';
7436 15 Nov 23 nicklas 61     html += '<th>Files</th>';
7436 15 Nov 23 nicklas 62     html += '<th class="dottedleft"><span id="rerun" data-prefix="rerun" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Re-run</span></th>';
7436 15 Nov 23 nicklas 63     html += '<th><span id="confirm" data-prefix="confirm" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Confirm</span></th>';
7436 15 Nov 23 nicklas 64     html += '<th class="dottedleft"></th>';
7436 15 Nov 23 nicklas 65     html += '</tr>';
7436 15 Nov 23 nicklas 66     html += '</thead>';
7436 15 Nov 23 nicklas 67     html += '<tbody>';
7436 15 Nov 23 nicklas 68     var numWithError = 0;
7436 15 Nov 23 nicklas 69     for (var rawNo = 0; rawNo < rawBioAssays.length; rawNo++)
7436 15 Nov 23 nicklas 70     {
7436 15 Nov 23 nicklas 71       var raw = rawBioAssays[rawNo];
7436 15 Nov 23 nicklas 72       var normal = raw.normal;
7436 15 Nov 23 nicklas 73
7436 15 Nov 23 nicklas 74       var vcallJob = raw.vcallJob;
7436 15 Nov 23 nicklas 75       var isError = !raw.vcfFile || raw.VariantsPassedFilter == null;
7436 15 Nov 23 nicklas 76   
7436 15 Nov 23 nicklas 77       html += '<tr class="highlight ' + (rawNo % 4 < 2 ? 'evenrow' : 'oddrow') + '">';
7436 15 Nov 23 nicklas 78       html += '<td class="prompt if-yellow">'+Strings.encodeTags(raw.name)+'</td>';
7436 15 Nov 23 nicklas 79       html += '<td class="dottedleft">'+(normal ? Strings.encodeTags(normal.name) : '-') +'</td>';
7436 15 Nov 23 nicklas 80
7436 15 Nov 23 nicklas 81       html += '<td class="dottedleft">';
7436 15 Nov 23 nicklas 82       if (vcallJob)
7436 15 Nov 23 nicklas 83       {
7436 15 Nov 23 nicklas 84         isError |= vcallJob.status == 'ERROR';
7436 15 Nov 23 nicklas 85         var image = JOB_IMAGE[vcallJob.status];
7436 15 Nov 23 nicklas 86         if (!isError && !raw.vcfFile) image = 'warning.png';
7436 15 Nov 23 nicklas 87         html += '<span class="link item-link" data-item-type="JOB" data-item-id="'+vcallJob.id+'" title="'+Strings.encodeTags(vcallJob.statusMessage)+'"><img src="../images/'+image+'"></span>';
7436 15 Nov 23 nicklas 88       }
7436 15 Nov 23 nicklas 89       html += '</td>';
7440 16 Nov 23 nicklas 90       html += '<td>'+Strings.encodeTags(raw.PanelOfNormals)+'</td>';
7436 15 Nov 23 nicklas 91       html += '<td>'+Reggie.formatCount(raw.CallableBases, '-')+'</td>';
7436 15 Nov 23 nicklas 92       html += '<td>'+Reggie.formatCount(raw.VariantsRaw, '-')+'</td>';
7436 15 Nov 23 nicklas 93       html += '<td>'+Reggie.formatCount(raw.VariantsPassedFilter);
7436 15 Nov 23 nicklas 94       if (raw.vcfFile)
7436 15 Nov 23 nicklas 95       {
7436 15 Nov 23 nicklas 96         html += ' <span class="link vcf-link" data-file-id="'+raw.vcfFile.id+'" data-item-id="'+raw.id+'" title="View summary for the variants"><img src="../images/vcf_file.png" style="margin-left: 2px;"></span>';
7436 15 Nov 23 nicklas 97       }
7436 15 Nov 23 nicklas 98       html += '</td>';
7436 15 Nov 23 nicklas 99
7436 15 Nov 23 nicklas 100       if (raw.DataFilesFolder && vcallJob && vcallJob.server)
7436 15 Nov 23 nicklas 101       {
7436 15 Nov 23 nicklas 102         html += '<td>';
7436 15 Nov 23 nicklas 103         html += '<span class="link file-link" data-server="'+Strings.encodeTags(vcallJob.server)+'" data-folder="'+Strings.encodeTags(raw.DataFilesFolder)+'" data-item-id="'+raw.id+'" title="View generated files"><img src="../images/remote_folder.png"></span>';
7436 15 Nov 23 nicklas 104         html += '</td>';
7436 15 Nov 23 nicklas 105       }
7436 15 Nov 23 nicklas 106       else
7436 15 Nov 23 nicklas 107       {
7436 15 Nov 23 nicklas 108         html += '<td>-</td>';
7436 15 Nov 23 nicklas 109       }
7436 15 Nov 23 nicklas 110       // Do not allow flagging external or stratagene
7436 15 Nov 23 nicklas 111       var confirmChecked = !isError ? ' checked' : '';
7436 15 Nov 23 nicklas 112       var reRunChecked = isError ? ' checked' : '';
7436 15 Nov 23 nicklas 113       var confirmDisabled = isError ? ' disabled' : '';
7436 15 Nov 23 nicklas 114       if (isError) numWithError++;
7436 15 Nov 23 nicklas 115
7436 15 Nov 23 nicklas 116       html += '<td class="dottedleft"><input type="checkbox" name="rerun.'+raw.id+'" id="rerun.'+raw.id+'" data-item-id="'+raw.id+'"'+reRunChecked+'></td>';
7436 15 Nov 23 nicklas 117       html += '<td><input type="checkbox" name="confirm.'+raw.id+'" id="confirm.'+raw.id+'" data-item-id="'+raw.id+'"'+confirmChecked+confirmDisabled+'></td>';
7436 15 Nov 23 nicklas 118       html += '<td class="dottedleft comment"><input type="text" name="comment.'+raw.id+'" id="comment.'+raw.id+'" data-item-id="'+raw.id+'"></td>';
7436 15 Nov 23 nicklas 119       html += '</tr>';
7436 15 Nov 23 nicklas 120     }
7436 15 Nov 23 nicklas 121     html += '</tbody>';
7436 15 Nov 23 nicklas 122     html += '</table>';
7436 15 Nov 23 nicklas 123     Doc.element('rawBioAssays').innerHTML = html;
7436 15 Nov 23 nicklas 124     
7436 15 Nov 23 nicklas 125     Events.addEventHandler('rerun', 'click', vcall.toggleSelection);
7436 15 Nov 23 nicklas 126     Events.addEventHandler('confirm', 'click', vcall.toggleSelection);
7436 15 Nov 23 nicklas 127
7436 15 Nov 23 nicklas 128     // Add click handler to items
7436 15 Nov 23 nicklas 129     var clickableItems = document.getElementsByClassName('item-link');
7436 15 Nov 23 nicklas 130     for (var i = 0; i < clickableItems.length; i++)
7436 15 Nov 23 nicklas 131     {
7436 15 Nov 23 nicklas 132       Events.addEventHandler(clickableItems[i], 'click', Items.itemOnClick);
7436 15 Nov 23 nicklas 133     }
7436 15 Nov 23 nicklas 134     
7436 15 Nov 23 nicklas 135     // Add click handler to file links
7436 15 Nov 23 nicklas 136     var clickableItems = document.getElementsByClassName('file-link');
7436 15 Nov 23 nicklas 137     for (var i = 0; i < clickableItems.length; i++)
7436 15 Nov 23 nicklas 138     {
7436 15 Nov 23 nicklas 139       Events.addEventHandler(clickableItems[i], 'click', vcall.fileLinkOnClick);
7436 15 Nov 23 nicklas 140     }
7436 15 Nov 23 nicklas 141
7436 15 Nov 23 nicklas 142     var linkedVcf = document.getElementsByClassName('vcf-link');
7436 15 Nov 23 nicklas 143     for (var i = 0; i < linkedVcf.length; i++)
7436 15 Nov 23 nicklas 144     {
7436 15 Nov 23 nicklas 145       Events.addEventHandler(linkedVcf[i], 'click', vcall.vcfLinkOnClick);
7436 15 Nov 23 nicklas 146     }
7436 15 Nov 23 nicklas 147     
7436 15 Nov 23 nicklas 148     // If 'rerun' is active (and Delete items selected for re-run) the other options should be disabled
7436 15 Nov 23 nicklas 149     for (var rawNo = 0; rawNo < rawBioAssays.length; rawNo++)
7436 15 Nov 23 nicklas 150     {
7436 15 Nov 23 nicklas 151       var rba = rawBioAssays[rawNo];
7436 15 Nov 23 nicklas 152       Events.addEventHandler('rerun.'+rba.id, 'change', vcall.rerunOnChange);
7436 15 Nov 23 nicklas 153     }
7436 15 Nov 23 nicklas 154
7436 15 Nov 23 nicklas 155     Doc.show('step-1');
7436 15 Nov 23 nicklas 156     Doc.show('goregister');
7436 15 Nov 23 nicklas 157   }
7436 15 Nov 23 nicklas 158   
7436 15 Nov 23 nicklas 159   vcall.fileLinkOnClick = function(event)
7436 15 Nov 23 nicklas 160   {
7436 15 Nov 23 nicklas 161     var folder = Data.get(event.currentTarget, 'folder');
7436 15 Nov 23 nicklas 162     var server = Data.get(event.currentTarget, 'server');
7436 15 Nov 23 nicklas 163     var itemId = Data.get(event.currentTarget, 'item-id');
7436 15 Nov 23 nicklas 164     server = server.replace(/\s*\[.*\]/, '');
7436 15 Nov 23 nicklas 165     var url = '../analysis/view_remote_files.jsp?ID=' + App.getSessionId();
7436 15 Nov 23 nicklas 166     url += '&clusterId='+server;
7436 15 Nov 23 nicklas 167     url += '&archive=project-archive-dna';
7436 15 Nov 23 nicklas 168     url += '&path='+encodeURIComponent(folder);
7436 15 Nov 23 nicklas 169     url += '&itemType=RAWBIOASSAY&itemId='+itemId;
7436 15 Nov 23 nicklas 170     Dialogs.openPopup(url, 'ViewProjectFiles'+itemId, 750, 500);
7436 15 Nov 23 nicklas 171   }
7436 15 Nov 23 nicklas 172   
7436 15 Nov 23 nicklas 173   vcall.vcfLinkOnClick = function(event)
7436 15 Nov 23 nicklas 174   {
7436 15 Nov 23 nicklas 175     var fileId = Data.int(event.currentTarget, 'file-id');
7436 15 Nov 23 nicklas 176     var itemId = Data.int(event.currentTarget, 'item-id');
7436 15 Nov 23 nicklas 177     var url = 'view_variants.jsp?ID=' + App.getSessionId();
7436 15 Nov 23 nicklas 178     url += '&fileId='+fileId;
7436 15 Nov 23 nicklas 179     url += '&itemId='+itemId;
7436 15 Nov 23 nicklas 180     Dialogs.openPopup(url, 'ViewVcf'+fileId, 1100, 700);
7436 15 Nov 23 nicklas 181   }
7436 15 Nov 23 nicklas 182   
7436 15 Nov 23 nicklas 183   vcall.toggleSelection = function(event)
7436 15 Nov 23 nicklas 184   {
7436 15 Nov 23 nicklas 185     var prefix = Data.get(event.currentTarget, 'prefix');
7436 15 Nov 23 nicklas 186     var specialKey = event.altKey || event.ctrlKey || event.shiftKey;
7436 15 Nov 23 nicklas 187     
7436 15 Nov 23 nicklas 188     var frm = document.forms['reggie'];
7436 15 Nov 23 nicklas 189     for (var rawNo = 0; rawNo < rawBioAssays.length; rawNo++)
7436 15 Nov 23 nicklas 190     {
7436 15 Nov 23 nicklas 191       var raw = rawBioAssays[rawNo];
7436 15 Nov 23 nicklas 192       var chk = frm[prefix+'.'+raw.id];
7436 15 Nov 23 nicklas 193       if (chk && !chk.disabled)
7436 15 Nov 23 nicklas 194       {
7436 15 Nov 23 nicklas 195         chk.checked = specialKey ? false : !chk.checked;
7436 15 Nov 23 nicklas 196         if (prefix=='rerun') Events.sendChangeEvent(chk);
7436 15 Nov 23 nicklas 197       }
7436 15 Nov 23 nicklas 198     }
7436 15 Nov 23 nicklas 199   }
7436 15 Nov 23 nicklas 200   
7436 15 Nov 23 nicklas 201   vcall.rerunOnChange = function(event)
7436 15 Nov 23 nicklas 202   {
7436 15 Nov 23 nicklas 203     var itemId = Data.get(event.currentTarget, 'item-id');
7436 15 Nov 23 nicklas 204     var disable = event.currentTarget.checked && Doc.element('deleteItemsCreatedByFailedJobs').checked;
7436 15 Nov 23 nicklas 205     vcall.disableElement('confirm.'+itemId, disable);
7436 15 Nov 23 nicklas 206     vcall.disableElement('comment.'+itemId, disable);
7436 15 Nov 23 nicklas 207   }
7436 15 Nov 23 nicklas 208   
7436 15 Nov 23 nicklas 209   vcall.disableElement = function(element, disable)
7436 15 Nov 23 nicklas 210   {
7436 15 Nov 23 nicklas 211     element = Doc.element(element);
7436 15 Nov 23 nicklas 212     if (element) element.disabled = disable;
7436 15 Nov 23 nicklas 213   }
7436 15 Nov 23 nicklas 214
7436 15 Nov 23 nicklas 215   vcall.deleteItemsCreatedByFailedJobsOnChange = function()
7436 15 Nov 23 nicklas 216   {
7436 15 Nov 23 nicklas 217     var disable = Doc.element('deleteItemsCreatedByFailedJobs').checked;
7436 15 Nov 23 nicklas 218     var frm = document.forms['reggie'];
7436 15 Nov 23 nicklas 219     for (var rawNo = 0; rawNo < rawBioAssays.length; rawNo++)
7436 15 Nov 23 nicklas 220     {
7436 15 Nov 23 nicklas 221       var raw = rawBioAssays[rawNo];
7436 15 Nov 23 nicklas 222       if (frm['rerun.'+raw.id].checked)
7436 15 Nov 23 nicklas 223       {
7436 15 Nov 23 nicklas 224         vcall.disableElement('confirm.'+raw.id, disable);
7436 15 Nov 23 nicklas 225         vcall.disableElement('comment.'+raw.id, disable);
7436 15 Nov 23 nicklas 226       }
7436 15 Nov 23 nicklas 227     }
7436 15 Nov 23 nicklas 228   }
7436 15 Nov 23 nicklas 229
7436 15 Nov 23 nicklas 230   vcall.submit = function()
7436 15 Nov 23 nicklas 231   {
7436 15 Nov 23 nicklas 232     var frm = document.forms['reggie'];
7436 15 Nov 23 nicklas 233     var submitInfo = {};
7436 15 Nov 23 nicklas 234     submitInfo.deleteItemsCreatedByFailedJobs = frm.deleteItemsCreatedByFailedJobs.checked;
7436 15 Nov 23 nicklas 235     
7436 15 Nov 23 nicklas 236     var all = [];
7436 15 Nov 23 nicklas 237     submitInfo.rawBioAssays = all;
7436 15 Nov 23 nicklas 238     for (var rawNo = 0; rawNo < rawBioAssays.length; rawNo++)
7436 15 Nov 23 nicklas 239     {
7436 15 Nov 23 nicklas 240       var raw = rawBioAssays[rawNo];
7436 15 Nov 23 nicklas 241       var tmp = {};
7436 15 Nov 23 nicklas 242       tmp.id = raw.id;
7436 15 Nov 23 nicklas 243       
7436 15 Nov 23 nicklas 244       tmp.rerun = frm['rerun.'+raw.id].checked;
7436 15 Nov 23 nicklas 245       tmp.confirm = frm['confirm.'+raw.id].checked;
7436 15 Nov 23 nicklas 246       tmp.comment = frm['comment.'+raw.id].value;
7436 15 Nov 23 nicklas 247       
7436 15 Nov 23 nicklas 248       all[all.length] = tmp;
7436 15 Nov 23 nicklas 249     }
7436 15 Nov 23 nicklas 250     
7436 15 Nov 23 nicklas 251     var url = '../WgsVariantCalling.servlet?ID='+App.getSessionId();
7436 15 Nov 23 nicklas 252     url += '&cmd=ConfirmVariantCalling';
7436 15 Nov 23 nicklas 253     Wizard.showLoadingAnimation('Performing registration...');
7436 15 Nov 23 nicklas 254     Wizard.asyncJsonRequest(url, vcall.submissionResults, 'POST', JSON.stringify(submitInfo));
7436 15 Nov 23 nicklas 255   }
7436 15 Nov 23 nicklas 256   
7436 15 Nov 23 nicklas 257   vcall.submissionResults = function(response)
7436 15 Nov 23 nicklas 258   {
7436 15 Nov 23 nicklas 259     Wizard.showFinalMessage(response.messages);
7436 15 Nov 23 nicklas 260     Doc.show('gorestart');
7436 15 Nov 23 nicklas 261   }
7436 15 Nov 23 nicklas 262   
7436 15 Nov 23 nicklas 263   return vcall;
7436 15 Nov 23 nicklas 264 }();
7436 15 Nov 23 nicklas 265
7436 15 Nov 23 nicklas 266 Doc.onLoad(VCall.initPage);
7436 15 Nov 23 nicklas 267