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

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