extensions/net.sf.basedb.reggie/trunk/resources/flaggedrna/search.js

Code
Comments
Other
Rev Date Author Line
3158 04 Mar 15 nicklas 1 var Search = function()
3158 04 Mar 15 nicklas 2 {
3158 04 Mar 15 nicklas 3   var search = {};
3158 04 Mar 15 nicklas 4   var debug = 0;
3158 04 Mar 15 nicklas 5   
3158 04 Mar 15 nicklas 6   var flaggedRna;
3158 04 Mar 15 nicklas 7   
3158 04 Mar 15 nicklas 8   // Page initialization
3158 04 Mar 15 nicklas 9   search.initPage = function()
3158 04 Mar 15 nicklas 10   {
3158 04 Mar 15 nicklas 11     // Step 1
6720 03 May 22 nicklas 12     Events.addEventHandler('labelFilter', 'change', search.filterOnChange);
3158 04 Mar 15 nicklas 13     Events.addEventHandler('flagFilter', 'change', search.filterOnChange);
3158 04 Mar 15 nicklas 14     Events.addEventHandler('rnaOriginalFilter', 'change', search.filterOnChange);
3158 04 Mar 15 nicklas 15     Events.addEventHandler('rnaRemainFilter', 'change', search.filterOnChange);
3158 04 Mar 15 nicklas 16     Events.addEventHandler('rqsRinFilter', 'change', search.filterOnChange);
3158 04 Mar 15 nicklas 17     Events.addEventHandler('lysateRemainFilter', 'change', search.filterOnChange);
3158 04 Mar 15 nicklas 18     Events.addEventHandler('lysateUsedQuantityFilter', 'change', search.filterOnChange);
3158 04 Mar 15 nicklas 19     Events.addEventHandler('specimenRemainFilter', 'change', search.filterOnChange);
3158 04 Mar 15 nicklas 20     Events.addEventHandler('libExistsFilter', 'change', search.filterOnChange);
3158 04 Mar 15 nicklas 21     Events.addEventHandler('rawDataExistsFilter', 'change', search.filterOnChange);
3158 04 Mar 15 nicklas 22     
3162 04 Mar 15 nicklas 23     Buttons.addClickHandler('btnReExtractSpecimen', search.reExtractSpecimen);
4086 07 Sep 16 nicklas 24     Buttons.addClickHandler('btnReExtractLysate', search.reExtractLysate);
3162 04 Mar 15 nicklas 25     Buttons.addClickHandler('btnFlagSpecimen', search.flagSpecimen);
3164 04 Mar 15 nicklas 26     Buttons.addClickHandler('btnReProcessRna', search.reProcessRna);
3162 04 Mar 15 nicklas 27     Buttons.addClickHandler('btnUnflagRna', search.unflagRna);
3165 05 Mar 15 nicklas 28     Buttons.addClickHandler('btnNewBioMaterialList', search.newBioMaterialList);
3158 04 Mar 15 nicklas 29     Buttons.addClickHandler('check_uncheck', search.selectAll);
3158 04 Mar 15 nicklas 30     
3158 04 Mar 15 nicklas 31     // Navigation
3158 04 Mar 15 nicklas 32     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
3158 04 Mar 15 nicklas 33     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
3158 04 Mar 15 nicklas 34     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
3158 04 Mar 15 nicklas 35     Buttons.addClickHandler('goregister', Wizard.goRegister);
3158 04 Mar 15 nicklas 36     
3158 04 Mar 15 nicklas 37     // Final registration
3158 04 Mar 15 nicklas 38     Events.addEventHandler('wizard', 'wizard-submit', search.submit);
3158 04 Mar 15 nicklas 39
3158 04 Mar 15 nicklas 40     var url = '../FlaggedRna.servlet?ID='+App.getSessionId();
3158 04 Mar 15 nicklas 41     url += '&cmd=LoadFlaggedRna';
3158 04 Mar 15 nicklas 42     Wizard.showLoadingAnimation('Loading flagged RNA...');
3158 04 Mar 15 nicklas 43     Wizard.asyncJsonRequest(url, search.onRnaLoaded);
3158 04 Mar 15 nicklas 44   }
3158 04 Mar 15 nicklas 45   
3158 04 Mar 15 nicklas 46   search.onRnaLoaded = function(response)
3158 04 Mar 15 nicklas 47   {
3158 04 Mar 15 nicklas 48     flaggedRna = response.rna;
3158 04 Mar 15 nicklas 49     if (flaggedRna.length == 0)
3158 04 Mar 15 nicklas 50     {
3158 04 Mar 15 nicklas 51       Wizard.setFatalError('No flagged RNA available for processing.');
3158 04 Mar 15 nicklas 52       return;
3158 04 Mar 15 nicklas 53     }
3158 04 Mar 15 nicklas 54     var frm = document.forms['reggie'];
3158 04 Mar 15 nicklas 55     
3767 23 Feb 16 nicklas 56     var yellowImg = '<img src="../images/yellow-label.png">';
3158 04 Mar 15 nicklas 57     var html = '';
3158 04 Mar 15 nicklas 58     var usedFlags = [];
3158 04 Mar 15 nicklas 59     for (var rnaNo = 0; rnaNo < flaggedRna.length; rnaNo++)
3158 04 Mar 15 nicklas 60     {
3158 04 Mar 15 nicklas 61       var rna = flaggedRna[rnaNo];
3158 04 Mar 15 nicklas 62       rna.include = true;
3158 04 Mar 15 nicklas 63       if (rna.flag && usedFlags.indexOf(rna.flag) == -1)
3158 04 Mar 15 nicklas 64       {
3158 04 Mar 15 nicklas 65         usedFlags[usedFlags.length] = rna.flag;
3158 04 Mar 15 nicklas 66       }
3182 18 Mar 15 nicklas 67       var qs = rna.rin || rna.rqs;
3158 04 Mar 15 nicklas 68       
3767 23 Feb 16 nicklas 69       var isYellow = rna.specimen && rna.specimen.YellowLabel != null;
3767 23 Feb 16 nicklas 70       var img = isYellow ? yellowImg : '';
3767 23 Feb 16 nicklas 71       
6116 05 Feb 21 nicklas 72       var stringTieCount = search.countRawBioAssaysByType(rna.rawbioassays, 'variant.sequencing.stringtie');
6116 05 Feb 21 nicklas 73       var cufflinksCount = search.countRawBioAssaysByType(rna.rawbioassays, 'cufflinks');
6116 05 Feb 21 nicklas 74       var variantCallCount = search.countRawBioAssaysByType(rna.rawbioassays, 'variant.sequencing.variant-call');
6116 05 Feb 21 nicklas 75       
4995 02 Oct 18 nicklas 76       html += '<tr class="highlight ' + (rnaNo % 2 == 0 ? 'oddrow' : 'evenrow') + (isYellow ? ' yellow-specimen' : '') + (rna.DO_NOT_USE ? ' donotuse' : '') + '" id="rna.'+rna.id + '">';
3158 04 Mar 15 nicklas 77       html += '<td><span id="index.'+rna.id+'">'+(rnaNo+1)+'</span> <input type="checkbox" name="rna.'+rna.id+'">';
3158 04 Mar 15 nicklas 78       html += '<img class="link case-summary" data-name="'+Strings.encodeTags(rna.name)+'" src="../images/case_summary.png"></td>';
4995 02 Oct 18 nicklas 79       html += '<td class="iconcol-1">'+search.doNotUseWarning(rna)+'</td>';
6720 03 May 22 nicklas 80       html += '<td class="dottedleft if-yellow">'+img+Strings.encodeTags(rna.name)+'</td>';
6720 03 May 22 nicklas 81       html += '<td class="if-yellow">'+Strings.encodeTags(rna.label)+'</td>';
3158 04 Mar 15 nicklas 82       html += '<td>'+Strings.encodeTags(rna.flag) + '</td>';
3182 18 Mar 15 nicklas 83       html += '<td>'+Reggie.formatNumber(rna.originalQuantity, null, 2) + '</td>';
3182 18 Mar 15 nicklas 84       html += '<td>'+Reggie.formatNumber(rna.remainingQuantity, null, 2) + '</td>';
3182 18 Mar 15 nicklas 85       html += '<td>'+(qs == -100 ? '-100' : Reggie.formatNumber(qs, null, 2))+'</td>';
3158 04 Mar 15 nicklas 86       
3158 04 Mar 15 nicklas 87       html += '<td class="dottedleft">'+Math.round(rna.lysate.remainingQuantity) + '</td>';
3158 04 Mar 15 nicklas 88       html += '<td>'+Reggie.formatNumber(rna.lysate.usedQuantity/1000, null, 1) + '</td>';
3158 04 Mar 15 nicklas 89       html += '<td class="dottedleft">'+Reggie.formatNumber(rna.specimen.remainingQuantity/1000, null, 1) + '</td>';
3158 04 Mar 15 nicklas 90       html += '<td>'+Reggie.reformatDate(rna.specimen.registered)+'</td>';
3158 04 Mar 15 nicklas 91       html += '<td class="dottedleft">'+(rna.libraries.length > 0 ? rna.libraries.length : '-')+'</td>';
6116 05 Feb 21 nicklas 92       html += '<td class="dottedleft">'+(rna.rawbioassays.length > 0 ? stringTieCount +' / '+cufflinksCount+' / '+variantCallCount : '-')+'</td>';
3158 04 Mar 15 nicklas 93       html += '</tr>';
3158 04 Mar 15 nicklas 94     }
3158 04 Mar 15 nicklas 95     
3158 04 Mar 15 nicklas 96     usedFlags.sort();
3158 04 Mar 15 nicklas 97     for (var flagNo = 0; flagNo < usedFlags.length; flagNo++)
3158 04 Mar 15 nicklas 98     {
3158 04 Mar 15 nicklas 99       var flag = usedFlags[flagNo];
3158 04 Mar 15 nicklas 100       frm.flagFilter[frm.flagFilter.length] = new Option(flag);
3158 04 Mar 15 nicklas 101     }
3158 04 Mar 15 nicklas 102     
3158 04 Mar 15 nicklas 103     Doc.element('rna-list').innerHTML = html;
3158 04 Mar 15 nicklas 104     Doc.element('num-matching').innerHTML = flaggedRna.length;
3158 04 Mar 15 nicklas 105     
3158 04 Mar 15 nicklas 106     Doc.show('step-1');
3158 04 Mar 15 nicklas 107
3158 04 Mar 15 nicklas 108     var cs = document.getElementsByClassName('case-summary');
3158 04 Mar 15 nicklas 109     for (var i = 0; i < cs.length; i++)
3158 04 Mar 15 nicklas 110     {
5019 10 Oct 18 nicklas 111       Events.addEventHandler(cs[i], 'click', Reggie.openCaseSummaryPopupOnEvent);
3158 04 Mar 15 nicklas 112     }
3158 04 Mar 15 nicklas 113   }
3158 04 Mar 15 nicklas 114   
6116 05 Feb 21 nicklas 115   search.countRawBioAssaysByType = function(rawbioassays, rawDataType)
6116 05 Feb 21 nicklas 116   {
6116 05 Feb 21 nicklas 117     var count = 0;
6116 05 Feb 21 nicklas 118     for (var i = 0; i < rawbioassays.length; i++)
6116 05 Feb 21 nicklas 119     {
6116 05 Feb 21 nicklas 120       if (rawbioassays[i].rawDataType == rawDataType) count++;
6116 05 Feb 21 nicklas 121     }
6116 05 Feb 21 nicklas 122     return count;
6116 05 Feb 21 nicklas 123   }
6116 05 Feb 21 nicklas 124   
4995 02 Oct 18 nicklas 125   search.doNotUseWarning = function(rna)
4995 02 Oct 18 nicklas 126   {
4995 02 Oct 18 nicklas 127     var warning = '';
4995 02 Oct 18 nicklas 128     if (rna && rna.DO_NOT_USE)
4995 02 Oct 18 nicklas 129     {
4995 02 Oct 18 nicklas 130       warning += '<img src="../images/warning.png" title="DoNotUse-'+Strings.encodeTags(rna.DO_NOT_USE + ': ' + rna.DO_NOT_USE_COMMENT)+'">';
4995 02 Oct 18 nicklas 131     }
4995 02 Oct 18 nicklas 132     return warning;
4995 02 Oct 18 nicklas 133   }
4995 02 Oct 18 nicklas 134
4995 02 Oct 18 nicklas 135   
3158 04 Mar 15 nicklas 136   search.selectAll = function()
3158 04 Mar 15 nicklas 137   {
3158 04 Mar 15 nicklas 138     var frm = document.forms['reggie'];
3158 04 Mar 15 nicklas 139     var firstChecked = null;
3158 04 Mar 15 nicklas 140     for (var rnaNo = 0; rnaNo < flaggedRna.length; rnaNo++)
3158 04 Mar 15 nicklas 141     {
3158 04 Mar 15 nicklas 142       var rna = flaggedRna[rnaNo];
3158 04 Mar 15 nicklas 143       if (rna.include)
3158 04 Mar 15 nicklas 144       {
3158 04 Mar 15 nicklas 145         if (firstChecked == null)
3158 04 Mar 15 nicklas 146         {
3158 04 Mar 15 nicklas 147           firstChecked = frm['rna.'+rna.id].checked;
3158 04 Mar 15 nicklas 148         }
3158 04 Mar 15 nicklas 149         frm['rna.'+rna.id].checked = !firstChecked;
3158 04 Mar 15 nicklas 150       }
3158 04 Mar 15 nicklas 151     }
3158 04 Mar 15 nicklas 152   }
3158 04 Mar 15 nicklas 153   
3158 04 Mar 15 nicklas 154   search.filterOnChange = function()
3158 04 Mar 15 nicklas 155   {
3158 04 Mar 15 nicklas 156     var frm = document.forms['reggie'];
3158 04 Mar 15 nicklas 157     
3158 04 Mar 15 nicklas 158     var filter = new Filter();
3158 04 Mar 15 nicklas 159     // RNA filters
6720 03 May 22 nicklas 160     filter.addTextCriteria(RnaProperty.LabelExists, frm.labelFilter.value);
3158 04 Mar 15 nicklas 161     filter.addTextCriteria(RnaProperty.Flag, frm.flagFilter.value);
3158 04 Mar 15 nicklas 162     filter.addNumericCriteria(RnaProperty.OriginalQuantity, frm.rnaOriginalFilter.value);
3158 04 Mar 15 nicklas 163     filter.addNumericCriteria(RnaProperty.RemainingQuantity, frm.rnaRemainFilter.value);
3158 04 Mar 15 nicklas 164     filter.addNumericCriteria(RnaProperty.RqsOrRin, frm.rqsRinFilter.value);
3158 04 Mar 15 nicklas 165     // Lysate filters
3158 04 Mar 15 nicklas 166     filter.addNumericCriteria(RnaProperty.LysateRemaining, frm.lysateRemainFilter.value);
3158 04 Mar 15 nicklas 167     filter.addNumericCriteria(RnaProperty.LysateUsedQuantity, frm.lysateUsedQuantityFilter.value, 1000);
3158 04 Mar 15 nicklas 168     // Specimen filters
3158 04 Mar 15 nicklas 169     filter.addNumericCriteria(RnaProperty.SpecimenRemaining, frm.specimenRemainFilter.value, 1000);
3158 04 Mar 15 nicklas 170     // Lib and raw data
3158 04 Mar 15 nicklas 171     filter.addNumericCriteria(RnaProperty.NumLibraries, frm.libExistsFilter.value);
3158 04 Mar 15 nicklas 172     filter.addNumericCriteria(RnaProperty.NumRawBioAssays, frm.rawDataExistsFilter.value);
3158 04 Mar 15 nicklas 173
3158 04 Mar 15 nicklas 174     var index = 0;
3158 04 Mar 15 nicklas 175     for (var rnaNo = 0; rnaNo < flaggedRna.length; rnaNo++)
3158 04 Mar 15 nicklas 176     {
3158 04 Mar 15 nicklas 177       var rna = flaggedRna[rnaNo];
3158 04 Mar 15 nicklas 178       
3158 04 Mar 15 nicklas 179       rna.include = filter.check(rna);
3158 04 Mar 15 nicklas 180       if (rna.include)
3158 04 Mar 15 nicklas 181       {
3158 04 Mar 15 nicklas 182         index++;
3158 04 Mar 15 nicklas 183         var evenRow = index % 2 == 0;
3158 04 Mar 15 nicklas 184         var tr = Doc.element('rna.'+rna.id);
3158 04 Mar 15 nicklas 185         Doc.addOrRemoveClass(tr, 'oddrow', !evenRow);
3158 04 Mar 15 nicklas 186         Doc.addOrRemoveClass(tr, 'evenrow', evenRow);
3158 04 Mar 15 nicklas 187         Doc.element('index.'+rna.id).innerHTML = index;
3158 04 Mar 15 nicklas 188         Doc.show(tr);
3158 04 Mar 15 nicklas 189       }
3158 04 Mar 15 nicklas 190       else
3158 04 Mar 15 nicklas 191       {
3158 04 Mar 15 nicklas 192         Doc.hide('rna.'+rna.id);
3158 04 Mar 15 nicklas 193       }
3158 04 Mar 15 nicklas 194     }
3158 04 Mar 15 nicklas 195     
3158 04 Mar 15 nicklas 196     Doc.element('num-matching').innerHTML = index;
3158 04 Mar 15 nicklas 197   }
3158 04 Mar 15 nicklas 198   
3165 05 Mar 15 nicklas 199   search.checkSelected = function(noNotification)
3158 04 Mar 15 nicklas 200   {
3158 04 Mar 15 nicklas 201     var frm = document.forms['reggie'];
3158 04 Mar 15 nicklas 202     var selected = [];
3158 04 Mar 15 nicklas 203     
3158 04 Mar 15 nicklas 204     for (var rnaNo = 0; rnaNo < flaggedRna.length; rnaNo++)
3158 04 Mar 15 nicklas 205     {
3158 04 Mar 15 nicklas 206       var rna = flaggedRna[rnaNo];
3158 04 Mar 15 nicklas 207       if (rna.include && frm['rna.'+rna.id].checked)
3158 04 Mar 15 nicklas 208       {
3158 04 Mar 15 nicklas 209         selected[selected.length] = rna.id;
3158 04 Mar 15 nicklas 210       }
3158 04 Mar 15 nicklas 211     }
3158 04 Mar 15 nicklas 212     
3165 05 Mar 15 nicklas 213     if (selected.length == 0 && !noNotification)
3158 04 Mar 15 nicklas 214     {
3158 04 Mar 15 nicklas 215       Forms.showNotification('check_uncheck', 'Please select at least one RNA from the list', null, 'pointer-below');
3158 04 Mar 15 nicklas 216     }
3158 04 Mar 15 nicklas 217     
3158 04 Mar 15 nicklas 218     return selected;
3158 04 Mar 15 nicklas 219   }
3158 04 Mar 15 nicklas 220   
3162 04 Mar 15 nicklas 221   search.reExtractSpecimen = function()
3158 04 Mar 15 nicklas 222   {
3158 04 Mar 15 nicklas 223     var frm = document.forms['reggie'];
3158 04 Mar 15 nicklas 224     var selected = search.checkSelected();
3158 04 Mar 15 nicklas 225     if (selected.length == 0) return;
3158 04 Mar 15 nicklas 226     
3158 04 Mar 15 nicklas 227     if (!confirm('This will remove ' + selected.length + ' RNA items from this list and schedule re-extraction from specimen.\n\nContinue?'))
3158 04 Mar 15 nicklas 228     {
3158 04 Mar 15 nicklas 229       return;
3158 04 Mar 15 nicklas 230     }
3158 04 Mar 15 nicklas 231     
3158 04 Mar 15 nicklas 232     submitInfo = {};
3158 04 Mar 15 nicklas 233     submitInfo.rna = selected;
3158 04 Mar 15 nicklas 234     
3158 04 Mar 15 nicklas 235     submitUrl = '../FlaggedRna.servlet?ID='+App.getSessionId();
3158 04 Mar 15 nicklas 236     submitUrl += '&cmd=ReExtractFromSpecimen';
4086 07 Sep 16 nicklas 237     Wizard.showLoadingAnimation('Registering selected RNA for re-extraction from specimen...');
3158 04 Mar 15 nicklas 238     Wizard.goRegister();
3158 04 Mar 15 nicklas 239   }
3158 04 Mar 15 nicklas 240   
4086 07 Sep 16 nicklas 241   search.reExtractLysate = function()
4086 07 Sep 16 nicklas 242   {
4086 07 Sep 16 nicklas 243     var frm = document.forms['reggie'];
4086 07 Sep 16 nicklas 244     var selected = search.checkSelected();
4086 07 Sep 16 nicklas 245     if (selected.length == 0) return;
4086 07 Sep 16 nicklas 246     
4086 07 Sep 16 nicklas 247     if (!confirm('This will remove ' + selected.length + ' RNA items from this list and schedule re-extraction from lysate.\n\nContinue?'))
4086 07 Sep 16 nicklas 248     {
4086 07 Sep 16 nicklas 249       return;
4086 07 Sep 16 nicklas 250     }
4086 07 Sep 16 nicklas 251     
4086 07 Sep 16 nicklas 252     submitInfo = {};
4086 07 Sep 16 nicklas 253     submitInfo.rna = selected;
4086 07 Sep 16 nicklas 254     
4086 07 Sep 16 nicklas 255     submitUrl = '../FlaggedRna.servlet?ID='+App.getSessionId();
4086 07 Sep 16 nicklas 256     submitUrl += '&cmd=ReExtractFromLysate';
4086 07 Sep 16 nicklas 257     Wizard.showLoadingAnimation('Registering selected RNA for re-extraction from lysate...');
4086 07 Sep 16 nicklas 258     Wizard.goRegister();
4086 07 Sep 16 nicklas 259   }
4086 07 Sep 16 nicklas 260
4086 07 Sep 16 nicklas 261   
3162 04 Mar 15 nicklas 262   search.flagSpecimen = function()
3161 04 Mar 15 nicklas 263   {
3161 04 Mar 15 nicklas 264     var frm = document.forms['reggie'];
3161 04 Mar 15 nicklas 265     var selected = search.checkSelected();
3161 04 Mar 15 nicklas 266     if (selected.length == 0) return;
3161 04 Mar 15 nicklas 267     
3162 04 Mar 15 nicklas 268     if (!confirm('This will remove ' + selected.length + ' RNA items from this list and flag the specimen instead.\n\nContinue?'))
3162 04 Mar 15 nicklas 269     {
3162 04 Mar 15 nicklas 270       return;
3162 04 Mar 15 nicklas 271     }
3162 04 Mar 15 nicklas 272     
3162 04 Mar 15 nicklas 273     submitInfo = {};
3162 04 Mar 15 nicklas 274     submitInfo.rna = selected;
3162 04 Mar 15 nicklas 275     
3162 04 Mar 15 nicklas 276     submitUrl = '../FlaggedRna.servlet?ID='+App.getSessionId();
3162 04 Mar 15 nicklas 277     submitUrl += '&cmd=FlagSpecimen';
3162 04 Mar 15 nicklas 278     Wizard.showLoadingAnimation('Flagging specimen for the selected RNA...');
3162 04 Mar 15 nicklas 279     Wizard.goRegister();
3162 04 Mar 15 nicklas 280   }
3162 04 Mar 15 nicklas 281   
3164 04 Mar 15 nicklas 282   search.reProcessRna = function()
3164 04 Mar 15 nicklas 283   {
3164 04 Mar 15 nicklas 284     var frm = document.forms['reggie'];
3164 04 Mar 15 nicklas 285     var selected = search.checkSelected();
3164 04 Mar 15 nicklas 286     if (selected.length == 0) return;
3164 04 Mar 15 nicklas 287     
3164 04 Mar 15 nicklas 288     if (!confirm('This will schedule ' + selected.length + ' RNA items for library preparation.\n\nContinue?'))
3164 04 Mar 15 nicklas 289     {
3164 04 Mar 15 nicklas 290       return;
3164 04 Mar 15 nicklas 291     }
3164 04 Mar 15 nicklas 292     
3164 04 Mar 15 nicklas 293     submitInfo = {};
3164 04 Mar 15 nicklas 294     submitInfo.rna = selected;
3164 04 Mar 15 nicklas 295     
3164 04 Mar 15 nicklas 296     submitUrl = '../FlaggedRna.servlet?ID='+App.getSessionId();
3164 04 Mar 15 nicklas 297     submitUrl += '&cmd=ReProcessRna';
3164 04 Mar 15 nicklas 298     Wizard.showLoadingAnimation('Registering selected RNA for new library preparation...');
3164 04 Mar 15 nicklas 299     Wizard.goRegister();
3164 04 Mar 15 nicklas 300   }
3164 04 Mar 15 nicklas 301   
3162 04 Mar 15 nicklas 302   search.unflagRna = function()
3162 04 Mar 15 nicklas 303   {
3162 04 Mar 15 nicklas 304     var frm = document.forms['reggie'];
3162 04 Mar 15 nicklas 305     var selected = search.checkSelected();
3162 04 Mar 15 nicklas 306     if (selected.length == 0) return;
3162 04 Mar 15 nicklas 307     
3161 04 Mar 15 nicklas 308     if (!confirm('This will remove ' + selected.length + ' RNA items from this list and reset their flags.\n\nContinue?'))
3161 04 Mar 15 nicklas 309     {
3161 04 Mar 15 nicklas 310       return;
3161 04 Mar 15 nicklas 311     }
3161 04 Mar 15 nicklas 312     
3161 04 Mar 15 nicklas 313     submitInfo = {};
3161 04 Mar 15 nicklas 314     submitInfo.rna = selected;
3161 04 Mar 15 nicklas 315     
3161 04 Mar 15 nicklas 316     submitUrl = '../FlaggedRna.servlet?ID='+App.getSessionId();
3162 04 Mar 15 nicklas 317     submitUrl += '&cmd=UnflagRna';
3161 04 Mar 15 nicklas 318     Wizard.showLoadingAnimation('Unflagging selected RNA...');
3161 04 Mar 15 nicklas 319     Wizard.goRegister();
3161 04 Mar 15 nicklas 320   }
3165 05 Mar 15 nicklas 321   
3165 05 Mar 15 nicklas 322   search.newBioMaterialList = function()
3165 05 Mar 15 nicklas 323   {
3165 05 Mar 15 nicklas 324     var frm = document.forms['reggie'];
3165 05 Mar 15 nicklas 325     var selected = search.checkSelected();
3165 05 Mar 15 nicklas 326     if (selected.length == 0) return;
3161 04 Mar 15 nicklas 327
3165 05 Mar 15 nicklas 328     var url = 'new_list.jsp?ID='+App.getSessionId();
3165 05 Mar 15 nicklas 329     Dialogs.openPopup(url, 'NewBioMaterialList', 600, 400);
3165 05 Mar 15 nicklas 330   }
3165 05 Mar 15 nicklas 331
3158 04 Mar 15 nicklas 332   var submitInfo;
3158 04 Mar 15 nicklas 333   var submitUrl;
3158 04 Mar 15 nicklas 334
3158 04 Mar 15 nicklas 335   search.submit = function()
3158 04 Mar 15 nicklas 336   {
3158 04 Mar 15 nicklas 337     Wizard.asyncJsonRequest(submitUrl, search.submissionResults, 'POST', JSON.stringify(submitInfo));
3158 04 Mar 15 nicklas 338   }
3158 04 Mar 15 nicklas 339   
3158 04 Mar 15 nicklas 340   search.submissionResults = function(response)
3158 04 Mar 15 nicklas 341   {
3158 04 Mar 15 nicklas 342     Wizard.showFinalMessage(response.messages);
3158 04 Mar 15 nicklas 343     Doc.show('gorestart');
3158 04 Mar 15 nicklas 344   }
3158 04 Mar 15 nicklas 345   
3158 04 Mar 15 nicklas 346   return search;
3158 04 Mar 15 nicklas 347 }();
3158 04 Mar 15 nicklas 348
3158 04 Mar 15 nicklas 349 Doc.onLoad(Search.initPage);
3158 04 Mar 15 nicklas 350
3158 04 Mar 15 nicklas 351
3158 04 Mar 15 nicklas 352 /**
3158 04 Mar 15 nicklas 353   Holds one or more filter criterias. Use the 'add*' methods
3158 04 Mar 15 nicklas 354   to add criterias to the filter, and the 'check(rna)' method
3158 04 Mar 15 nicklas 355   to evaluate all criterias against a single RNA item.
3158 04 Mar 15 nicklas 356 */
3158 04 Mar 15 nicklas 357 var Filter = function()
3158 04 Mar 15 nicklas 358 {
3158 04 Mar 15 nicklas 359   this.criterias = [];
3158 04 Mar 15 nicklas 360 }
3158 04 Mar 15 nicklas 361
3158 04 Mar 15 nicklas 362 /**
3158 04 Mar 15 nicklas 363   Adds a text criteria comparing the given RNA property to
3158 04 Mar 15 nicklas 364   a static value (f2).
3158 04 Mar 15 nicklas 365 */
3158 04 Mar 15 nicklas 366 Filter.prototype.addTextCriteria = function(rnaProp, f2)
3158 04 Mar 15 nicklas 367 {
3158 04 Mar 15 nicklas 368   if (f2 != '') 
3158 04 Mar 15 nicklas 369   {
3158 04 Mar 15 nicklas 370     this.criterias[this.criterias.length] = function(rna) { return Comparator.eq(rnaProp(rna), f2) };
3158 04 Mar 15 nicklas 371   }
3158 04 Mar 15 nicklas 372 }
3158 04 Mar 15 nicklas 373
3158 04 Mar 15 nicklas 374 /**
3158 04 Mar 15 nicklas 375   Adds a numeric criteria comparing the given RNA property to
3158 04 Mar 15 nicklas 376   a static value (f2). The 'f2' value may start with either '<' or '>'
3158 04 Mar 15 nicklas 377   to compare with less than/greater than operators, otherwise
3158 04 Mar 15 nicklas 378   it will use the 'approximately equals' operator.
3158 04 Mar 15 nicklas 379 */
3158 04 Mar 15 nicklas 380 Filter.prototype.addNumericCriteria = function(rnaProp, f2, factor)
3158 04 Mar 15 nicklas 381 {
3158 04 Mar 15 nicklas 382   if (f2 != '')
3158 04 Mar 15 nicklas 383   {
3158 04 Mar 15 nicklas 384     var firstChar = f2.charAt(0);
3158 04 Mar 15 nicklas 385     if (!firstChar.match(/[\d\-]/)) f2 = f2.substring(1);
3158 04 Mar 15 nicklas 386
3158 04 Mar 15 nicklas 387     var cmp = Comparator.get(firstChar, Comparator.approx);
3158 04 Mar 15 nicklas 388     var limit = parseFloat(f2);
3158 04 Mar 15 nicklas 389     if (factor) limit *= factor;
3158 04 Mar 15 nicklas 390
3158 04 Mar 15 nicklas 391     this.criterias[this.criterias.length] = function(rna) { return cmp(rnaProp(rna), limit) };
3158 04 Mar 15 nicklas 392   }
3158 04 Mar 15 nicklas 393 }
3158 04 Mar 15 nicklas 394
3158 04 Mar 15 nicklas 395 /**
3158 04 Mar 15 nicklas 396   Evaluate all criterias. Return true if all pass, false otherwise.
3158 04 Mar 15 nicklas 397 */
3158 04 Mar 15 nicklas 398 Filter.prototype.check = function(rna)
3158 04 Mar 15 nicklas 399 {
3158 04 Mar 15 nicklas 400   for (var i = 0; i < this.criterias.length; i++)
3158 04 Mar 15 nicklas 401   {
3158 04 Mar 15 nicklas 402     if (!this.criterias[i](rna)) return false;
3158 04 Mar 15 nicklas 403   }
3158 04 Mar 15 nicklas 404   return true;
3158 04 Mar 15 nicklas 405 }
3158 04 Mar 15 nicklas 406
3158 04 Mar 15 nicklas 407 /**
3158 04 Mar 15 nicklas 408   Functions for extracting various properties from
3158 04 Mar 15 nicklas 409   RNA items. Each method accepts a single RNA as a parameter
3158 04 Mar 15 nicklas 410   and return a value from the RNA item. The methods
3158 04 Mar 15 nicklas 411   are used as parameters to Filter.add*Criteria() methods.
3158 04 Mar 15 nicklas 412 */
3158 04 Mar 15 nicklas 413 var RnaProperty = function()
3158 04 Mar 15 nicklas 414 {
3158 04 Mar 15 nicklas 415   var p = {};
3158 04 Mar 15 nicklas 416   
6720 03 May 22 nicklas 417   // Get "1" if a rna.label exists, or "0" if not
6720 03 May 22 nicklas 418   p.LabelExists = function(rna)
6720 03 May 22 nicklas 419   {
6720 03 May 22 nicklas 420     return rna.label ? '1' : '0';
6720 03 May 22 nicklas 421   }
6720 03 May 22 nicklas 422   
3158 04 Mar 15 nicklas 423   // Get the rna.flag value
3158 04 Mar 15 nicklas 424   p.Flag = function(rna)
3158 04 Mar 15 nicklas 425   {
3158 04 Mar 15 nicklas 426     return rna.flag;
3158 04 Mar 15 nicklas 427   }
3158 04 Mar 15 nicklas 428   
3158 04 Mar 15 nicklas 429   // Get the rna.originalQuantity value
3158 04 Mar 15 nicklas 430   p.OriginalQuantity = function(rna)
3158 04 Mar 15 nicklas 431   {
3158 04 Mar 15 nicklas 432     return rna.originalQuantity;
3158 04 Mar 15 nicklas 433   }
3158 04 Mar 15 nicklas 434   
3158 04 Mar 15 nicklas 435   // Get the rna.remainingQuantity value
3158 04 Mar 15 nicklas 436   p.RemainingQuantity = function(rna)
3158 04 Mar 15 nicklas 437   {
3158 04 Mar 15 nicklas 438     return rna.remainingQuantity;
3158 04 Mar 15 nicklas 439   }
3158 04 Mar 15 nicklas 440   
3158 04 Mar 15 nicklas 441   // Get the rna.rqs or rna.rin value
3158 04 Mar 15 nicklas 442   p.RqsOrRin = function(rna)
3158 04 Mar 15 nicklas 443   {
3158 04 Mar 15 nicklas 444     return rna.rqs || rna.rin;
3158 04 Mar 15 nicklas 445   }
3158 04 Mar 15 nicklas 446   
3158 04 Mar 15 nicklas 447   // Get the rna.lysate.remainingQuantity
3158 04 Mar 15 nicklas 448   p.LysateRemaining = function(rna)
3158 04 Mar 15 nicklas 449   {
3158 04 Mar 15 nicklas 450     return rna.lysate.remainingQuantity;
3158 04 Mar 15 nicklas 451   }
3158 04 Mar 15 nicklas 452   
3158 04 Mar 15 nicklas 453   // Get the rna.lysate.usedQuantity
3158 04 Mar 15 nicklas 454   p.LysateUsedQuantity = function(rna)
3158 04 Mar 15 nicklas 455   {
3158 04 Mar 15 nicklas 456     return rna.lysate.usedQuantity;
3158 04 Mar 15 nicklas 457   }
3158 04 Mar 15 nicklas 458   
3158 04 Mar 15 nicklas 459   // Get the rna.specimen.remainingQuantity
3158 04 Mar 15 nicklas 460   p.SpecimenRemaining = function(rna)
3158 04 Mar 15 nicklas 461   {
3158 04 Mar 15 nicklas 462     return rna.specimen.remainingQuantity;
3158 04 Mar 15 nicklas 463   }
3158 04 Mar 15 nicklas 464   
3158 04 Mar 15 nicklas 465   // Get the number of rna.libraries
3158 04 Mar 15 nicklas 466   p.NumLibraries = function(rna)
3158 04 Mar 15 nicklas 467   {
3158 04 Mar 15 nicklas 468     return rna.libraries.length;
3158 04 Mar 15 nicklas 469   }
3158 04 Mar 15 nicklas 470
3158 04 Mar 15 nicklas 471   // Get the number of rna.rawbioassays
3158 04 Mar 15 nicklas 472   p.NumRawBioAssays = function(rna)
3158 04 Mar 15 nicklas 473   {
3158 04 Mar 15 nicklas 474     return rna.rawbioassays.length;
3158 04 Mar 15 nicklas 475   }
3158 04 Mar 15 nicklas 476
3158 04 Mar 15 nicklas 477   return p;
3158 04 Mar 15 nicklas 478 }();
3158 04 Mar 15 nicklas 479
3158 04 Mar 15 nicklas 480 /**
3158 04 Mar 15 nicklas 481   Comparator functions for comparing two values.
3158 04 Mar 15 nicklas 482 */
3158 04 Mar 15 nicklas 483 var Comparator = function()
3158 04 Mar 15 nicklas 484 {
3158 04 Mar 15 nicklas 485   var cmp = {};
3158 04 Mar 15 nicklas 486   
3158 04 Mar 15 nicklas 487   /**
3158 04 Mar 15 nicklas 488     Return a comparator based on the symbol
3158 04 Mar 15 nicklas 489     which can be either '>' or '<' to return
3158 04 Mar 15 nicklas 490     Comparator.gt or Comparator.lt. Otherwise
3158 04 Mar 15 nicklas 491     the given default or Comparator.eq is returned.
3158 04 Mar 15 nicklas 492   */
3158 04 Mar 15 nicklas 493   cmp.get = function(symbol, defaultCmp)
3158 04 Mar 15 nicklas 494   {
3158 04 Mar 15 nicklas 495     var c;
3158 04 Mar 15 nicklas 496     if (symbol == '<')
3158 04 Mar 15 nicklas 497     {
3158 04 Mar 15 nicklas 498       c = cmp.lt;
3158 04 Mar 15 nicklas 499     }
3158 04 Mar 15 nicklas 500     else if (symbol == '>')
3158 04 Mar 15 nicklas 501     {
3158 04 Mar 15 nicklas 502       c = cmp.gt;
3158 04 Mar 15 nicklas 503     }
3158 04 Mar 15 nicklas 504     else
3158 04 Mar 15 nicklas 505     {
3158 04 Mar 15 nicklas 506       c = defaultCmp || cmp.eq;
3158 04 Mar 15 nicklas 507     }
3158 04 Mar 15 nicklas 508     return c;
3158 04 Mar 15 nicklas 509   }
3158 04 Mar 15 nicklas 510   
3158 04 Mar 15 nicklas 511   // Compare if two values are equal
3158 04 Mar 15 nicklas 512   cmp.eq = function(v1, v2)
3158 04 Mar 15 nicklas 513   {
3158 04 Mar 15 nicklas 514     return v1 == v2;
3158 04 Mar 15 nicklas 515   }
3158 04 Mar 15 nicklas 516   
3158 04 Mar 15 nicklas 517   // Compare if two values are appoximately equals (difference is not more than 0.05)
3158 04 Mar 15 nicklas 518   cmp.approx = function(v1, v2)
3158 04 Mar 15 nicklas 519   {
3158 04 Mar 15 nicklas 520     return Math.abs(v2 - v1) < 0.05;
3158 04 Mar 15 nicklas 521   }
3158 04 Mar 15 nicklas 522   
3158 04 Mar 15 nicklas 523   // Compare if v1 is greater than or equal to v2
3158 04 Mar 15 nicklas 524   cmp.gt = function(v1, v2)
3158 04 Mar 15 nicklas 525   {
3158 04 Mar 15 nicklas 526     return v1 >= v2;
3158 04 Mar 15 nicklas 527   }
3158 04 Mar 15 nicklas 528   
3158 04 Mar 15 nicklas 529   // Compare if v1 is less than or equal to v2
3158 04 Mar 15 nicklas 530   cmp.lt = function(v1, v2)
3158 04 Mar 15 nicklas 531   {
3158 04 Mar 15 nicklas 532     return v1 <= v2;
3158 04 Mar 15 nicklas 533   }
3158 04 Mar 15 nicklas 534   
3158 04 Mar 15 nicklas 535   return cmp;
3158 04 Mar 15 nicklas 536 }();
3158 04 Mar 15 nicklas 537