extensions/net.sf.basedb.reggie/trunk/resources/libprep/pool_registration.js

Code
Comments
Other
Rev Date Author Line
2659 12 Sep 14 nicklas 1 var Pool = function()
2659 12 Sep 14 nicklas 2 {
2659 12 Sep 14 nicklas 3   var pool = {};
2702 26 Sep 14 nicklas 4   var debug = 0;
2659 12 Sep 14 nicklas 5
2659 12 Sep 14 nicklas 6   var pools;
2659 12 Sep 14 nicklas 7   var poolsAreValid = false;
2659 12 Sep 14 nicklas 8
2659 12 Sep 14 nicklas 9   // Page initialization
2659 12 Sep 14 nicklas 10   pool.initPage = function()
2659 12 Sep 14 nicklas 11   {
2659 12 Sep 14 nicklas 12     // Step 1
2659 12 Sep 14 nicklas 13     Events.addEventHandler('bioplate', 'change', pool.bioplateOnChange);
2659 12 Sep 14 nicklas 14     Events.addEventHandler('pools', 'change', pool.poolOnChange);
2659 12 Sep 14 nicklas 15     Events.addEventHandler('step-1', 'wizard-validate', pool.validateStep1);
2659 12 Sep 14 nicklas 16     
2659 12 Sep 14 nicklas 17     // Step 2
2659 12 Sep 14 nicklas 18     Events.addEventHandler('step-2', 'wizard-initialize', pool.initializeStep2);
2659 12 Sep 14 nicklas 19     Events.addEventHandler('step-2', 'wizard-validate', pool.validateStep2);
2659 12 Sep 14 nicklas 20     Events.addEventHandler('poolDate', 'blur', Wizard.validateDate);
2659 12 Sep 14 nicklas 21     
2659 12 Sep 14 nicklas 22     // Navigation
2659 12 Sep 14 nicklas 23     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
2659 12 Sep 14 nicklas 24     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
2659 12 Sep 14 nicklas 25     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
2659 12 Sep 14 nicklas 26     Buttons.addClickHandler('goregister', Wizard.goRegister);
2659 12 Sep 14 nicklas 27     
2659 12 Sep 14 nicklas 28     // Final registration
2659 12 Sep 14 nicklas 29     Events.addEventHandler('wizard', 'wizard-submit', pool.submit);
2659 12 Sep 14 nicklas 30     
2659 12 Sep 14 nicklas 31     var url = '../Pool.servlet?ID='+App.getSessionId();
2659 12 Sep 14 nicklas 32     url += '&cmd=GetUnprocessedPools';    
2659 12 Sep 14 nicklas 33     Wizard.showLoadingAnimation('Loading pools...');
2659 12 Sep 14 nicklas 34     Wizard.asyncJsonRequest(url, pool.initializeStep1);
2659 12 Sep 14 nicklas 35   }
2659 12 Sep 14 nicklas 36
2659 12 Sep 14 nicklas 37
2659 12 Sep 14 nicklas 38   pool.initializeStep1 = function(response)
2659 12 Sep 14 nicklas 39   {
2659 12 Sep 14 nicklas 40     var frm = document.forms['reggie'];
2659 12 Sep 14 nicklas 41     pools = response.pools;
2659 12 Sep 14 nicklas 42     
2659 12 Sep 14 nicklas 43     // We get a list of pools from the servlet
2659 12 Sep 14 nicklas 44     // Each pool has a list of libraries 
2659 12 Sep 14 nicklas 45     // We want to find the Library bioplates that are unique
2659 12 Sep 14 nicklas 46     // within a pool (eg. all libraries are from the same bioplate)
2659 12 Sep 14 nicklas 47     if (pools.length == 0)
2659 12 Sep 14 nicklas 48     {
2659 12 Sep 14 nicklas 49       Wizard.setFatalError('No pools available for processing.');
2659 12 Sep 14 nicklas 50       return;
2659 12 Sep 14 nicklas 51     }
2659 12 Sep 14 nicklas 52     
2659 12 Sep 14 nicklas 53     var poolsList = frm.pools;
2659 12 Sep 14 nicklas 54     var plateList = frm.bioplate;
2659 12 Sep 14 nicklas 55     var libPlates = [];
2659 12 Sep 14 nicklas 56     for (var poolNo=0; poolNo < pools.length; poolNo++)
2659 12 Sep 14 nicklas 57     {
2659 12 Sep 14 nicklas 58       var p = pools[poolNo];
2659 12 Sep 14 nicklas 59       
2659 12 Sep 14 nicklas 60       // Shortcut to single-plate pools
2659 12 Sep 14 nicklas 61       var libPlateForPool = p.libPlates.length == 1 && !p.isManual ? p.libPlates[0] : null;
2659 12 Sep 14 nicklas 62       p.libPlate = libPlateForPool;
2659 12 Sep 14 nicklas 63
2659 12 Sep 14 nicklas 64       // If the pool has a single library bioplate add it to the selection list
2659 12 Sep 14 nicklas 65       // If the pool doesn't have a single library bioplate, nothing is added to
2659 12 Sep 14 nicklas 66       // the list and the pool can only be selected when the 'manual pools' option is
2659 12 Sep 14 nicklas 67       // active for the bioplates list
2659 12 Sep 14 nicklas 68       if (libPlateForPool != null && !libPlates[libPlateForPool.name])
2659 12 Sep 14 nicklas 69       {
2659 12 Sep 14 nicklas 70         libPlates[libPlateForPool.name] = libPlateForPool;
2659 12 Sep 14 nicklas 71         var plateOption = new Option(libPlateForPool.name, libPlateForPool.id);
2659 12 Sep 14 nicklas 72         plateOption.plate = libPlateForPool;
2659 12 Sep 14 nicklas 73         plateList[plateList.length] = plateOption;
2659 12 Sep 14 nicklas 74       }
2659 12 Sep 14 nicklas 75
2659 12 Sep 14 nicklas 76     }
2659 12 Sep 14 nicklas 77     if (plateList.length > 1) plateList.selectedIndex = 1;
2659 12 Sep 14 nicklas 78
2659 12 Sep 14 nicklas 79     pool.bioplateOnChange();
2659 12 Sep 14 nicklas 80     Doc.show('step-1');
2659 12 Sep 14 nicklas 81     Doc.show('gonext');
2659 12 Sep 14 nicklas 82   }
2659 12 Sep 14 nicklas 83   
2659 12 Sep 14 nicklas 84   
2659 12 Sep 14 nicklas 85   // Add pools to the pools list based on the bioplate selection
2659 12 Sep 14 nicklas 86   pool.bioplateOnChange = function()
2659 12 Sep 14 nicklas 87   {
2659 12 Sep 14 nicklas 88     var frm = document.forms['reggie'];
2659 12 Sep 14 nicklas 89     
2659 12 Sep 14 nicklas 90     var libPlateId = parseInt(frm.bioplate.value);
2659 12 Sep 14 nicklas 91
2659 12 Sep 14 nicklas 92     // Clear current list
2659 12 Sep 14 nicklas 93     frm.pools.length = 0;
2659 12 Sep 14 nicklas 94     
2659 12 Sep 14 nicklas 95     for (var poolNo = 0; poolNo < pools.length; poolNo++)
2659 12 Sep 14 nicklas 96     {
2659 12 Sep 14 nicklas 97       var p = pools[poolNo];
2659 12 Sep 14 nicklas 98       // If a libplate is selected, only show pools that have all libraries from that plate
2659 12 Sep 14 nicklas 99       // If no libplate is selected, only show pools that have libraries from multiple plates
2659 12 Sep 14 nicklas 100       var addPool = (libPlateId &&  p.libPlate && p.libPlate.id == libPlateId) || (!libPlateId && p.libPlate == null);
2659 12 Sep 14 nicklas 101       if (addPool)
2659 12 Sep 14 nicklas 102       {
2659 12 Sep 14 nicklas 103         var name = p.name;
2659 12 Sep 14 nicklas 104         if (p.libPlate == null)
2659 12 Sep 14 nicklas 105         {
2659 12 Sep 14 nicklas 106           
2659 12 Sep 14 nicklas 107           name += ' - ';
2659 12 Sep 14 nicklas 108           var numPlates = p.libPlates.length;
2659 12 Sep 14 nicklas 109           var title = '';
2659 12 Sep 14 nicklas 110           if (numPlates <= 2)
2659 12 Sep 14 nicklas 111           {
2659 12 Sep 14 nicklas 112             for (var plateNo=0; plateNo < numPlates; plateNo++)
2659 12 Sep 14 nicklas 113             {
2659 12 Sep 14 nicklas 114               var libPlate = p.libPlates[plateNo];
2659 12 Sep 14 nicklas 115               if (plateNo > 0) name += ', ';
2659 12 Sep 14 nicklas 116               name += libPlate.name;
2659 12 Sep 14 nicklas 117             }
2659 12 Sep 14 nicklas 118           }
2659 12 Sep 14 nicklas 119           else
2659 12 Sep 14 nicklas 120           {
2659 12 Sep 14 nicklas 121             name += p.libPlates[0].name + ' + ' + (numPlates-1) + ' more...';
2659 12 Sep 14 nicklas 122             for (var plateNo=0; plateNo < numPlates; plateNo++)
2659 12 Sep 14 nicklas 123             {
2659 12 Sep 14 nicklas 124               var libPlate = p.libPlates[plateNo];
2659 12 Sep 14 nicklas 125               if (plateNo > 0) title += ', ';
2659 12 Sep 14 nicklas 126               title += libPlate.name;
2659 12 Sep 14 nicklas 127             }
2659 12 Sep 14 nicklas 128           }
2659 12 Sep 14 nicklas 129         }
2659 12 Sep 14 nicklas 130
4583 21 Sep 17 nicklas 131         var option = new Option(name, p.id, false, libPlateId || frm.pools.length == 0);
2659 12 Sep 14 nicklas 132         option.pool = p;
2659 12 Sep 14 nicklas 133         frm.pools[frm.pools.length] = option;
2659 12 Sep 14 nicklas 134       }
2659 12 Sep 14 nicklas 135     }
2659 12 Sep 14 nicklas 136     
2659 12 Sep 14 nicklas 137     Wizard.setInputStatus('pools');
2659 12 Sep 14 nicklas 138     if (libPlateId)
2659 12 Sep 14 nicklas 139     {
2659 12 Sep 14 nicklas 140       frm.pools.disabled = true;
2659 12 Sep 14 nicklas 141     }
2659 12 Sep 14 nicklas 142     else
2659 12 Sep 14 nicklas 143     {
2659 12 Sep 14 nicklas 144       frm.pools.disabled = false;
2659 12 Sep 14 nicklas 145     }
2659 12 Sep 14 nicklas 146     pool.poolOnChange();
2659 12 Sep 14 nicklas 147   }
2659 12 Sep 14 nicklas 148
2659 12 Sep 14 nicklas 149   
2659 12 Sep 14 nicklas 150   pool.poolOnChange = function()
2659 12 Sep 14 nicklas 151   {
2659 12 Sep 14 nicklas 152     var frm = document.forms['reggie'];
2659 12 Sep 14 nicklas 153     
2659 12 Sep 14 nicklas 154     poolsAreValid = false;
2659 12 Sep 14 nicklas 155     Wizard.setInputStatus('pools');
2659 12 Sep 14 nicklas 156
2659 12 Sep 14 nicklas 157     for (var i = 0; i < frm.pools.length; i++)
2659 12 Sep 14 nicklas 158     {
2659 12 Sep 14 nicklas 159       if (frm.pools[i].selected) poolsAreValid = true;
2659 12 Sep 14 nicklas 160     }
2659 12 Sep 14 nicklas 161     
2659 12 Sep 14 nicklas 162     if (!poolsAreValid)
2659 12 Sep 14 nicklas 163     {
2659 12 Sep 14 nicklas 164       Wizard.setInputStatus('pools', 'invalid', 'Select at least one pool');
2659 12 Sep 14 nicklas 165       return;
2659 12 Sep 14 nicklas 166     }
2659 12 Sep 14 nicklas 167     
2659 12 Sep 14 nicklas 168     Wizard.setInputStatus('pools', 'valid');
2659 12 Sep 14 nicklas 169   }
2659 12 Sep 14 nicklas 170
2659 12 Sep 14 nicklas 171   pool.validateStep1 = function(event)
2659 12 Sep 14 nicklas 172   {
2659 12 Sep 14 nicklas 173     if (!poolsAreValid) event.preventDefault();
2659 12 Sep 14 nicklas 174   }
2659 12 Sep 14 nicklas 175   
2659 12 Sep 14 nicklas 176   pool.initializeStep2 = function()
2659 12 Sep 14 nicklas 177   {
2659 12 Sep 14 nicklas 178     var frm = document.forms['reggie'];
2659 12 Sep 14 nicklas 179     Wizard.setCurrentStep(2);
2659 12 Sep 14 nicklas 180     Doc.show('gocancel');
2659 12 Sep 14 nicklas 181     Doc.show('goregister');
2659 12 Sep 14 nicklas 182     
5452 28 May 19 nicklas 183     Reggie.loadProtocols('POOLING_PROTOCOL', 'poolProtocol', 'LIBPREP_TARGET', 'Manual');
2659 12 Sep 14 nicklas 184
2659 12 Sep 14 nicklas 185     var html = '';
2659 12 Sep 14 nicklas 186     for (var i = 0; i < frm.pools.length; i++)
2659 12 Sep 14 nicklas 187     {
2659 12 Sep 14 nicklas 188       if (frm.pools[i].selected) 
2659 12 Sep 14 nicklas 189       {
2659 12 Sep 14 nicklas 190         var pool = frm.pools[i].pool;
2659 12 Sep 14 nicklas 191         html += '<tr class="align-top">';
2659 12 Sep 14 nicklas 192         html += '<td class="subprompt">'+Strings.encodeTags(pool.name)+'</td>';
2659 12 Sep 14 nicklas 193         html += '<td class="input"><textarea rows="3" name="comments.'+pool.id+'"></textarea></td>';
2659 12 Sep 14 nicklas 194         html += '<td class="status"></td>';
2659 12 Sep 14 nicklas 195         html += '<td class="help"></td>';
2659 12 Sep 14 nicklas 196         html += '</tr>';
2659 12 Sep 14 nicklas 197       }
2659 12 Sep 14 nicklas 198     }  
2659 12 Sep 14 nicklas 199     Doc.element('pool-comments').innerHTML = html;
2659 12 Sep 14 nicklas 200     
2659 12 Sep 14 nicklas 201     for (var i = 0; i < frm.pools.length; i++)
2659 12 Sep 14 nicklas 202     {
2659 12 Sep 14 nicklas 203       if (frm.pools[i].selected) 
2659 12 Sep 14 nicklas 204       {
2659 12 Sep 14 nicklas 205         var pool = frm.pools[i].pool;
2659 12 Sep 14 nicklas 206         frm['comments.'+pool.id].value = pool.comments;
2659 12 Sep 14 nicklas 207       }
2659 12 Sep 14 nicklas 208     }
2659 12 Sep 14 nicklas 209
2659 12 Sep 14 nicklas 210     frm.poolDate.focus();
2659 12 Sep 14 nicklas 211   }
2659 12 Sep 14 nicklas 212   
2659 12 Sep 14 nicklas 213   pool.validateStep2 = function(event)
2659 12 Sep 14 nicklas 214   {
2659 12 Sep 14 nicklas 215     if (!Wizard.isValid('poolDate')) 
2659 12 Sep 14 nicklas 216     {
2659 12 Sep 14 nicklas 217       event.preventDefault();
2659 12 Sep 14 nicklas 218     }
2659 12 Sep 14 nicklas 219   }
2659 12 Sep 14 nicklas 220   
2659 12 Sep 14 nicklas 221   pool.submit = function()
2659 12 Sep 14 nicklas 222   {
2659 12 Sep 14 nicklas 223     var frm = document.forms['reggie'];
2659 12 Sep 14 nicklas 224     
2659 12 Sep 14 nicklas 225     var pools = [];
2659 12 Sep 14 nicklas 226     for (var i = 0; i < frm.pools.length; i++)
2659 12 Sep 14 nicklas 227     {
2659 12 Sep 14 nicklas 228       if (frm.pools[i].selected) 
2659 12 Sep 14 nicklas 229       {
2659 12 Sep 14 nicklas 230         var p = frm.pools[i].pool;
2659 12 Sep 14 nicklas 231         var poolInfo = {};
2659 12 Sep 14 nicklas 232         poolInfo.id = p.id;
2659 12 Sep 14 nicklas 233         poolInfo.comments = frm['comments.'+p.id].value;
2659 12 Sep 14 nicklas 234         pools[pools.length] = poolInfo;
2659 12 Sep 14 nicklas 235       }
2659 12 Sep 14 nicklas 236     }
2659 12 Sep 14 nicklas 237     var submitInfo = {};
2659 12 Sep 14 nicklas 238     submitInfo.pools = pools;
2659 12 Sep 14 nicklas 239     submitInfo.poolDate = frm.poolDate.value;
2659 12 Sep 14 nicklas 240     submitInfo.poolProtocol = parseInt(frm.poolProtocol.value, 10);
2659 12 Sep 14 nicklas 241     submitInfo.poolOperator = frm.poolOperator.value;
2659 12 Sep 14 nicklas 242     
2659 12 Sep 14 nicklas 243     var url = '../Pool.servlet?ID='+App.getSessionId();
2659 12 Sep 14 nicklas 244     url += '&cmd=RegisterPooledLibraries';
2659 12 Sep 14 nicklas 245     Wizard.showLoadingAnimation('Performing registration...');
2659 12 Sep 14 nicklas 246     Wizard.asyncJsonRequest(url, pool.submissionResults, 'POST', JSON.stringify(submitInfo));
2659 12 Sep 14 nicklas 247   }
2659 12 Sep 14 nicklas 248
2659 12 Sep 14 nicklas 249   pool.submissionResults = function(response)
2659 12 Sep 14 nicklas 250   {
2659 12 Sep 14 nicklas 251     Wizard.showFinalMessage(response.messages);
2659 12 Sep 14 nicklas 252     Doc.show('gorestart');
2659 12 Sep 14 nicklas 253   }
2659 12 Sep 14 nicklas 254
2659 12 Sep 14 nicklas 255   return pool;
2659 12 Sep 14 nicklas 256 }();
2659 12 Sep 14 nicklas 257
2659 12 Sep 14 nicklas 258 Doc.onLoad(Pool.initPage);
2659 12 Sep 14 nicklas 259