extensions/net.sf.basedb.reggie/trunk/resources/sampleproc/rnaqc_bioanalyzer.js

Code
Comments
Other
Rev Date Author Line
2922 12 Nov 14 nicklas 1 var RnaQcExport = function()
2922 12 Nov 14 nicklas 2 {
2922 12 Nov 14 nicklas 3   var rnaqc = {};
2922 12 Nov 14 nicklas 4   
2922 12 Nov 14 nicklas 5   var selectedRnaQc;
2922 12 Nov 14 nicklas 6   var rinIsValid = [];
2922 12 Nov 14 nicklas 7   
2922 12 Nov 14 nicklas 8   // Page initialization
2922 12 Nov 14 nicklas 9   rnaqc.initPage = function()
2922 12 Nov 14 nicklas 10   {
2922 12 Nov 14 nicklas 11     // Step 1
2922 12 Nov 14 nicklas 12     Events.addEventHandler('step-1', 'wizard-validate', rnaqc.validateStep1);
2922 12 Nov 14 nicklas 13     Wizard.initFileSelectionField('pdf');
2922 12 Nov 14 nicklas 14     Events.addEventHandler('qcRunDate', 'change', Wizard.validateDate);
2922 12 Nov 14 nicklas 15     
2922 12 Nov 14 nicklas 16     // Step 2
2922 12 Nov 14 nicklas 17     Events.addEventHandler('step-2', 'wizard-initialize', rnaqc.initializeStep2);
2922 12 Nov 14 nicklas 18     Events.addEventHandler('step-2', 'wizard-validate', rnaqc.validateStep2);
2922 12 Nov 14 nicklas 19     
2922 12 Nov 14 nicklas 20     // Navigation
2922 12 Nov 14 nicklas 21     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
2922 12 Nov 14 nicklas 22     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
2922 12 Nov 14 nicklas 23     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
2922 12 Nov 14 nicklas 24     Buttons.addClickHandler('goregister', Wizard.goRegister);
2922 12 Nov 14 nicklas 25
2922 12 Nov 14 nicklas 26     // Final registration
2922 12 Nov 14 nicklas 27     Events.addEventHandler('wizard', 'wizard-submit', rnaqc.submit);
2922 12 Nov 14 nicklas 28
2922 12 Nov 14 nicklas 29     var url = '../RnaQc.servlet?ID='+App.getSessionId();
2922 12 Nov 14 nicklas 30     url += '&cmd=GetActiveRnaQcBioPlates&numFreeWells=0&bioPlateType=BA_RNAQC';
2922 12 Nov 14 nicklas 31     Wizard.showLoadingAnimation('Loading RNAQC plates...');
2922 12 Nov 14 nicklas 32     Wizard.asyncJsonRequest(url, rnaqc.qcPlatesLoaded);
2922 12 Nov 14 nicklas 33   }
2922 12 Nov 14 nicklas 34   
2922 12 Nov 14 nicklas 35
2922 12 Nov 14 nicklas 36   rnaqc.qcPlatesLoaded = function(response)
2922 12 Nov 14 nicklas 37   {
2922 12 Nov 14 nicklas 38     var frm = document.forms['reggie'];
2922 12 Nov 14 nicklas 39     var qcPlates = response.plates;
2922 12 Nov 14 nicklas 40     
2922 12 Nov 14 nicklas 41     for (var i = 0; i < qcPlates.length; i++)
2922 12 Nov 14 nicklas 42     {
2922 12 Nov 14 nicklas 43       var plate = qcPlates[i];
2922 12 Nov 14 nicklas 44       if (plate.usedWells > 0)
2922 12 Nov 14 nicklas 45       {
2922 12 Nov 14 nicklas 46         var option = new Option(plate.name + ' -- ' + plate.usedWells + ' used wells', plate.id);
2922 12 Nov 14 nicklas 47         option.bioPlate = plate;
2922 12 Nov 14 nicklas 48         frm.bioPlates[frm.bioPlates.length] = option;
2922 12 Nov 14 nicklas 49       }
2922 12 Nov 14 nicklas 50     }
2922 12 Nov 14 nicklas 51     
2922 12 Nov 14 nicklas 52     if (frm.bioPlates.length == 0)
2922 12 Nov 14 nicklas 53     {
2922 12 Nov 14 nicklas 54       Wizard.setFatalError('Could not find any bioplates to register.');
2922 12 Nov 14 nicklas 55       return;
2922 12 Nov 14 nicklas 56     }
2922 12 Nov 14 nicklas 57     
2922 12 Nov 14 nicklas 58     Doc.show('step-1');
2922 12 Nov 14 nicklas 59     Doc.show('gonext');
2922 12 Nov 14 nicklas 60     Events.sendChangeEvent('qcRunDate');
2922 12 Nov 14 nicklas 61   }
2922 12 Nov 14 nicklas 62   
2922 12 Nov 14 nicklas 63   rnaqc.validateStep1 = function(event)
2922 12 Nov 14 nicklas 64   {
2922 12 Nov 14 nicklas 65     var valid = Wizard.isValid('qcRunDate');
2922 12 Nov 14 nicklas 66     if (!valid) event.preventDefault();
2922 12 Nov 14 nicklas 67   }
2922 12 Nov 14 nicklas 68   
2922 12 Nov 14 nicklas 69   rnaqc.initializeStep2 = function()
2922 12 Nov 14 nicklas 70   {
2922 12 Nov 14 nicklas 71     var frm = document.forms['reggie'];
2922 12 Nov 14 nicklas 72     var url = '../RnaQc.servlet?ID='+App.getSessionId();
2922 12 Nov 14 nicklas 73     url += '&cmd=GetRnaQcItemsOnBioPlate&bioPlateId='+frm.bioPlates.value;
2922 12 Nov 14 nicklas 74     Wizard.showLoadingAnimation('Loading RNAQC items...');
2922 12 Nov 14 nicklas 75     Wizard.asyncJsonRequest(url, rnaqc.rnaQcItemsLoaded);
2922 12 Nov 14 nicklas 76   }
2922 12 Nov 14 nicklas 77
2922 12 Nov 14 nicklas 78   rnaqc.rnaQcItemsLoaded = function(response)
2922 12 Nov 14 nicklas 79   {
2922 12 Nov 14 nicklas 80     var frm = document.forms['reggie'];
2922 12 Nov 14 nicklas 81     selectedRnaQc = response.rnaqc;
2922 12 Nov 14 nicklas 82     var selectedBioPlate = frm.bioPlates[frm.bioPlates.selectedIndex].bioPlate;
2922 12 Nov 14 nicklas 83     
2922 12 Nov 14 nicklas 84     var html = '<table id="rnaQcTable" class="step-form">';
2922 12 Nov 14 nicklas 85     // First header row
2922 12 Nov 14 nicklas 86     html += '<tr>';
2922 12 Nov 14 nicklas 87     html += '<th>RNA QC</th>';
2922 12 Nov 14 nicklas 88     html += '<th class="dottedleft">' + Strings.encodeTags(selectedBioPlate.name) + '</th>';
2922 12 Nov 14 nicklas 89     html += '<th class="dottedleft">RIN¹</th>';
2922 12 Nov 14 nicklas 90     html += '<th></th>';
2922 12 Nov 14 nicklas 91     html += '<th class="dottedleft comments">Comments</th>';
2922 12 Nov 14 nicklas 92     html += '</tr>';
2922 12 Nov 14 nicklas 93
2922 12 Nov 14 nicklas 94
2922 12 Nov 14 nicklas 95     for (var rnaNo=0; rnaNo < selectedRnaQc.length; rnaNo++)
2922 12 Nov 14 nicklas 96     {
2922 12 Nov 14 nicklas 97       var rna = selectedRnaQc[rnaNo];
3742 12 Feb 16 nicklas 98       var isYellow = rna.specimen && rna.specimen.YellowLabel != null;
3742 12 Feb 16 nicklas 99       var img = isYellow ? '<img src="../images/yellow-label.png">' : '';
3742 12 Feb 16 nicklas 100       
3742 12 Feb 16 nicklas 101       html += '<tr class="highlight'+(isYellow ? ' yellow-specimen' : '')+'">';
3742 12 Feb 16 nicklas 102       html += '<td class="prompt if-yellow">'+img+Strings.encodeTags(rna.name)+'</td>';
3154 27 Feb 15 nicklas 103       html += '<td class="dottedleft">'+(rna.bioWell.column+1)+'</td>';
2922 12 Nov 14 nicklas 104       html += '<td class="dottedleft"><input class="required" type="text" name="rin.'+rnaNo+'" id="rin.'+rnaNo+'" style="width: 6em;" maxlength="6"></td>';
2922 12 Nov 14 nicklas 105       html += '<td class="status" id="rin.'+rnaNo+'.status"></td>';
2922 12 Nov 14 nicklas 106       html += '<td class="dottedleft comments"><input type="text" name="comment.'+rnaNo+'"></td>';
2922 12 Nov 14 nicklas 107       html += '</tr>'
2922 12 Nov 14 nicklas 108     }
2922 12 Nov 14 nicklas 109
3154 27 Feb 15 nicklas 110     html += '<tr style="border-top-width: 1px;">';
2922 12 Nov 14 nicklas 111     html += '<td colspan="5" class="help" style="text-align: left;">¹RIN: a number between 0 and 10 or -100 if no value could be measured.</td>';
2922 12 Nov 14 nicklas 112     html += '</tr>'
2922 12 Nov 14 nicklas 113     html += '</table>';
2922 12 Nov 14 nicklas 114     
2922 12 Nov 14 nicklas 115     Doc.element('rnaQc').innerHTML = html;
2922 12 Nov 14 nicklas 116     
2922 12 Nov 14 nicklas 117     Wizard.setCurrentStep(2);
2922 12 Nov 14 nicklas 118     Doc.show('goregister');
2922 12 Nov 14 nicklas 119     Doc.show('gocancel');
2922 12 Nov 14 nicklas 120     
2922 12 Nov 14 nicklas 121     Wizard.keepSessionAlive();
2922 12 Nov 14 nicklas 122
2922 12 Nov 14 nicklas 123     for (var rnaNo=0; rnaNo < selectedRnaQc.length; rnaNo++)
2922 12 Nov 14 nicklas 124     {
2922 12 Nov 14 nicklas 125       Events.addEventHandler('rin.'+rnaNo, 'keypress', Wizard.focusOnEnter, { 'next-focus': 'rin.'+(rnaNo+1) });
2922 12 Nov 14 nicklas 126       Events.addEventHandler('rin.'+rnaNo, 'keypress', Events.numberOnly);
2922 12 Nov 14 nicklas 127       Events.addEventHandler('rin.'+rnaNo, 'change', rnaqc.rinOnChange, { 'index': rnaNo });
2922 12 Nov 14 nicklas 128       rinIsValid[rnaNo] = false;
2922 12 Nov 14 nicklas 129     }
2922 12 Nov 14 nicklas 130
2922 12 Nov 14 nicklas 131     frm['rin.0'].focus();
2922 12 Nov 14 nicklas 132   }
2922 12 Nov 14 nicklas 133   
2922 12 Nov 14 nicklas 134   rnaqc.rinOnChange = function(event)
2922 12 Nov 14 nicklas 135   {
2922 12 Nov 14 nicklas 136     var index = Data.int(event.currentTarget, 'index');
2922 12 Nov 14 nicklas 137     var rin = parseFloat(event.currentTarget.value);
2922 12 Nov 14 nicklas 138     
2922 12 Nov 14 nicklas 139     if ((rin >= 0 && rin <= 10) || rin == -100)
2922 12 Nov 14 nicklas 140     {
2922 12 Nov 14 nicklas 141       rinIsValid[index] = true;
2922 12 Nov 14 nicklas 142       Wizard.setInputStatus('rin.'+index, 'valid');
2922 12 Nov 14 nicklas 143     }
2922 12 Nov 14 nicklas 144     else
2922 12 Nov 14 nicklas 145     {
2922 12 Nov 14 nicklas 146       rinIsValid[index] = false;
2922 12 Nov 14 nicklas 147       Wizard.setInputStatus('rin.'+index, 'invalid', 'RIN must be a number between 0 and 10 (or -100)');
2922 12 Nov 14 nicklas 148     }
2922 12 Nov 14 nicklas 149   }
2922 12 Nov 14 nicklas 150   
2922 12 Nov 14 nicklas 151   rnaqc.validateStep2 = function(event)
2922 12 Nov 14 nicklas 152   {
2922 12 Nov 14 nicklas 153     var valid = true;
2922 12 Nov 14 nicklas 154     for (var rnaNo = 0; rnaNo < rinIsValid.length; rnaNo++)
2922 12 Nov 14 nicklas 155     {
2922 12 Nov 14 nicklas 156       if (!rinIsValid[rnaNo])
2922 12 Nov 14 nicklas 157       {
2922 12 Nov 14 nicklas 158         Wizard.setInputStatus('rin.'+rnaNo, 'invalid', 'RIN must be a number between 0 and 10 (or -100)');
2922 12 Nov 14 nicklas 159         valid = false;
2922 12 Nov 14 nicklas 160       }
2922 12 Nov 14 nicklas 161     }
2922 12 Nov 14 nicklas 162     if (!valid) event.preventDefault();
2922 12 Nov 14 nicklas 163   }
2922 12 Nov 14 nicklas 164
2922 12 Nov 14 nicklas 165   rnaqc.submit = function()
2922 12 Nov 14 nicklas 166   {
2922 12 Nov 14 nicklas 167     var frm = document.forms['reggie'];
2922 12 Nov 14 nicklas 168     var submitInfo = {};
2922 12 Nov 14 nicklas 169     
2922 12 Nov 14 nicklas 170     submitInfo.pdf = frm.pdf.value;
2922 12 Nov 14 nicklas 171     submitInfo.bioPlate = parseInt(frm.bioPlates.value);
2922 12 Nov 14 nicklas 172     submitInfo.QCRunDate = frm.qcRunDate.value;
2922 12 Nov 14 nicklas 173     submitInfo.QCOperator = frm.qcOperator.value;
2922 12 Nov 14 nicklas 174     submitInfo.comments = frm.comments.value;
2922 12 Nov 14 nicklas 175     
2922 12 Nov 14 nicklas 176     var all = [];    
2922 12 Nov 14 nicklas 177     submitInfo.rnaqc = all;
2922 12 Nov 14 nicklas 178     
2922 12 Nov 14 nicklas 179     for (var rnaNo = 0; rnaNo < selectedRnaQc.length; rnaNo++)
2922 12 Nov 14 nicklas 180     {
2922 12 Nov 14 nicklas 181       var rna = selectedRnaQc[rnaNo];
2922 12 Nov 14 nicklas 182       var tmp = {};
2922 12 Nov 14 nicklas 183       
2922 12 Nov 14 nicklas 184       tmp.id = rna.id;
2922 12 Nov 14 nicklas 185       tmp.rin = parseFloat(frm['rin.'+rnaNo].value);
2922 12 Nov 14 nicklas 186       tmp.comment = frm['comment.'+rnaNo].value;
2922 12 Nov 14 nicklas 187       
2922 12 Nov 14 nicklas 188       all[all.length] = tmp;
2922 12 Nov 14 nicklas 189     }
2922 12 Nov 14 nicklas 190     
2922 12 Nov 14 nicklas 191     var url = '../RnaQc.servlet?ID='+App.getSessionId();
2922 12 Nov 14 nicklas 192     url += '&cmd=RegisterRinValues';
2922 12 Nov 14 nicklas 193     Wizard.showLoadingAnimation('Performing registration...');
2922 12 Nov 14 nicklas 194     Wizard.asyncJsonRequest(url, rnaqc.submissionResults, 'POST', JSON.stringify(submitInfo));
2922 12 Nov 14 nicklas 195   }
2922 12 Nov 14 nicklas 196   
2922 12 Nov 14 nicklas 197   rnaqc.submissionResults = function(response)
2922 12 Nov 14 nicklas 198   {
2922 12 Nov 14 nicklas 199     Wizard.showFinalMessage(response.messages);
2922 12 Nov 14 nicklas 200     Doc.show('gorestart');
2922 12 Nov 14 nicklas 201   }
2922 12 Nov 14 nicklas 202   return rnaqc;
2922 12 Nov 14 nicklas 203 }();
2922 12 Nov 14 nicklas 204
2922 12 Nov 14 nicklas 205 Doc.onLoad(RnaQcExport.initPage);
2922 12 Nov 14 nicklas 206