extensions/net.sf.basedb.reggie/trunk/resources/mipsprep/lib_registration.js

Code
Comments
Other
Rev Date Author Line
5425 14 May 19 nicklas 1 var LibReg = function()
5425 14 May 19 nicklas 2 {
5425 14 May 19 nicklas 3   var libreg = {};
5425 14 May 19 nicklas 4   var debug = 0;
5425 14 May 19 nicklas 5   
5425 14 May 19 nicklas 6   var libCommentsIsValid = false;
5429 16 May 19 nicklas 7   var barcodeTemplateIsValid = false;
5425 14 May 19 nicklas 8   
5425 14 May 19 nicklas 9   // Page initialization
5425 14 May 19 nicklas 10   libreg.initPage = function()
5425 14 May 19 nicklas 11   {    
5425 14 May 19 nicklas 12     // Step 1
5425 14 May 19 nicklas 13     Events.addEventHandler('bioplate', 'change', libreg.bioPlateOnChange);
5425 14 May 19 nicklas 14     Events.addEventHandler('outcomeSuccess', 'click', libreg.outcomeOnChange);
5425 14 May 19 nicklas 15     Events.addEventHandler('outcomeFailed', 'click', libreg.outcomeOnChange);
5425 14 May 19 nicklas 16     Events.addEventHandler('step-1', 'wizard-validate', libreg.validateStep1);
5425 14 May 19 nicklas 17     
5425 14 May 19 nicklas 18     // Step 2
5425 14 May 19 nicklas 19     Events.addEventHandler('step-2', 'wizard-initialize', libreg.initializeStep2);
5425 14 May 19 nicklas 20     Events.addEventHandler('step-2', 'wizard-validate', libreg.validateStep2);
5450 27 May 19 nicklas 21     Events.addEventHandler('hybridizationDate', 'blur', Wizard.validateDate);
5450 27 May 19 nicklas 22     Events.addEventHandler('pcrDate', 'blur', Wizard.validateDate);
5425 14 May 19 nicklas 23     Events.addEventHandler('cleanupDate', 'blur', Wizard.validateDate);
5425 14 May 19 nicklas 24     Events.addEventHandler('libComments', 'blur', libreg.libCommentsOnChange);
5760 26 Nov 19 nicklas 25     Events.addEventHandler('barcodeTemplate', 'change', libreg.barcodeTemplateOnChange);
5425 14 May 19 nicklas 26
5425 14 May 19 nicklas 27     // Navigation
5425 14 May 19 nicklas 28     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
5425 14 May 19 nicklas 29     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
5425 14 May 19 nicklas 30     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
5425 14 May 19 nicklas 31     Buttons.addClickHandler('goregister', Wizard.goRegister);
5425 14 May 19 nicklas 32     
5425 14 May 19 nicklas 33     // Final registration
5425 14 May 19 nicklas 34     Events.addEventHandler('wizard', 'wizard-submit', libreg.submit);
5425 14 May 19 nicklas 35     
5425 14 May 19 nicklas 36     var url = '../Mips.servlet?ID='+App.getSessionId();
5425 14 May 19 nicklas 37     url += '&cmd=GetUnprocessedPlates&plateType=MIPS';
5425 14 May 19 nicklas 38     Wizard.showLoadingAnimation('Loading MIPs plates...');
5425 14 May 19 nicklas 39     Wizard.asyncJsonRequest(url, libreg.initializeStep1);
5425 14 May 19 nicklas 40   }
5425 14 May 19 nicklas 41
5425 14 May 19 nicklas 42
5425 14 May 19 nicklas 43   libreg.initializeStep1 = function(response)
5425 14 May 19 nicklas 44   {
5425 14 May 19 nicklas 45     var frm = document.forms['reggie'];
5425 14 May 19 nicklas 46     var bioplates = response.bioplates;
5425 14 May 19 nicklas 47
5425 14 May 19 nicklas 48     var plates = frm.bioplate;
5425 14 May 19 nicklas 49     if (bioplates.length > 0)
5425 14 May 19 nicklas 50     {
5425 14 May 19 nicklas 51       for (var i=0; i < bioplates.length; i++)
5425 14 May 19 nicklas 52       {
5425 14 May 19 nicklas 53         var bioplate = bioplates[i];
5425 14 May 19 nicklas 54         var name = bioplate.name;
5425 14 May 19 nicklas 55         var option = new Option(name, bioplate.id);
5425 14 May 19 nicklas 56         option.bioplate = bioplate;
5425 14 May 19 nicklas 57         plates.options[plates.length] = option;
5425 14 May 19 nicklas 58       }
5425 14 May 19 nicklas 59     }
5425 14 May 19 nicklas 60     else
5425 14 May 19 nicklas 61     {
5425 14 May 19 nicklas 62       Wizard.setFatalError('No MIPs plates available for processing.');
5425 14 May 19 nicklas 63       return;
5425 14 May 19 nicklas 64     }
5425 14 May 19 nicklas 65
5425 14 May 19 nicklas 66     libreg.bioPlateOnChange();
5425 14 May 19 nicklas 67     libreg.outcomeOnChange();
5425 14 May 19 nicklas 68     frm.bioplate.focus();
5425 14 May 19 nicklas 69
5425 14 May 19 nicklas 70     Doc.show('step-1');
5425 14 May 19 nicklas 71     Doc.show('gonext');
5425 14 May 19 nicklas 72   }
5425 14 May 19 nicklas 73   
5425 14 May 19 nicklas 74   libreg.bioPlateOnChange = function()
5425 14 May 19 nicklas 75   {
5425 14 May 19 nicklas 76     Wizard.setInputStatus('bioplate', 'valid');
5425 14 May 19 nicklas 77   }
5425 14 May 19 nicklas 78
5425 14 May 19 nicklas 79   libreg.outcomeOnChange = function()
5425 14 May 19 nicklas 80   {
5425 14 May 19 nicklas 81     var frm = document.forms['reggie'];
5425 14 May 19 nicklas 82     var failed = Doc.element('outcomeFailed').checked
5425 14 May 19 nicklas 83     if (failed)
5425 14 May 19 nicklas 84     {
5425 14 May 19 nicklas 85       Doc.addClass(frm.libComments, 'required');
5425 14 May 19 nicklas 86     }
5425 14 May 19 nicklas 87     else
5425 14 May 19 nicklas 88     {
5425 14 May 19 nicklas 89       Doc.removeClass(frm.libComments, 'required');
5425 14 May 19 nicklas 90     }
5425 14 May 19 nicklas 91   }
5425 14 May 19 nicklas 92
5425 14 May 19 nicklas 93   
5425 14 May 19 nicklas 94   libreg.validateStep1 = function(event)
5425 14 May 19 nicklas 95   {}
5425 14 May 19 nicklas 96   
5425 14 May 19 nicklas 97   libreg.initializeStep2 = function()
5425 14 May 19 nicklas 98   {
5425 14 May 19 nicklas 99     var frm = document.forms['reggie'];  
5425 14 May 19 nicklas 100
5425 14 May 19 nicklas 101     var failed = Doc.element('outcomeFailed').checked;
5425 14 May 19 nicklas 102     Wizard.setCurrentStep(2);
5425 14 May 19 nicklas 103     if (failed)
5425 14 May 19 nicklas 104     {
5425 14 May 19 nicklas 105       Wizard.showGoNextConfirmation(true, 'Check to verify registration of failure.');
5425 14 May 19 nicklas 106       libreg.libCommentsOnChange();
5425 14 May 19 nicklas 107     }
5425 14 May 19 nicklas 108     
5425 14 May 19 nicklas 109     Doc.show('gocancel');
5425 14 May 19 nicklas 110     Doc.show('goregister');
5425 14 May 19 nicklas 111     
5425 14 May 19 nicklas 112     var plateName = frm.bioplate[frm.bioplate.selectedIndex].bioplate.name;
5425 14 May 19 nicklas 113     
5450 27 May 19 nicklas 114     frm.hybridizationDate.focus();
5425 14 May 19 nicklas 115
5425 14 May 19 nicklas 116     // Load Library protocols
5425 14 May 19 nicklas 117     Reggie.loadProtocols('LIBRARY_PROTOCOL', 'libProtocol', 'LIBPREP_TARGET', 'MIPs');
5429 16 May 19 nicklas 118
5429 16 May 19 nicklas 119     // Load barcode templates
5429 16 May 19 nicklas 120     var url = '../Mips.servlet?ID='+App.getSessionId() + '&cmd=GetBarcodeTemplates';
5429 16 May 19 nicklas 121     Doc.addClass('barcodeTemplate', 'list-loading');
5429 16 May 19 nicklas 122     frm.barcodeTemplate[0] = new Option('loading...');
5429 16 May 19 nicklas 123     Wizard.asyncJsonRequest(url, libreg.barcodeTemplatesLoaded);
5429 16 May 19 nicklas 124
5425 14 May 19 nicklas 125   }
5429 16 May 19 nicklas 126   
5429 16 May 19 nicklas 127   libreg.barcodeTemplatesLoaded = function(response)
5429 16 May 19 nicklas 128   {
5429 16 May 19 nicklas 129     Doc.removeClass('barcodeTemplate', 'list-loading');
5429 16 May 19 nicklas 130     var frm = document.forms['reggie'];
5429 16 May 19 nicklas 131     var templates = response.templates;
5429 16 May 19 nicklas 132   
5429 16 May 19 nicklas 133     frm.barcodeTemplate.length = 0;
5760 26 Nov 19 nicklas 134     frm.barcodeTemplate[0] = new Option('', '');
5429 16 May 19 nicklas 135     for (var i = 0; i < templates.length; i++)
5429 16 May 19 nicklas 136     {
5429 16 May 19 nicklas 137       var tmp = templates[i];
5429 16 May 19 nicklas 138       var option = new Option(tmp.name, tmp.id);
5760 26 Nov 19 nicklas 139       option.template = tmp;
5429 16 May 19 nicklas 140       frm.barcodeTemplate[frm.barcodeTemplate.length] = option;
5429 16 May 19 nicklas 141     }
5760 26 Nov 19 nicklas 142     libreg.barcodeTemplateOnChange();
5760 26 Nov 19 nicklas 143   }
5760 26 Nov 19 nicklas 144   
5760 26 Nov 19 nicklas 145   libreg.barcodeTemplateOnChange = function()
5760 26 Nov 19 nicklas 146   {
5760 26 Nov 19 nicklas 147     var frm = document.forms['reggie'];
5760 26 Nov 19 nicklas 148     
5760 26 Nov 19 nicklas 149     Wizard.setInputStatus('barcodeTemplate');
5760 26 Nov 19 nicklas 150     Wizard.hideGoNextConfirmation();
5760 26 Nov 19 nicklas 151     barcodeTemplateIsValid = false;
5760 26 Nov 19 nicklas 152     
5760 26 Nov 19 nicklas 153     if (frm.barcodeTemplate.length == 1)
5429 16 May 19 nicklas 154     {
5429 16 May 19 nicklas 155       Wizard.setInputStatus('barcodeTemplate', 'invalid', 'No available barcode templates');
5429 16 May 19 nicklas 156       barcodeTemplateIsValid = false;
5429 16 May 19 nicklas 157       return;
5429 16 May 19 nicklas 158     }
5760 26 Nov 19 nicklas 159     
5760 26 Nov 19 nicklas 160     if (frm.barcodeTemplate.value == '')
5760 26 Nov 19 nicklas 161     {
5760 26 Nov 19 nicklas 162       Wizard.setInputStatus('barcodeTemplate', 'invalid', 'A barcode template must be selected');
5760 26 Nov 19 nicklas 163       barcodeTemplateIsValid = false;
5760 26 Nov 19 nicklas 164       return;
5760 26 Nov 19 nicklas 165     }
5760 26 Nov 19 nicklas 166     
5429 16 May 19 nicklas 167     barcodeTemplateIsValid = true;
5760 26 Nov 19 nicklas 168
5760 26 Nov 19 nicklas 169     var template = frm.barcodeTemplate[frm.barcodeTemplate.selectedIndex].template;
5760 26 Nov 19 nicklas 170     if (template.otherPlates && template.otherPlates.length > 0)
5760 26 Nov 19 nicklas 171     {
5760 26 Nov 19 nicklas 172       var msg = 'This template is also used by ' + Strings.encodeTags(template.otherPlates[0].name);
5760 26 Nov 19 nicklas 173       if (template.otherPlates.length > 1)
5760 26 Nov 19 nicklas 174       {
5760 26 Nov 19 nicklas 175         msg += ' and '+(template.otherPlates.length-1)+' more plate(s)';
5760 26 Nov 19 nicklas 176       }
5760 26 Nov 19 nicklas 177       Wizard.setInputStatus('barcodeTemplate', 'warning', msg);
5760 26 Nov 19 nicklas 178       Wizard.showGoNextConfirmation(true, 'Verify registration of plate with duplicate barcode template');
5760 26 Nov 19 nicklas 179     }
5760 26 Nov 19 nicklas 180     else
5760 26 Nov 19 nicklas 181     {
5760 26 Nov 19 nicklas 182       Wizard.setInputStatus('barcodeTemplate', 'valid');
5760 26 Nov 19 nicklas 183     }
5429 16 May 19 nicklas 184   }
5429 16 May 19 nicklas 185   
5425 14 May 19 nicklas 186   libreg.libCommentsOnChange = function()
5425 14 May 19 nicklas 187   {
5425 14 May 19 nicklas 188     var failed = Doc.element('outcomeFailed').checked;
5425 14 May 19 nicklas 189     if (!failed) return;
5425 14 May 19 nicklas 190
5425 14 May 19 nicklas 191     var frm = document.forms['reggie'];
5425 14 May 19 nicklas 192     libCommentsIsValid = false;
5425 14 May 19 nicklas 193     Wizard.setInputStatus('libComments');
5425 14 May 19 nicklas 194     
5425 14 May 19 nicklas 195     var comments = frm.libComments.value;
5425 14 May 19 nicklas 196     if (comments == '')
5425 14 May 19 nicklas 197     {
5425 14 May 19 nicklas 198       Wizard.setInputStatus('libComments', 'invalid', 'Missing');
5425 14 May 19 nicklas 199       return;
5425 14 May 19 nicklas 200     }
5425 14 May 19 nicklas 201
5425 14 May 19 nicklas 202     Wizard.setInputStatus('libComments', 'valid');
5425 14 May 19 nicklas 203     libCommentsIsValid = true;
5425 14 May 19 nicklas 204   }
5425 14 May 19 nicklas 205
5425 14 May 19 nicklas 206   libreg.validateStep2 = function(event)
5425 14 May 19 nicklas 207   {
5429 16 May 19 nicklas 208     var valid = barcodeTemplateIsValid;
5425 14 May 19 nicklas 209     
5450 27 May 19 nicklas 210     valid &= Wizard.isValid('hybridizationDate');
5450 27 May 19 nicklas 211     valid &= Wizard.isValid('pcrDate');
5425 14 May 19 nicklas 212     valid &= Wizard.isValid('cleanupDate');
5425 14 May 19 nicklas 213     
5425 14 May 19 nicklas 214     var failed = Doc.element('outcomeFailed').checked;
5425 14 May 19 nicklas 215     if (failed)
5425 14 May 19 nicklas 216     {
5425 14 May 19 nicklas 217       valid &= libCommentsIsValid;
5425 14 May 19 nicklas 218     }
5425 14 May 19 nicklas 219     if (!valid) event.preventDefault();
5425 14 May 19 nicklas 220   }
5425 14 May 19 nicklas 221
5425 14 May 19 nicklas 222   
5425 14 May 19 nicklas 223   libreg.submit = function()
5425 14 May 19 nicklas 224   {
5425 14 May 19 nicklas 225     var frm = document.forms['reggie'];
5425 14 May 19 nicklas 226
5425 14 May 19 nicklas 227     var submitInfo = {};
5425 14 May 19 nicklas 228     submitInfo.bioplate = parseInt(frm.bioplate.value, 10);
5425 14 May 19 nicklas 229
5425 14 May 19 nicklas 230     var failed = Doc.element('outcomeFailed').checked;
5425 14 May 19 nicklas 231     submitInfo.failed = failed;
5425 14 May 19 nicklas 232       
5450 27 May 19 nicklas 233     submitInfo.hybridizationDate = frm.hybridizationDate.value;
5450 27 May 19 nicklas 234     submitInfo.hybridizationOperator = frm.hybridizationOperator.value;
5450 27 May 19 nicklas 235     submitInfo.pcrDate = frm.pcrDate.value;
5450 27 May 19 nicklas 236     submitInfo.pcrOperator = frm.pcrOperator.value;
5425 14 May 19 nicklas 237     submitInfo.cleanupDate = frm.cleanupDate.value;
5425 14 May 19 nicklas 238     submitInfo.cleanupOperator = frm.cleanupOperator.value;
5425 14 May 19 nicklas 239
5429 16 May 19 nicklas 240     submitInfo.barcodeTemplate = parseInt(frm.barcodeTemplate.value, 10);
5425 14 May 19 nicklas 241     submitInfo.libProtocol = parseInt(frm.libProtocol.value, 10);
5425 14 May 19 nicklas 242     submitInfo.libComments = frm.libComments.value;
5425 14 May 19 nicklas 243     
5425 14 May 19 nicklas 244     var  url = '../Mips.servlet?ID='+App.getSessionId();
5425 14 May 19 nicklas 245     url += '&cmd=RegisterLibraryPrep';
5425 14 May 19 nicklas 246     Wizard.showLoadingAnimation('Performing registration...');
5425 14 May 19 nicklas 247     Wizard.asyncJsonRequest(url, libreg.submissionResults, 'POST', JSON.stringify(submitInfo));
5425 14 May 19 nicklas 248   }
5425 14 May 19 nicklas 249
5425 14 May 19 nicklas 250   libreg.submissionResults = function(response)
5425 14 May 19 nicklas 251   {
5425 14 May 19 nicklas 252     Wizard.showFinalMessage(response.messages);
5425 14 May 19 nicklas 253     Doc.show('gorestart');
5425 14 May 19 nicklas 254   }
5425 14 May 19 nicklas 255
5425 14 May 19 nicklas 256   return libreg;
5425 14 May 19 nicklas 257 }();
5425 14 May 19 nicklas 258
5425 14 May 19 nicklas 259 Doc.onLoad(LibReg.initPage);
5425 14 May 19 nicklas 260