extensions/net.sf.basedb.reggie/trunk/resources/mipsanalysis/align_confirm.js

Code
Comments
Other
Rev Date Author Line
5845 26 Feb 20 nicklas 1 var Align = function()
5845 26 Feb 20 nicklas 2 {
5845 26 Feb 20 nicklas 3   var align = {};
5845 26 Feb 20 nicklas 4   var debug = 0;
5845 26 Feb 20 nicklas 5   
5845 26 Feb 20 nicklas 6   var JOB_IMAGE = { 'DONE': 'ok.png', 'ERROR': 'error.png'};
5845 26 Feb 20 nicklas 7   
5845 26 Feb 20 nicklas 8   var alignedSequences;
5845 26 Feb 20 nicklas 9   
5845 26 Feb 20 nicklas 10   // Page initialization
5845 26 Feb 20 nicklas 11   align.initPage = function()
5845 26 Feb 20 nicklas 12   {
5845 26 Feb 20 nicklas 13     
5845 26 Feb 20 nicklas 14     // Step 1
5845 26 Feb 20 nicklas 15
5845 26 Feb 20 nicklas 16     // Navigation
5845 26 Feb 20 nicklas 17     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
5845 26 Feb 20 nicklas 18     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
5845 26 Feb 20 nicklas 19     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
5845 26 Feb 20 nicklas 20     Buttons.addClickHandler('goregister', Wizard.goRegister);
5845 26 Feb 20 nicklas 21       
5845 26 Feb 20 nicklas 22     // Final registration
5845 26 Feb 20 nicklas 23     Events.addEventHandler('wizard', 'wizard-submit', align.submit);
5845 26 Feb 20 nicklas 24
5845 26 Feb 20 nicklas 25     Wizard.showLoadingAnimation('Loading bioassays...');
5845 26 Feb 20 nicklas 26     var url = '../Mips.servlet?ID='+App.getSessionId();
5845 26 Feb 20 nicklas 27     url += '&cmd=GetUnconfirmedAlignedSequences';
5845 26 Feb 20 nicklas 28     Wizard.asyncJsonRequest(url, align.initializeStep1);
5845 26 Feb 20 nicklas 29   }
5845 26 Feb 20 nicklas 30   
5845 26 Feb 20 nicklas 31   // --- Step 1 -----------------------------------
5845 26 Feb 20 nicklas 32   align.initializeStep1 = function(response)
5845 26 Feb 20 nicklas 33   {
5845 26 Feb 20 nicklas 34     alignedSequences = response.alignedSequences;
5845 26 Feb 20 nicklas 35     if (alignedSequences.length == 0)
5845 26 Feb 20 nicklas 36     {
5845 26 Feb 20 nicklas 37       Wizard.setFatalError('No aligned sequences available for processing.');
5845 26 Feb 20 nicklas 38       return;
5845 26 Feb 20 nicklas 39     }
5845 26 Feb 20 nicklas 40     
5845 26 Feb 20 nicklas 41     var html = '<table id="alignedSequencesTable">';
5845 26 Feb 20 nicklas 42     html += '<thead class="bg-filled-100">';
5845 26 Feb 20 nicklas 43     // Header row
5845 26 Feb 20 nicklas 44     html += '<tr>';
5845 26 Feb 20 nicklas 45     html += '<th></th>';
5845 26 Feb 20 nicklas 46     html += '<th class="dottedleft"></th>';
5845 26 Feb 20 nicklas 47     html += '<th></th>';
5845 26 Feb 20 nicklas 48     html += '<th></th>';
5845 26 Feb 20 nicklas 49     html += '<th class="dottedleft" colspan="4">Reads</th>';
5845 26 Feb 20 nicklas 50     html += '<th class="dottedleft"></th>';
5845 26 Feb 20 nicklas 51     html += '<th class="dottedleft"></th>';
5845 26 Feb 20 nicklas 52     html += '<th class="dottedleft" colspan="3">Actions</th>';
5845 26 Feb 20 nicklas 53     html += '<th class="dottedleft">Comment</th>';
5845 26 Feb 20 nicklas 54     html += '</tr>';
5845 26 Feb 20 nicklas 55     
5845 26 Feb 20 nicklas 56     html += '<tr>';
5845 26 Feb 20 nicklas 57     html += '<th>Plate</th>';
5845 26 Feb 20 nicklas 58     html += '<th class="dottedleft">Library</th>';
5845 26 Feb 20 nicklas 59     html += '<th>MIPS_Panel</th>';
5845 26 Feb 20 nicklas 60     html += '<th>Barcode</th>';
5845 26 Feb 20 nicklas 61     html += '<th class="dottedleft">PF_READS</th>';
5845 26 Feb 20 nicklas 62     html += '<th>ALIGNED_PAIRS</th>';
5845 26 Feb 20 nicklas 63     html += '<th class="icon-col"></th>';
5845 26 Feb 20 nicklas 64     html += '<th>Duplicates</th>';
5845 26 Feb 20 nicklas 65     html += '<th class="dottedleft">Job</th>';
5845 26 Feb 20 nicklas 66     html += '<th class="dottedleft">Files</th>';
5845 26 Feb 20 nicklas 67     html += '<th class="dottedleft">Flag RNA</th>';
5845 26 Feb 20 nicklas 68     html += '<th>Re-align</th>';
5845 26 Feb 20 nicklas 69     html += '<th>TODO</th>';
5845 26 Feb 20 nicklas 70     html += '<th class="dottedleft"></th>';
5845 26 Feb 20 nicklas 71     html += '</tr>';
5845 26 Feb 20 nicklas 72     html += '</thead>';
5845 26 Feb 20 nicklas 73     html += '<tbody>';
5845 26 Feb 20 nicklas 74     var numWithError = 0;
5845 26 Feb 20 nicklas 75     for (var alignedNo = 0; alignedNo < alignedSequences.length; alignedNo++)
5845 26 Feb 20 nicklas 76     {
5845 26 Feb 20 nicklas 77       var aligned = alignedSequences[alignedNo];
5845 26 Feb 20 nicklas 78
5845 26 Feb 20 nicklas 79       var lib = aligned.lib;
5845 26 Feb 20 nicklas 80       lib.stratagene = Reggie.isStratagene(lib.name);
5845 26 Feb 20 nicklas 81       lib.external = Reggie.isExternal(lib.name);
5845 26 Feb 20 nicklas 82       var libPlate = lib.bioWell ? lib.bioWell.bioPlate : null;
5845 26 Feb 20 nicklas 83       
5845 26 Feb 20 nicklas 84       var merged = aligned.merged;
5845 26 Feb 20 nicklas 85       
6716 29 Apr 22 nicklas 86       var pfReads = Reggie.formatCount(merged.PF_READS, '-');
6716 29 Apr 22 nicklas 87       var alignedReads = Reggie.formatCount(aligned.ALIGNED_PAIRS, '-');
5845 26 Feb 20 nicklas 88       var alignedPercent = aligned.ALIGNED_PAIRS && merged.PF_READS ? ' (' + Math.round(100*aligned.ALIGNED_PAIRS/merged.PF_READS) + '%)' : '';
5845 26 Feb 20 nicklas 89       var percentDuplicates = aligned.FRACTION_DUPLICATION == null ? '-' : Math.round(100*aligned.FRACTION_DUPLICATION)+'%';
5845 26 Feb 20 nicklas 90       var job = aligned.job;
5845 26 Feb 20 nicklas 91       
5845 26 Feb 20 nicklas 92       var flag = null;
5845 26 Feb 20 nicklas 93       var isError = job.status == 'ERROR';
5845 26 Feb 20 nicklas 94       
5845 26 Feb 20 nicklas 95       html += '<tr class="highlight ' + (alignedNo % 4 < 2 ? 'evenrow' : 'oddrow') + '">';
5845 26 Feb 20 nicklas 96       html += '<td>'+(libPlate ? Strings.encodeTags(libPlate.name+' '+lib.bioWell.location) : '-')+'</td>';
5845 26 Feb 20 nicklas 97       html += '<td class="dottedleft">'+Strings.encodeTags(aligned.name)+'</td>';
5845 26 Feb 20 nicklas 98       html += '<td>'+Strings.encodeTags(lib.MIPSPanel)+'</td>';
5845 26 Feb 20 nicklas 99       html += '<td>'+Strings.encodeTags(lib.barcode.name)+'</td>';
5845 26 Feb 20 nicklas 100       html += '<td class="dottedleft">'+pfReads+'</td>';
5845 26 Feb 20 nicklas 101       html += '<td>'+alignedReads+alignedPercent+'</td>';
5845 26 Feb 20 nicklas 102       html += '<td class="icon-col">';
5845 26 Feb 20 nicklas 103       html += '</td>';
5845 26 Feb 20 nicklas 104
5845 26 Feb 20 nicklas 105       html += '<td>'+percentDuplicates+'</td>';
5845 26 Feb 20 nicklas 106       html += '<td class="dottedleft">';
5845 26 Feb 20 nicklas 107       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>';
5845 26 Feb 20 nicklas 108       html += '</td>';
5845 26 Feb 20 nicklas 109       if (aligned.DataFilesFolder && job.server)
5845 26 Feb 20 nicklas 110       {
5845 26 Feb 20 nicklas 111         html += '<td class="dottedleft">';
5845 26 Feb 20 nicklas 112         html += '<span class="link file-link" data-server="'+Strings.encodeTags(job.server)+'" data-folder="'+Strings.encodeTags(aligned.DataFilesFolder)+'" data-item-id="'+aligned.id+'" title="View generated files"><img src="../images/remote_folder.png"></span>';
5845 26 Feb 20 nicklas 113         html += '</td>';
5845 26 Feb 20 nicklas 114       }
5845 26 Feb 20 nicklas 115       else
5845 26 Feb 20 nicklas 116       {
5845 26 Feb 20 nicklas 117         html += '<td class="dottedleft">-</td>';
5845 26 Feb 20 nicklas 118       }
5845 26 Feb 20 nicklas 119       
5845 26 Feb 20 nicklas 120       var realignChecked = isError ? ' checked' : '';
5845 26 Feb 20 nicklas 121       if (isError) numWithError++;
5845 26 Feb 20 nicklas 122       if (lib.stratagene || lib.external)
5845 26 Feb 20 nicklas 123       {
5845 26 Feb 20 nicklas 124         html += '<td class="dottedleft">-</td>';
5845 26 Feb 20 nicklas 125       }
5845 26 Feb 20 nicklas 126       else
5845 26 Feb 20 nicklas 127       {
5845 26 Feb 20 nicklas 128         html += '<td class="dottedleft"><input type="checkbox" name="flag.'+aligned.id+'"'+(flag != null ? ' checked value="'+flag+'"':'')+'></td>';
5845 26 Feb 20 nicklas 129       }
5845 26 Feb 20 nicklas 130       
5845 26 Feb 20 nicklas 131       html += '<td><input type="checkbox" name="realign.'+aligned.id+'"'+realignChecked+'></td>';
5845 26 Feb 20 nicklas 132       html += '<td><input type="checkbox" name="nextStepTODO.'+aligned.id+'"></td>';
5845 26 Feb 20 nicklas 133       html += '<td class="dottedleft comment"><input type="text" name="comment.'+aligned.id+'"></td>';
5845 26 Feb 20 nicklas 134       html += '</tr>';
5845 26 Feb 20 nicklas 135
5845 26 Feb 20 nicklas 136     }
5845 26 Feb 20 nicklas 137     html += '</tbody>';
5845 26 Feb 20 nicklas 138     html += '</table>';
5845 26 Feb 20 nicklas 139     Doc.element('alignedSequences').innerHTML = html;
5845 26 Feb 20 nicklas 140     if (numWithError > 0) Doc.show('delete-items', 'table');
5845 26 Feb 20 nicklas 141     
5845 26 Feb 20 nicklas 142     // Add click handler to items
5845 26 Feb 20 nicklas 143     var clickableItems = document.getElementsByClassName('item-link');
5845 26 Feb 20 nicklas 144     for (var i = 0; i < clickableItems.length; i++)
5845 26 Feb 20 nicklas 145     {
5845 26 Feb 20 nicklas 146       Events.addEventHandler(clickableItems[i], 'click', Items.itemOnClick);
5845 26 Feb 20 nicklas 147     }
5845 26 Feb 20 nicklas 148     
5845 26 Feb 20 nicklas 149     // Add click handler to file links
5845 26 Feb 20 nicklas 150     var clickableItems = document.getElementsByClassName('file-link');
5845 26 Feb 20 nicklas 151     for (var i = 0; i < clickableItems.length; i++)
5845 26 Feb 20 nicklas 152     {
5845 26 Feb 20 nicklas 153       Events.addEventHandler(clickableItems[i], 'click', align.fileLinkOnClick);
5845 26 Feb 20 nicklas 154     }
5845 26 Feb 20 nicklas 155
5845 26 Feb 20 nicklas 156     Doc.show('step-1');
5845 26 Feb 20 nicklas 157     Doc.show('goregister');
5845 26 Feb 20 nicklas 158   }
5845 26 Feb 20 nicklas 159   
5845 26 Feb 20 nicklas 160   align.fileLinkOnClick = function(event)
5845 26 Feb 20 nicklas 161   {
5845 26 Feb 20 nicklas 162     var folder = Data.get(event.currentTarget, 'folder');
5845 26 Feb 20 nicklas 163     var server = Data.get(event.currentTarget, 'server');
5845 26 Feb 20 nicklas 164     var itemId = Data.get(event.currentTarget, 'item-id');
5845 26 Feb 20 nicklas 165     server = server.replace(/\s*\[.*\]/, '');
5845 26 Feb 20 nicklas 166     var url = '../analysis/view_remote_files.jsp?ID=' + App.getSessionId();
5845 26 Feb 20 nicklas 167     url += '&clusterId='+server;
5845 26 Feb 20 nicklas 168     url += '&path='+encodeURIComponent(folder);
5845 26 Feb 20 nicklas 169     url += '&itemType=DERIVEDBIOASSAY&itemId='+itemId;
5845 26 Feb 20 nicklas 170     Dialogs.openPopup(url, 'ViewProjectFiles', 750, 500);
5845 26 Feb 20 nicklas 171   }
5845 26 Feb 20 nicklas 172   
5845 26 Feb 20 nicklas 173   align.submit = function()
5845 26 Feb 20 nicklas 174   {
5845 26 Feb 20 nicklas 175     var frm = document.forms['reggie'];
5845 26 Feb 20 nicklas 176     var submitInfo = {};
5845 26 Feb 20 nicklas 177     submitInfo.deleteItemsCreatedByFailedJobs = frm.deleteItemsCreatedByFailedJobs.checked;
5845 26 Feb 20 nicklas 178     
5845 26 Feb 20 nicklas 179     var all = [];
5845 26 Feb 20 nicklas 180     submitInfo.alignedSequences = all;
5845 26 Feb 20 nicklas 181     for (var alignedNo = 0; alignedNo < alignedSequences.length; alignedNo++)
5845 26 Feb 20 nicklas 182     {
5845 26 Feb 20 nicklas 183       var aligned = alignedSequences[alignedNo];
5845 26 Feb 20 nicklas 184       var tmp = {};
5845 26 Feb 20 nicklas 185       tmp.id = aligned.id;
5845 26 Feb 20 nicklas 186       
5845 26 Feb 20 nicklas 187       tmp.flag = frm['flag.'+aligned.id] && frm['flag.'+aligned.id].checked ? frm['flag.'+aligned.id].value : null;
5845 26 Feb 20 nicklas 188       tmp.realign = frm['realign.'+aligned.id].checked;
5845 26 Feb 20 nicklas 189       tmp.nextStepTODO = frm['nextStepTODO.'+aligned.id].checked;
5845 26 Feb 20 nicklas 190       tmp.comment = frm['comment.'+aligned.id].value;
5845 26 Feb 20 nicklas 191       
5845 26 Feb 20 nicklas 192       all[all.length] = tmp;
5845 26 Feb 20 nicklas 193     }
5845 26 Feb 20 nicklas 194     
5845 26 Feb 20 nicklas 195     var url = '../Mips.servlet?ID='+App.getSessionId();
5845 26 Feb 20 nicklas 196     url += '&cmd=RegisterAlignment';
5845 26 Feb 20 nicklas 197     Wizard.showLoadingAnimation('Performing registration...');
5845 26 Feb 20 nicklas 198     Wizard.asyncJsonRequest(url, align.submissionResults, 'POST', JSON.stringify(submitInfo));
5845 26 Feb 20 nicklas 199   }
5845 26 Feb 20 nicklas 200   
5845 26 Feb 20 nicklas 201   align.submissionResults = function(response)
5845 26 Feb 20 nicklas 202   {
5845 26 Feb 20 nicklas 203     Wizard.showFinalMessage(response.messages);
5845 26 Feb 20 nicklas 204     Doc.show('gorestart');
5845 26 Feb 20 nicklas 205   }
5845 26 Feb 20 nicklas 206   
5845 26 Feb 20 nicklas 207   
5845 26 Feb 20 nicklas 208   return align;
5845 26 Feb 20 nicklas 209 }();
5845 26 Feb 20 nicklas 210
5845 26 Feb 20 nicklas 211 Doc.onLoad(Align.initPage);
5845 26 Feb 20 nicklas 212