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

Code
Comments
Other
Rev Date Author Line
7392 03 Nov 23 nicklas 1 var PoN = function()
7392 03 Nov 23 nicklas 2 {
7392 03 Nov 23 nicklas 3   var pon = {};
7392 03 Nov 23 nicklas 4   var debug = 0;
7392 03 Nov 23 nicklas 5   
7392 03 Nov 23 nicklas 6   var JOB_IMAGE = { 'DONE': 'ok.png', 'ERROR': 'error.png'};
7392 03 Nov 23 nicklas 7   
7392 03 Nov 23 nicklas 8   var panelOfNormals;
7392 03 Nov 23 nicklas 9   
7392 03 Nov 23 nicklas 10   // Page initialization
7392 03 Nov 23 nicklas 11   pon.initPage = function()
7392 03 Nov 23 nicklas 12   {
7392 03 Nov 23 nicklas 13     
7392 03 Nov 23 nicklas 14     // Step 1
7392 03 Nov 23 nicklas 15
7392 03 Nov 23 nicklas 16     // Navigation
7392 03 Nov 23 nicklas 17     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
7392 03 Nov 23 nicklas 18     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
7392 03 Nov 23 nicklas 19     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
7392 03 Nov 23 nicklas 20     Buttons.addClickHandler('goregister', Wizard.goRegister);
7392 03 Nov 23 nicklas 21       
7392 03 Nov 23 nicklas 22     // Final registration
7392 03 Nov 23 nicklas 23     Events.addEventHandler('wizard', 'wizard-submit', pon.submit);
7392 03 Nov 23 nicklas 24
7392 03 Nov 23 nicklas 25     Wizard.showLoadingAnimation('Loading bioassays...');
7392 03 Nov 23 nicklas 26     var url = '../WgsVariantCalling.servlet?ID='+App.getSessionId();
7392 03 Nov 23 nicklas 27     url += '&cmd=GetUnconfirmedPanelOfNormals';
7392 03 Nov 23 nicklas 28     Wizard.asyncJsonRequest(url, pon.initializeStep1);
7392 03 Nov 23 nicklas 29   }
7392 03 Nov 23 nicklas 30   
7392 03 Nov 23 nicklas 31   // --- Step 1 -----------------------------------
7392 03 Nov 23 nicklas 32   pon.initializeStep1 = function(response)
7392 03 Nov 23 nicklas 33   {
7392 03 Nov 23 nicklas 34     var frm = document.forms['reggie'];
7392 03 Nov 23 nicklas 35     panelOfNormals = response.panelOfNormals;
7392 03 Nov 23 nicklas 36     if (panelOfNormals.length == 0)
7392 03 Nov 23 nicklas 37     {
7392 03 Nov 23 nicklas 38       Wizard.setFatalError('No panel-of-normals available for processing.');
7392 03 Nov 23 nicklas 39       return;
7392 03 Nov 23 nicklas 40     }
7392 03 Nov 23 nicklas 41     
7392 03 Nov 23 nicklas 42     var html = '<table id="ponTable">';
7392 03 Nov 23 nicklas 43     html += '<thead class="bg-filled-100">';
7392 03 Nov 23 nicklas 44     // Header row
7392 03 Nov 23 nicklas 45     html += '<tr>';
7392 03 Nov 23 nicklas 46     html += '<th></th>';
7392 03 Nov 23 nicklas 47     html += '<th class="dottedleft" colspan="3">Alignment</th>';
7392 03 Nov 23 nicklas 48     html += '<th class="dottedleft" colspan="2">Variant call</th>';
7392 03 Nov 23 nicklas 49     html += '<th class="dottedleft"></th>';
7392 03 Nov 23 nicklas 50     html += '<th class="dottedleft" colspan="2">Actions</th>';
7392 03 Nov 23 nicklas 51     html += '<th class="dottedleft">Comment</th>';
7392 03 Nov 23 nicklas 52     html += '</tr>';
7392 03 Nov 23 nicklas 53     
7392 03 Nov 23 nicklas 54     html += '<tr>';
7392 03 Nov 23 nicklas 55     html += '<th>Item</th>';
7392 03 Nov 23 nicklas 56     html += '<th class="dottedleft">Aligned pairs</th>';
7392 03 Nov 23 nicklas 57     html += '<th>Duplicates</th>';
7392 03 Nov 23 nicklas 58     html += '<th>Mean coverage</th>';
7392 03 Nov 23 nicklas 59     html += '<th class="dottedleft">Callable bases</th>';
7392 03 Nov 23 nicklas 60     html += '<th>Variants</th>';
7392 03 Nov 23 nicklas 61     html += '<th class="dottedleft">Job</th>';
7392 03 Nov 23 nicklas 62     html += '<th><span id="deletePoN" data-prefix="delete" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Delete</span></th>';
7392 03 Nov 23 nicklas 63     html += '<th><span id="confirmPoN" data-prefix="confirm" class="interactable link" title="Toggle selection – use CTRL, ALT or SHIFT to clear">Confirm</span></th>';
7392 03 Nov 23 nicklas 64     html += '<th class="dottedleft"></th>';
7392 03 Nov 23 nicklas 65     html += '</tr>';
7392 03 Nov 23 nicklas 66     html += '</thead>';
7392 03 Nov 23 nicklas 67     html += '<tbody>';
7392 03 Nov 23 nicklas 68     var numWithError = 0;
7392 03 Nov 23 nicklas 69     for (var ponNo = 0; ponNo < panelOfNormals.length; ponNo++)
7392 03 Nov 23 nicklas 70     {
7392 03 Nov 23 nicklas 71       var pn = panelOfNormals[ponNo];
7392 03 Nov 23 nicklas 72       var aligned = pn.aligned;
7392 03 Nov 23 nicklas 73       var job = pn.job;
7392 03 Nov 23 nicklas 74       
7392 03 Nov 23 nicklas 75       var variants = pn.VARIANTS_RAW == null ? '-' : Numbers.formatNumber(pn.VARIANTS_RAW/1000000, 1, '&thinsp;M');
7392 03 Nov 23 nicklas 76       var callableBases = pn.CALLABLE_BASES == null ? '-' : Numbers.formatNumber(pn.CALLABLE_BASES/1000000000, 2, '&thinsp;G');
7392 03 Nov 23 nicklas 77       
7392 03 Nov 23 nicklas 78       var alignedReads = aligned.ALIGNED_PAIRS == null ? '-' : Numbers.formatNumber(aligned.ALIGNED_PAIRS/1000000, 1, '&thinsp;M');
7392 03 Nov 23 nicklas 79       var percentDuplicates = aligned.FRACTION_DUPLICATION == null ? '-' : Numbers.formatNumber(100*aligned.FRACTION_DUPLICATION, 1, '&thinsp;%');
7392 03 Nov 23 nicklas 80       var meanCoverage = aligned.MEAN_COVERAGE == null ? '-' : Numbers.formatNumber(aligned.MEAN_COVERAGE, 1);
7392 03 Nov 23 nicklas 81
7392 03 Nov 23 nicklas 82       var isError = job.status == 'ERROR';
7392 03 Nov 23 nicklas 83       
7392 03 Nov 23 nicklas 84       // Warnings
7392 03 Nov 23 nicklas 85       var callableWarning = '';
7392 03 Nov 23 nicklas 86       if (!job.debug)
7392 03 Nov 23 nicklas 87       {
7392 03 Nov 23 nicklas 88         if (pn.CALLABLE_BASES != null && pn.CALLABLE_BASES < 2_500_000_000)
7392 03 Nov 23 nicklas 89         {
7392 03 Nov 23 nicklas 90           callableWarning = ' <img src="../images/warning.png" title="Less than '+Reggie.formatCount(2_500_000_000) + ' callable bases">';
7392 03 Nov 23 nicklas 91         }
7392 03 Nov 23 nicklas 92       }
7392 03 Nov 23 nicklas 93       
7392 03 Nov 23 nicklas 94       html += '<tr class="highlight ' + (ponNo % 4 < 2 ? 'evenrow' : 'oddrow') + '">';
7392 03 Nov 23 nicklas 95       html += '<td class="prompt if-yellow">'+Strings.encodeTags(pn.name)+'</td>';
7392 03 Nov 23 nicklas 96       html += '<td class="dottedleft">'+alignedReads+'</td>';
7392 03 Nov 23 nicklas 97       html += '<td>'+percentDuplicates+'</td>';
7392 03 Nov 23 nicklas 98       html += '<td>'+meanCoverage+'</td>';
7392 03 Nov 23 nicklas 99       html += '<td class="dottedleft">'+callableBases+callableWarning+'</td>';
7392 03 Nov 23 nicklas 100       html += '<td>'+variants+'</td>';
7392 03 Nov 23 nicklas 101       html += '<td class="dottedleft">';
7392 03 Nov 23 nicklas 102       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>';
7392 03 Nov 23 nicklas 103       if (job.debug)
7392 03 Nov 23 nicklas 104       {
7392 03 Nov 23 nicklas 105         html += '<img src="../images/'+(isError?'bug-red':'bug-green')+'.png" title="This job was run in DEBUG mode">'
7392 03 Nov 23 nicklas 106       }
7392 03 Nov 23 nicklas 107       html += '</td>';
7392 03 Nov 23 nicklas 108       
7392 03 Nov 23 nicklas 109       var confirmChecked = !isError ? ' checked' : '';
7392 03 Nov 23 nicklas 110       var deleteChecked = isError ? ' checked' : '';
7392 03 Nov 23 nicklas 111       var confirmDisabled = isError ? ' disabled' : '';
7392 03 Nov 23 nicklas 112       if (isError) numWithError++;
7392 03 Nov 23 nicklas 113
7392 03 Nov 23 nicklas 114       html += '<td><input type="checkbox" name="delete.'+pn.id+'" id="delete.'+pn.id+'" data-item-id="'+pn.id+'"'+deleteChecked+'></td>';
7392 03 Nov 23 nicklas 115       html += '<td><input type="checkbox" name="confirm.'+pn.id+'" id="confirm.'+pn.id+'" data-item-id="'+pn.id+'"'+confirmChecked+confirmDisabled+'></td>';
7392 03 Nov 23 nicklas 116       html += '<td class="dottedleft comment"><input type="text" name="comment.'+pn.id+'" id="comment.'+pn.id+'" data-item-id="'+pn.id+'"></td>';
7392 03 Nov 23 nicklas 117       html += '</tr>';
7392 03 Nov 23 nicklas 118     }
7392 03 Nov 23 nicklas 119     html += '</tbody>';
7392 03 Nov 23 nicklas 120     html += '</table>';
7392 03 Nov 23 nicklas 121     Doc.element('panelOfNormals').innerHTML = html;
7392 03 Nov 23 nicklas 122     
7392 03 Nov 23 nicklas 123     // Add click handler to items
7392 03 Nov 23 nicklas 124     var clickableItems = document.getElementsByClassName('item-link');
7392 03 Nov 23 nicklas 125     for (var i = 0; i < clickableItems.length; i++)
7392 03 Nov 23 nicklas 126     {
7392 03 Nov 23 nicklas 127       Events.addEventHandler(clickableItems[i], 'click', Items.itemOnClick);
7392 03 Nov 23 nicklas 128     }
7392 03 Nov 23 nicklas 129     
7392 03 Nov 23 nicklas 130     // If 'delete' is active the other options should be disabled
7392 03 Nov 23 nicklas 131     for (var ponNo = 0; ponNo < panelOfNormals.length; ponNo++)
7392 03 Nov 23 nicklas 132     {
7392 03 Nov 23 nicklas 133       var pn = panelOfNormals[ponNo];
7392 03 Nov 23 nicklas 134       Events.addEventHandler('delete.'+pn.id, 'change', pon.deleteOnChange);
7392 03 Nov 23 nicklas 135     }
7392 03 Nov 23 nicklas 136
7392 03 Nov 23 nicklas 137     Events.addEventHandler('deletePoN', 'click', pon.toggleSelection);
7392 03 Nov 23 nicklas 138     Events.addEventHandler('confirmPoN', 'click', pon.toggleSelection);
7392 03 Nov 23 nicklas 139     
7392 03 Nov 23 nicklas 140     Doc.show('step-1');
7392 03 Nov 23 nicklas 141     Doc.show('goregister');
7392 03 Nov 23 nicklas 142   }
7392 03 Nov 23 nicklas 143
7392 03 Nov 23 nicklas 144   pon.deleteOnChange = function(event)
7392 03 Nov 23 nicklas 145   {
7392 03 Nov 23 nicklas 146     var itemId = Data.get(event.currentTarget, 'item-id');
7392 03 Nov 23 nicklas 147     var disable = event.currentTarget.checked;
7392 03 Nov 23 nicklas 148     pon.disableElement('confirm.'+itemId, disable);
7392 03 Nov 23 nicklas 149     pon.disableElement('comment.'+itemId, disable);
7392 03 Nov 23 nicklas 150   }
7392 03 Nov 23 nicklas 151   
7392 03 Nov 23 nicklas 152   pon.disableElement = function(element, disable)
7392 03 Nov 23 nicklas 153   {
7392 03 Nov 23 nicklas 154     element = Doc.element(element);
7392 03 Nov 23 nicklas 155     if (element) element.disabled = disable;
7392 03 Nov 23 nicklas 156   }
7392 03 Nov 23 nicklas 157   
7392 03 Nov 23 nicklas 158   pon.toggleSelection = function(event)
7392 03 Nov 23 nicklas 159   {
7392 03 Nov 23 nicklas 160     var prefix = Data.get(event.currentTarget, 'prefix');
7392 03 Nov 23 nicklas 161     var specialKey = event.altKey || event.ctrlKey || event.shiftKey;
7392 03 Nov 23 nicklas 162     
7392 03 Nov 23 nicklas 163     var frm = document.forms['reggie'];
7392 03 Nov 23 nicklas 164     for (var ponNo = 0; ponNo < panelOfNormals.length; ponNo++)
7392 03 Nov 23 nicklas 165     {
7392 03 Nov 23 nicklas 166       var pn = panelOfNormals[ponNo];
7392 03 Nov 23 nicklas 167       var chk = frm[prefix+'.'+pn.id];
7392 03 Nov 23 nicklas 168       if (chk && !chk.disabled)
7392 03 Nov 23 nicklas 169       {
7392 03 Nov 23 nicklas 170         chk.checked = specialKey ? false : !chk.checked;
7392 03 Nov 23 nicklas 171         if (prefix=='delete') Events.sendChangeEvent(chk);
7392 03 Nov 23 nicklas 172       }
7392 03 Nov 23 nicklas 173     }
7392 03 Nov 23 nicklas 174   }
7392 03 Nov 23 nicklas 175   
7392 03 Nov 23 nicklas 176   pon.submit = function()
7392 03 Nov 23 nicklas 177   {
7392 03 Nov 23 nicklas 178     var frm = document.forms['reggie'];
7392 03 Nov 23 nicklas 179     var submitInfo = {};
7392 03 Nov 23 nicklas 180     
7392 03 Nov 23 nicklas 181     var all = [];
7392 03 Nov 23 nicklas 182     submitInfo.panelOfNormals = all;
7392 03 Nov 23 nicklas 183     for (var ponNo = 0; ponNo < panelOfNormals.length; ponNo++)
7392 03 Nov 23 nicklas 184     {
7392 03 Nov 23 nicklas 185       var pn = panelOfNormals[ponNo];
7392 03 Nov 23 nicklas 186       var tmp = {};
7392 03 Nov 23 nicklas 187       tmp.id = pn.id;
7392 03 Nov 23 nicklas 188       
7392 03 Nov 23 nicklas 189       tmp.delete = frm['delete.'+pn.id].checked;
7392 03 Nov 23 nicklas 190       tmp.confirm = frm['confirm.'+pn.id].checked;
7392 03 Nov 23 nicklas 191       tmp.comment = frm['comment.'+pn.id].value;
7392 03 Nov 23 nicklas 192       
7392 03 Nov 23 nicklas 193       all[all.length] = tmp;
7392 03 Nov 23 nicklas 194     }
7392 03 Nov 23 nicklas 195     
7392 03 Nov 23 nicklas 196     var url = '../WgsVariantCalling.servlet?ID='+App.getSessionId();
7392 03 Nov 23 nicklas 197     url += '&cmd=RegisterPanelOfNormals';
7392 03 Nov 23 nicklas 198     Wizard.showLoadingAnimation('Performing registration...');
7392 03 Nov 23 nicklas 199     Wizard.asyncJsonRequest(url, pon.submissionResults, 'POST', JSON.stringify(submitInfo));
7392 03 Nov 23 nicklas 200   }
7392 03 Nov 23 nicklas 201   
7392 03 Nov 23 nicklas 202   pon.submissionResults = function(response)
7392 03 Nov 23 nicklas 203   {
7392 03 Nov 23 nicklas 204     Wizard.showFinalMessage(response.messages);
7392 03 Nov 23 nicklas 205     Doc.show('gorestart');
7392 03 Nov 23 nicklas 206   }
7392 03 Nov 23 nicklas 207   
7392 03 Nov 23 nicklas 208   
7392 03 Nov 23 nicklas 209   return pon;
7392 03 Nov 23 nicklas 210 }();
7392 03 Nov 23 nicklas 211
7392 03 Nov 23 nicklas 212 Doc.onLoad(PoN.initPage);
7392 03 Nov 23 nicklas 213