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

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