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

Code
Comments
Other
Rev Date Author Line
2795 13 Oct 14 nicklas 1 var Barcode = function()
2795 13 Oct 14 nicklas 2 {
2795 13 Oct 14 nicklas 3   var barcode = {};
2853 23 Oct 14 nicklas 4   var debug = 0;
2795 13 Oct 14 nicklas 5   
2795 13 Oct 14 nicklas 6   var barcodesByName = [];
2795 13 Oct 14 nicklas 7
2795 13 Oct 14 nicklas 8   // Page initialization
2795 13 Oct 14 nicklas 9   barcode.initPage = function()
2795 13 Oct 14 nicklas 10   {
2795 13 Oct 14 nicklas 11     // Step 1
2795 13 Oct 14 nicklas 12     Events.addEventHandler('step-1', 'wizard-validate', barcode.validateStep1);
2795 13 Oct 14 nicklas 13     Events.addEventHandler('bioplate', 'change', barcode.bioPlateOnChange);
2795 13 Oct 14 nicklas 14     
2795 13 Oct 14 nicklas 15     // Step 2
2795 13 Oct 14 nicklas 16     Events.addEventHandler('step-2', 'wizard-initialize', barcode.initializeStep2);
2795 13 Oct 14 nicklas 17     Events.addEventHandler('step-2', 'wizard-validate', barcode.validateStep2);
2795 13 Oct 14 nicklas 18     Events.addEventHandler('pool_schema', 'change', barcode.poolSchemaOnChange);
2795 13 Oct 14 nicklas 19     Events.addEventHandler('barcode_variant', 'change', barcode.barcodeVariantOnChange);
2795 13 Oct 14 nicklas 20     var wells = document.getElementsByClassName('well');
2795 13 Oct 14 nicklas 21     for (var wellNo = 0; wellNo < wells.length; wellNo++)
2795 13 Oct 14 nicklas 22     {
2795 13 Oct 14 nicklas 23       Events.addEventHandler(wells[wellNo], 'click', barcode.selectBarcode);
2795 13 Oct 14 nicklas 24     }
2795 13 Oct 14 nicklas 25     Events.addEventHandler('select-barcode', 'click', barcode.barcodeSelected);
2795 13 Oct 14 nicklas 26     Events.addEventHandler('wizard', 'click', barcode.hideBarcodeSelection);
2795 13 Oct 14 nicklas 27
2795 13 Oct 14 nicklas 28     // Navigation
2795 13 Oct 14 nicklas 29     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
2795 13 Oct 14 nicklas 30     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
2795 13 Oct 14 nicklas 31     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
2795 13 Oct 14 nicklas 32     Buttons.addClickHandler('goregister', Wizard.goRegister);
2795 13 Oct 14 nicklas 33     
2795 13 Oct 14 nicklas 34     // Final registration
2795 13 Oct 14 nicklas 35     Events.addEventHandler('wizard', 'wizard-submit', barcode.submit);
2795 13 Oct 14 nicklas 36
2795 13 Oct 14 nicklas 37     var url = '../LibPrep.servlet?ID='+App.getSessionId();
2795 13 Oct 14 nicklas 38     url += '&cmd=GetCDNAPlatesForBarcoding';    
2795 13 Oct 14 nicklas 39     Wizard.showLoadingAnimation('Loading cDNA plates...');
2795 13 Oct 14 nicklas 40     Wizard.asyncJsonRequest(url, barcode.initializeStep1);
2795 13 Oct 14 nicklas 41     
2795 13 Oct 14 nicklas 42     var url = '../LibPrep.servlet?ID='+App.getSessionId();
5866 13 Mar 20 nicklas 43     url += '&cmd=GetAllBarcodeInfo&pipeline=RNA_SEQ&barcodeSet=TRUSEQ_SINGLE';
2795 13 Oct 14 nicklas 44     Wizard.asyncJsonRequest(url, barcode.barcodesLoaded);
2795 13 Oct 14 nicklas 45   }
2795 13 Oct 14 nicklas 46
2795 13 Oct 14 nicklas 47
2795 13 Oct 14 nicklas 48   barcode.initializeStep1 = function(response)
2795 13 Oct 14 nicklas 49   {
2795 13 Oct 14 nicklas 50     var frm = document.forms['reggie'];
2795 13 Oct 14 nicklas 51
2795 13 Oct 14 nicklas 52     var bioplates = response.bioplates;
2795 13 Oct 14 nicklas 53     var plates = frm.bioplate;
2795 13 Oct 14 nicklas 54     if (bioplates.length > 0)
2795 13 Oct 14 nicklas 55     {
2795 13 Oct 14 nicklas 56       for (var i=0; i < bioplates.length; i++)
2795 13 Oct 14 nicklas 57       {
2795 13 Oct 14 nicklas 58         var bioplate = bioplates[i];
2795 13 Oct 14 nicklas 59         var option = new Option(bioplate.name, bioplate.id);
2795 13 Oct 14 nicklas 60         option.bioplate = bioplate;
2795 13 Oct 14 nicklas 61         plates.options[plates.length] = option;
2795 13 Oct 14 nicklas 62       }
2795 13 Oct 14 nicklas 63     }
2795 13 Oct 14 nicklas 64     else
2795 13 Oct 14 nicklas 65     {
2795 13 Oct 14 nicklas 66       Wizard.setFatalError('No cDNA bioplates available for processing.');
2795 13 Oct 14 nicklas 67       return;
2795 13 Oct 14 nicklas 68     }
2795 13 Oct 14 nicklas 69     
2795 13 Oct 14 nicklas 70     bioplateIsValid = true;
2795 13 Oct 14 nicklas 71     Wizard.setInputStatus('bioplate', 'valid');
2795 13 Oct 14 nicklas 72     Events.sendChangeEvent('bioplate');
2795 13 Oct 14 nicklas 73
2795 13 Oct 14 nicklas 74     Doc.show('step-1');
2795 13 Oct 14 nicklas 75     Doc.show('gonext');
2795 13 Oct 14 nicklas 76   }
2795 13 Oct 14 nicklas 77   
2795 13 Oct 14 nicklas 78   barcode.bioPlateOnChange = function()
2795 13 Oct 14 nicklas 79   {
2795 13 Oct 14 nicklas 80     var frm = document.forms['reggie'];
2795 13 Oct 14 nicklas 81     var bioplate = frm.bioplate[frm.bioplate.selectedIndex].bioplate;
2795 13 Oct 14 nicklas 82     Doc.element('cdnaComments').innerHTML = Strings.encodeTags(bioplate.comments);
2795 13 Oct 14 nicklas 83   }
2795 13 Oct 14 nicklas 84
2795 13 Oct 14 nicklas 85   barcode.barcodesLoaded = function(response)
2795 13 Oct 14 nicklas 86   {
2795 13 Oct 14 nicklas 87     var barcodes = response.barcodes
2795 13 Oct 14 nicklas 88     var selectBarcodeHtml = '';
2795 13 Oct 14 nicklas 89     
2795 13 Oct 14 nicklas 90     for (var i = 0; i < barcodes.length; i++)
2795 13 Oct 14 nicklas 91     {
2795 13 Oct 14 nicklas 92       if (i % 8 == 0 && i > 0)
2795 13 Oct 14 nicklas 93       {
2795 13 Oct 14 nicklas 94         selectBarcodeHtml += '<div class="menuseparator"></div>';
2795 13 Oct 14 nicklas 95       }
2795 13 Oct 14 nicklas 96       var barcode = barcodes[i];
2795 13 Oct 14 nicklas 97       barcodesByName[barcode.name] = barcode;
3026 11 Dec 14 nicklas 98       selectBarcodeHtml += '<div class="menuitem interactable enabled" id="bc-'+barcode.id+'" data-barcode-name="'+Strings.encodeTags(barcode.name)+'">';
2795 13 Oct 14 nicklas 99       selectBarcodeHtml += Strings.encodeTags(barcode.name)+'</div>';
2795 13 Oct 14 nicklas 100     }
2795 13 Oct 14 nicklas 101     Doc.element('select-barcode-all').innerHTML = selectBarcodeHtml;
2795 13 Oct 14 nicklas 102   }
2795 13 Oct 14 nicklas 103
2795 13 Oct 14 nicklas 104   barcode.validateStep1 = function(event)
2795 13 Oct 14 nicklas 105   {}
2795 13 Oct 14 nicklas 106
2795 13 Oct 14 nicklas 107   barcode.initializeStep2 = function()
2795 13 Oct 14 nicklas 108   {
2795 13 Oct 14 nicklas 109     var frm = document.forms['reggie'];
2795 13 Oct 14 nicklas 110
2795 13 Oct 14 nicklas 111     var url = '../LibPrep.servlet?ID='+App.getSessionId();
2795 13 Oct 14 nicklas 112     url += '&cmd=GetCDnaInfoForPlate&bioplate='+frm.bioplate.value;  
2795 13 Oct 14 nicklas 113     Wizard.showLoadingAnimation('Loading cDNA bioplate information...');
2795 13 Oct 14 nicklas 114     Wizard.asyncJsonRequest(url, barcode.cdnaInfoLoaded);
2795 13 Oct 14 nicklas 115   }
2795 13 Oct 14 nicklas 116   
2795 13 Oct 14 nicklas 117   barcode.cdnaInfoLoaded = function(response)
2795 13 Oct 14 nicklas 118   {
2795 13 Oct 14 nicklas 119     var frm = document.forms['reggie'];
2795 13 Oct 14 nicklas 120     var cdnaPlate = frm.bioplate[frm.bioplate.selectedIndex].bioplate;
2795 13 Oct 14 nicklas 121
2795 13 Oct 14 nicklas 122     var schema = PoolSchema.getById(cdnaPlate.poolSchema);
3289 30 Apr 15 nicklas 123     PoolSchema.initList(frm.pool_schema, schema.id, 'manual');
2795 13 Oct 14 nicklas 124     PoolSchema.initVariantList(frm.barcode_variant, schema, cdnaPlate.barcodeVariant);
2795 13 Oct 14 nicklas 125     
2795 13 Oct 14 nicklas 126     var list = response.cdna;
2795 13 Oct 14 nicklas 127     // Pre-process the return cDNA items
2795 13 Oct 14 nicklas 128     for (var i = 0; i < list.length; i++)
2795 13 Oct 14 nicklas 129     {
2795 13 Oct 14 nicklas 130       barcode.checkAndPreProcessCDna(list[i]);
2795 13 Oct 14 nicklas 131     }
2795 13 Oct 14 nicklas 132     
2795 13 Oct 14 nicklas 133     barcode.viewAsPlate(list, schema);
2795 13 Oct 14 nicklas 134     Wizard.keepSessionAlive();
2795 13 Oct 14 nicklas 135
2795 13 Oct 14 nicklas 136     Wizard.setCurrentStep(2);
2795 13 Oct 14 nicklas 137     Doc.show('goregister');
2795 13 Oct 14 nicklas 138     Doc.show('gocancel');
2795 13 Oct 14 nicklas 139   }
2795 13 Oct 14 nicklas 140
2795 13 Oct 14 nicklas 141   
2795 13 Oct 14 nicklas 142   barcode.checkAndPreProcessCDna = function(cdna)
2795 13 Oct 14 nicklas 143   {
2795 13 Oct 14 nicklas 144     // Set the 'stratagene'/'external' flag
2795 13 Oct 14 nicklas 145     cdna.stratagene = Reggie.isStratagene(cdna.name);
2795 13 Oct 14 nicklas 146     cdna.external = Reggie.isExternal(cdna.name);
3760 19 Feb 16 nicklas 147     cdna.isYellow = cdna.specimen && cdna.specimen.YellowLabel != null;
2795 13 Oct 14 nicklas 148   }
2795 13 Oct 14 nicklas 149
2795 13 Oct 14 nicklas 150   barcode.viewAsPlate = function(list, schema)
2795 13 Oct 14 nicklas 151   {
2795 13 Oct 14 nicklas 152     Plate.init(8, 12, schema, WellPainter);
2795 13 Oct 14 nicklas 153
2795 13 Oct 14 nicklas 154     for (var i = 0; i < list.length; i++)
2795 13 Oct 14 nicklas 155     {
2795 13 Oct 14 nicklas 156       var cdna = list[i];
2795 13 Oct 14 nicklas 157       var well = cdna.bioWell;
2795 13 Oct 14 nicklas 158       Plate.getWell(well.row, well.column).setExtract(cdna);
2795 13 Oct 14 nicklas 159     }
2795 13 Oct 14 nicklas 160     var frm = document.forms['reggie'];
2795 13 Oct 14 nicklas 161     
2795 13 Oct 14 nicklas 162     var barcodeVariant = PoolSchema.getBarcodeVariantByName(schema, frm.barcode_variant.value);
2795 13 Oct 14 nicklas 163     barcode.assignSchemaDefinedBarcodeVariant(schema, barcodeVariant);
2795 13 Oct 14 nicklas 164     
2795 13 Oct 14 nicklas 165     WellPainter.barcodeVariant = barcodeVariant;
2795 13 Oct 14 nicklas 166     Plate.paint(Plate.getWells());
2795 13 Oct 14 nicklas 167     PoolSchema.buildPoolTableRow(schema, 12, false);
2795 13 Oct 14 nicklas 168   }
2795 13 Oct 14 nicklas 169
2795 13 Oct 14 nicklas 170   barcode.assignSchemaDefinedBarcodeVariant = function(schema, barcodeVariant)
2795 13 Oct 14 nicklas 171   {
2795 13 Oct 14 nicklas 172     var wells = Plate.getWells();
2795 13 Oct 14 nicklas 173     for (var i = 0; i < wells.length; i++)
2795 13 Oct 14 nicklas 174     {
2795 13 Oct 14 nicklas 175       var well = wells[i];
2795 13 Oct 14 nicklas 176       var cdna = well.extract;
2795 13 Oct 14 nicklas 177       if (cdna)
2795 13 Oct 14 nicklas 178       {
2795 13 Oct 14 nicklas 179         var indexSet = barcodeVariant ? barcodeVariant.indexSets[well.column] : null;
2795 13 Oct 14 nicklas 180         var barcode = null;
2795 13 Oct 14 nicklas 181         if (indexSet)
2795 13 Oct 14 nicklas 182         {
2795 13 Oct 14 nicklas 183           var barcodeName = indexSet.barcodes[well.row];
2795 13 Oct 14 nicklas 184           barcode = barcodesByName[barcodeName];
2795 13 Oct 14 nicklas 185         }
2795 13 Oct 14 nicklas 186         cdna.barcode = barcode;
2795 13 Oct 14 nicklas 187         cdna.defaultBarcode = barcode;
2795 13 Oct 14 nicklas 188         well.duplicate = false;
2795 13 Oct 14 nicklas 189       }
2795 13 Oct 14 nicklas 190     }
2795 13 Oct 14 nicklas 191   }
2795 13 Oct 14 nicklas 192   
2795 13 Oct 14 nicklas 193   barcode.poolSchemaOnChange = function()
2795 13 Oct 14 nicklas 194   {
2795 13 Oct 14 nicklas 195     var frm = document.forms['reggie'];
3289 30 Apr 15 nicklas 196     var schema = PoolSchema.getById(frm.pool_schema.value);
2795 13 Oct 14 nicklas 197     Plate.setPoolSchema(schema);
2795 13 Oct 14 nicklas 198     PoolSchema.initVariantList(frm.barcode_variant, schema);
2795 13 Oct 14 nicklas 199     
2795 13 Oct 14 nicklas 200     var barcodeVariant = PoolSchema.getBarcodeVariantByName(schema, frm.barcode_variant.value);
2795 13 Oct 14 nicklas 201     barcode.assignSchemaDefinedBarcodeVariant(schema, barcodeVariant);
2795 13 Oct 14 nicklas 202     
2795 13 Oct 14 nicklas 203     WellPainter.barcodeVariant = barcodeVariant;
2795 13 Oct 14 nicklas 204     Plate.paint(Plate.getWells());
2795 13 Oct 14 nicklas 205     PoolSchema.buildPoolTableRow(schema, 12, false);
2795 13 Oct 14 nicklas 206   }
2795 13 Oct 14 nicklas 207
2795 13 Oct 14 nicklas 208   barcode.barcodeVariantOnChange = function()
2795 13 Oct 14 nicklas 209   {
2795 13 Oct 14 nicklas 210     var frm = document.forms['reggie'];
3289 30 Apr 15 nicklas 211     var schema = PoolSchema.getById(frm.pool_schema.value);
2795 13 Oct 14 nicklas 212     var barcodeVariant = PoolSchema.getBarcodeVariantByName(schema, frm.barcode_variant.value);
2795 13 Oct 14 nicklas 213     
2795 13 Oct 14 nicklas 214     barcode.assignSchemaDefinedBarcodeVariant(schema, barcodeVariant);
2795 13 Oct 14 nicklas 215
2795 13 Oct 14 nicklas 216     WellPainter.barcodeVariant = barcodeVariant;
2795 13 Oct 14 nicklas 217     Plate.paint(Plate.getWells());
2795 13 Oct 14 nicklas 218   }
2795 13 Oct 14 nicklas 219
2795 13 Oct 14 nicklas 220   var currentWell;
2795 13 Oct 14 nicklas 221   var lastSelectedBarcode;
2795 13 Oct 14 nicklas 222   barcode.selectBarcode = function(event)
2795 13 Oct 14 nicklas 223   {
2795 13 Oct 14 nicklas 224     var row = Data.int(event.currentTarget, 'row');
2795 13 Oct 14 nicklas 225     var column = Data.int(event.currentTarget, 'col');
2795 13 Oct 14 nicklas 226
2795 13 Oct 14 nicklas 227     // Locate the barcode selection div so that the current
2795 13 Oct 14 nicklas 228     // barcode is positioned next to the current mouse position
2795 13 Oct 14 nicklas 229     // Initially set it to the right of the mouse so that the
2795 13 Oct 14 nicklas 230     // center is vertically aligned
2795 13 Oct 14 nicklas 231     
2795 13 Oct 14 nicklas 232     currentWell = Plate.getWell(row, column);
2795 13 Oct 14 nicklas 233     var cdna = currentWell.extract;
2795 13 Oct 14 nicklas 234     var scroll = 0;
2795 13 Oct 14 nicklas 235     if (cdna)
2795 13 Oct 14 nicklas 236     {
2795 13 Oct 14 nicklas 237       // Reset 'current' selection
2795 13 Oct 14 nicklas 238       var menu = Doc.element('select-barcode');
2795 13 Oct 14 nicklas 239       var selectAll = Doc.element('select-barcode-all');
2795 13 Oct 14 nicklas 240       for (var i = 0; i <  selectAll.childNodes.length; i++)
2795 13 Oct 14 nicklas 241       {
2795 13 Oct 14 nicklas 242         Doc.removeClass(selectAll.childNodes[i], 'current');
2795 13 Oct 14 nicklas 243       }
2795 13 Oct 14 nicklas 244       menu.style.display = 'block';
2795 13 Oct 14 nicklas 245
2795 13 Oct 14 nicklas 246       var x = event.clientX+1;
2795 13 Oct 14 nicklas 247       var halfHeight = Math.floor(selectAll.offsetHeight/2)
2795 13 Oct 14 nicklas 248       var y = event.clientY-halfHeight;
2795 13 Oct 14 nicklas 249       var scroll = 0;
2795 13 Oct 14 nicklas 250       var barcodeDiv;
2795 13 Oct 14 nicklas 251       
2795 13 Oct 14 nicklas 252       var useBarcode = cdna.barcode || lastSelectedBarcode;
2795 13 Oct 14 nicklas 253       if (useBarcode)
2795 13 Oct 14 nicklas 254       {
2795 13 Oct 14 nicklas 255         var barcodeDiv = Doc.element('bc-'+useBarcode.id);
2795 13 Oct 14 nicklas 256         if (!cdna.barcode && barcodeDiv.nextSibling) barcodeDiv = barcodeDiv.nextSibling;
2795 13 Oct 14 nicklas 257         // Try to scroll the current barcode so that it's baseline is at the center of the div
2795 13 Oct 14 nicklas 258         scroll = barcodeDiv.offsetTop + barcodeDiv.offsetHeight - halfHeight;
2795 13 Oct 14 nicklas 259         if (scroll < 0) 
2795 13 Oct 14 nicklas 260         {
2795 13 Oct 14 nicklas 261           // We get a negative scroll for the first few elements, shift the
2795 13 Oct 14 nicklas 262           // entire selection div down instead
2795 13 Oct 14 nicklas 263           y -= scroll;
2795 13 Oct 14 nicklas 264           scroll = 0;
2795 13 Oct 14 nicklas 265         }
2795 13 Oct 14 nicklas 266         else if (scroll > selectAll.scrollHeight - selectAll.offsetHeight)
2795 13 Oct 14 nicklas 267         {
2795 13 Oct 14 nicklas 268           // We get a too large scroll value for the last few elements, shift
2795 13 Oct 14 nicklas 269           // the entire selection div up instead
2795 13 Oct 14 nicklas 270           y -= scroll - (selectAll.scrollHeight - selectAll.offsetHeight);
2795 13 Oct 14 nicklas 271           scroll = selectAll.scrollHeight - selectAll.offsetHeight;
2795 13 Oct 14 nicklas 272         }
2795 13 Oct 14 nicklas 273         if (cdna.barcode)
2795 13 Oct 14 nicklas 274         {
2795 13 Oct 14 nicklas 275           Doc.addClass(barcodeDiv, 'current');
2795 13 Oct 14 nicklas 276         }
2795 13 Oct 14 nicklas 277       }
2795 13 Oct 14 nicklas 278       
2795 13 Oct 14 nicklas 279       // Default barcode
2795 13 Oct 14 nicklas 280       if (cdna.defaultBarcode && cdna.defaultBarcode != cdna.barcode)
2795 13 Oct 14 nicklas 281       {
2795 13 Oct 14 nicklas 282         var selectDefault = Doc.element('select-barcode-default');
2795 13 Oct 14 nicklas 283         Data.set(selectDefault, 'barcode-name', cdna.defaultBarcode.name);
2795 13 Oct 14 nicklas 284         selectDefault.innerHTML = 'Default: ' + Strings.encodeTags(cdna.defaultBarcode.name);
2795 13 Oct 14 nicklas 285         Doc.show('select-barcode-default');
2795 13 Oct 14 nicklas 286         Doc.show('select-barcode-default-separator');
2795 13 Oct 14 nicklas 287       }
2795 13 Oct 14 nicklas 288       else
2795 13 Oct 14 nicklas 289       {
2795 13 Oct 14 nicklas 290         Doc.hide('select-barcode-default');
2795 13 Oct 14 nicklas 291         Doc.hide('select-barcode-default-separator');
2795 13 Oct 14 nicklas 292       }
2795 13 Oct 14 nicklas 293       
2795 13 Oct 14 nicklas 294       // Position the selection div
2795 13 Oct 14 nicklas 295       selectAll.scrollTop = scroll;
2795 13 Oct 14 nicklas 296       menu.style.left = (x)+'px';
2795 13 Oct 14 nicklas 297       menu.style.top = (y)+'px';
2795 13 Oct 14 nicklas 298       event.stopPropagation();
2795 13 Oct 14 nicklas 299     }
2795 13 Oct 14 nicklas 300   }
2795 13 Oct 14 nicklas 301
2795 13 Oct 14 nicklas 302   barcode.barcodeSelected = function(event)
2795 13 Oct 14 nicklas 303   {
2795 13 Oct 14 nicklas 304     var frm = document.forms['reggie'];
3289 30 Apr 15 nicklas 305     var schema = PoolSchema.getById(frm.pool_schema.value);
2795 13 Oct 14 nicklas 306     var target = event.target;
2795 13 Oct 14 nicklas 307     if (currentWell && currentWell.extract)
2795 13 Oct 14 nicklas 308     {
2795 13 Oct 14 nicklas 309       lastSelectedBarcode = barcodesByName[Data.get(target, 'barcode-name')];
2795 13 Oct 14 nicklas 310       currentWell.extract.barcode = lastSelectedBarcode;
2795 13 Oct 14 nicklas 311       var poolNum = schema.getPoolNumForColumn(currentWell.column);
2795 13 Oct 14 nicklas 312       if (poolNum >= 0) 
2795 13 Oct 14 nicklas 313       {
2795 13 Oct 14 nicklas 314         barcode.checkDuplicateBarcode(poolNum);
2795 13 Oct 14 nicklas 315         Plate.paint(schema.getWellsInPool(Plate, poolNum));
2795 13 Oct 14 nicklas 316       }
2795 13 Oct 14 nicklas 317       else
2795 13 Oct 14 nicklas 318       {
2795 13 Oct 14 nicklas 319         Plate.paint([currentWell]);
2795 13 Oct 14 nicklas 320       }
2795 13 Oct 14 nicklas 321     }
2795 13 Oct 14 nicklas 322   }
2795 13 Oct 14 nicklas 323   
2795 13 Oct 14 nicklas 324   barcode.hideBarcodeSelection = function()
2795 13 Oct 14 nicklas 325   {
2795 13 Oct 14 nicklas 326     Doc.hide('select-barcode');
2795 13 Oct 14 nicklas 327   }
2795 13 Oct 14 nicklas 328   
2795 13 Oct 14 nicklas 329   barcode.checkDuplicateBarcode = function(poolNum)
2795 13 Oct 14 nicklas 330   {
2795 13 Oct 14 nicklas 331     var frm = document.forms['reggie'];
3289 30 Apr 15 nicklas 332     var schema = PoolSchema.getById(frm.pool_schema.value);
2795 13 Oct 14 nicklas 333
2795 13 Oct 14 nicklas 334     var wells = schema.getWellsInPool(Plate, poolNum);
2795 13 Oct 14 nicklas 335     var wellByBarcodeName = [];
2795 13 Oct 14 nicklas 336     for (var i = 0; i < wells.length; i++)
2795 13 Oct 14 nicklas 337     {
2795 13 Oct 14 nicklas 338       var well = wells[i];
2795 13 Oct 14 nicklas 339       var cdna = well.extract;
2795 13 Oct 14 nicklas 340       if (cdna && cdna.barcode)
2795 13 Oct 14 nicklas 341       {
2795 13 Oct 14 nicklas 342         if (wellByBarcodeName[cdna.barcode.name])
2795 13 Oct 14 nicklas 343         {
2795 13 Oct 14 nicklas 344           well.duplicate = true;
2795 13 Oct 14 nicklas 345           wellByBarcodeName[cdna.barcode.name].duplicate = true;
2795 13 Oct 14 nicklas 346         }
2795 13 Oct 14 nicklas 347         else
2795 13 Oct 14 nicklas 348         {
2795 13 Oct 14 nicklas 349           wellByBarcodeName[cdna.barcode.name] = well;
2795 13 Oct 14 nicklas 350           well.duplicate = false;
2795 13 Oct 14 nicklas 351         }
2795 13 Oct 14 nicklas 352       }
2795 13 Oct 14 nicklas 353     }
2795 13 Oct 14 nicklas 354   }
2795 13 Oct 14 nicklas 355
2795 13 Oct 14 nicklas 356   barcode.validateStep2 = function(event)
2795 13 Oct 14 nicklas 357   {
2795 13 Oct 14 nicklas 358     var frm = document.forms['reggie'];
2795 13 Oct 14 nicklas 359
2795 13 Oct 14 nicklas 360     var wells = Plate.getWells();
2795 13 Oct 14 nicklas 361     var numErrors = 0;
2795 13 Oct 14 nicklas 362     var numWarnings = 0;
2795 13 Oct 14 nicklas 363     var numCdna = 0;
2795 13 Oct 14 nicklas 364     for (var i = 0; i < wells.length; i++)
2795 13 Oct 14 nicklas 365     {
2795 13 Oct 14 nicklas 366       var well = wells[i];
2795 13 Oct 14 nicklas 367       if (well.hasWarning())
2795 13 Oct 14 nicklas 368       {
2795 13 Oct 14 nicklas 369         numWarnings++;
2795 13 Oct 14 nicklas 370       }
2795 13 Oct 14 nicklas 371       if (well.hasError())
2795 13 Oct 14 nicklas 372       {
2795 13 Oct 14 nicklas 373         numErrors++;
2795 13 Oct 14 nicklas 374       }
2795 13 Oct 14 nicklas 375       else if (well.extract && well.extract.id)
2795 13 Oct 14 nicklas 376       {
2795 13 Oct 14 nicklas 377         numCdna++;
2795 13 Oct 14 nicklas 378       }
2795 13 Oct 14 nicklas 379     }
2795 13 Oct 14 nicklas 380
2795 13 Oct 14 nicklas 381     if (numErrors > 0)
2795 13 Oct 14 nicklas 382     {
2795 13 Oct 14 nicklas 383       event.preventDefault();
2795 13 Oct 14 nicklas 384       return;
2795 13 Oct 14 nicklas 385     }
2795 13 Oct 14 nicklas 386     else if (numCdna == 0)
2795 13 Oct 14 nicklas 387     {
2795 13 Oct 14 nicklas 388       alert('There is no cDNA in any wells');
2795 13 Oct 14 nicklas 389       event.preventDefault();
2795 13 Oct 14 nicklas 390       return;
2795 13 Oct 14 nicklas 391     }
2795 13 Oct 14 nicklas 392     else if (numWarnings > 0)
2795 13 Oct 14 nicklas 393     {
2795 13 Oct 14 nicklas 394       if (!frm.verifyGoNext || !frm.verifyGoNext.checked)
2795 13 Oct 14 nicklas 395       {
2795 13 Oct 14 nicklas 396         Wizard.showGoNextConfirmation(true, 'There are ' + numWarnings + ' wells with a warning. Continue anyway?');
2795 13 Oct 14 nicklas 397         event.preventDefault();
2795 13 Oct 14 nicklas 398       }
2795 13 Oct 14 nicklas 399     }
2795 13 Oct 14 nicklas 400   }
2795 13 Oct 14 nicklas 401   
2795 13 Oct 14 nicklas 402   barcode.submit = function()
2795 13 Oct 14 nicklas 403   {
2795 13 Oct 14 nicklas 404     var frm = document.forms['reggie'];
2795 13 Oct 14 nicklas 405
2795 13 Oct 14 nicklas 406     var submitInfo = {};
2795 13 Oct 14 nicklas 407     var plateInfo = {};
2795 13 Oct 14 nicklas 408     
2795 13 Oct 14 nicklas 409     submitInfo.bioplate = plateInfo;
2795 13 Oct 14 nicklas 410     plateInfo.id = parseInt(frm.bioplate.value);
2795 13 Oct 14 nicklas 411     plateInfo.poolSchema = frm.pool_schema.value;
2795 13 Oct 14 nicklas 412     plateInfo.barcodeVariant = frm.barcode_variant.value;
2795 13 Oct 14 nicklas 413     plateInfo.comments = frm.comments.value;
2795 13 Oct 14 nicklas 414     plateInfo.wells = [];
2795 13 Oct 14 nicklas 415
2795 13 Oct 14 nicklas 416     var wells = Plate.getWells();
2795 13 Oct 14 nicklas 417     for (var i = 0; i < wells.length; i++)
2795 13 Oct 14 nicklas 418     {
2795 13 Oct 14 nicklas 419       var well = wells[i];
2795 13 Oct 14 nicklas 420       if (well.extract && well.extract.id)
2795 13 Oct 14 nicklas 421       {
2795 13 Oct 14 nicklas 422         var tmp = {};
2795 13 Oct 14 nicklas 423         tmp.row = well.row;
2795 13 Oct 14 nicklas 424         tmp.column = well.column;
2795 13 Oct 14 nicklas 425         tmp.cdna = {};
2795 13 Oct 14 nicklas 426         tmp.cdna.id = well.extract.id;
2795 13 Oct 14 nicklas 427         tmp.cdna.barcode = {};
2795 13 Oct 14 nicklas 428         tmp.cdna.barcode.id = well.extract.barcode.id;
2795 13 Oct 14 nicklas 429         plateInfo.wells[plateInfo.wells.length] = tmp;
2795 13 Oct 14 nicklas 430       }
2795 13 Oct 14 nicklas 431     }
2795 13 Oct 14 nicklas 432
2795 13 Oct 14 nicklas 433     var url = '../LibPrep.servlet?ID='+App.getSessionId();
2795 13 Oct 14 nicklas 434     url += '&cmd=CreateBarcodedLibraries';
2795 13 Oct 14 nicklas 435     Wizard.showLoadingAnimation('Performing registration...');
2795 13 Oct 14 nicklas 436     Wizard.asyncJsonRequest(url, barcode.submissionResults, 'POST', JSON.stringify(submitInfo));
2795 13 Oct 14 nicklas 437   }
2795 13 Oct 14 nicklas 438   
2795 13 Oct 14 nicklas 439   barcode.submissionResults = function(response)
2795 13 Oct 14 nicklas 440   {
2795 13 Oct 14 nicklas 441     Wizard.showFinalMessage(response.messages);
2795 13 Oct 14 nicklas 442     Doc.show('gorestart');
2795 13 Oct 14 nicklas 443   }
2795 13 Oct 14 nicklas 444
2795 13 Oct 14 nicklas 445   return barcode;
2795 13 Oct 14 nicklas 446 }();
2795 13 Oct 14 nicklas 447
2795 13 Oct 14 nicklas 448 Doc.onLoad(Barcode.initPage);
2795 13 Oct 14 nicklas 449
2795 13 Oct 14 nicklas 450 var WellPainter = function()
2795 13 Oct 14 nicklas 451 {
2795 13 Oct 14 nicklas 452   var painter = {};
2795 13 Oct 14 nicklas 453   
2795 13 Oct 14 nicklas 454   painter.getClassNameForWell = function(well, schema)
2795 13 Oct 14 nicklas 455   {
2795 13 Oct 14 nicklas 456     var cls = '';
2795 13 Oct 14 nicklas 457     var indexSet = painter.barcodeVariant ? painter.barcodeVariant.indexSets[well.column] : null;
2795 13 Oct 14 nicklas 458     if (indexSet)
2795 13 Oct 14 nicklas 459     {
2795 13 Oct 14 nicklas 460       cls += indexSet.color;
2795 13 Oct 14 nicklas 461     }
2795 13 Oct 14 nicklas 462     var cdna = well.extract;
2795 13 Oct 14 nicklas 463     if (cdna && cdna.barcode)
2795 13 Oct 14 nicklas 464     {
2795 13 Oct 14 nicklas 465       if (cdna.defaultBarcode && cdna.barcode != cdna.defaultBarcode)
2795 13 Oct 14 nicklas 466       {
2795 13 Oct 14 nicklas 467         cls += ' bg-modified';
2795 13 Oct 14 nicklas 468       }
3760 19 Feb 16 nicklas 469       if (cdna.isYellow)
3760 19 Feb 16 nicklas 470       {
3760 19 Feb 16 nicklas 471         cls += ' yellow-specimen';
3760 19 Feb 16 nicklas 472       }
2795 13 Oct 14 nicklas 473     }
2795 13 Oct 14 nicklas 474     if (well.duplicate)
2795 13 Oct 14 nicklas 475     {
2795 13 Oct 14 nicklas 476       cls += ' duplicate';
2795 13 Oct 14 nicklas 477     }
2795 13 Oct 14 nicklas 478     return cls;
2795 13 Oct 14 nicklas 479   }
2795 13 Oct 14 nicklas 480   
2795 13 Oct 14 nicklas 481   painter.getWellText = function(well, schema)
2795 13 Oct 14 nicklas 482   {
2795 13 Oct 14 nicklas 483     var text = '';
2795 13 Oct 14 nicklas 484     var cdna = well.extract;
2795 13 Oct 14 nicklas 485     if (cdna)
2795 13 Oct 14 nicklas 486     {
2795 13 Oct 14 nicklas 487       var name = cdna.name;
2795 13 Oct 14 nicklas 488       var i = name.indexOf('.m');
3760 19 Feb 16 nicklas 489       text += '<div class="name if-yellow">'+name.substring(0, i)+'.<br>&nbsp;'+name.substring(i)+'</div>';
2795 13 Oct 14 nicklas 490       if (cdna.barcode)
2795 13 Oct 14 nicklas 491       {
2795 13 Oct 14 nicklas 492         text += '<div class="barcode">'+cdna.barcode.name+'</div>';
2795 13 Oct 14 nicklas 493         if (cdna.defaultBarcode && cdna.barcode != cdna.defaultBarcode)
2795 13 Oct 14 nicklas 494         {
2795 13 Oct 14 nicklas 495           text += '<div class="warn-msg">Modified barcode</div>';
2795 13 Oct 14 nicklas 496         }
2795 13 Oct 14 nicklas 497       }
2795 13 Oct 14 nicklas 498       else
2795 13 Oct 14 nicklas 499       {
2795 13 Oct 14 nicklas 500         well.setError('No barcode');
2795 13 Oct 14 nicklas 501       }
2795 13 Oct 14 nicklas 502     }
2795 13 Oct 14 nicklas 503     if (well.duplicate)
2795 13 Oct 14 nicklas 504     {
2795 13 Oct 14 nicklas 505       well.setError('Duplicate barcode');
2795 13 Oct 14 nicklas 506     }
2795 13 Oct 14 nicklas 507     return text;
2795 13 Oct 14 nicklas 508   }
2795 13 Oct 14 nicklas 509
2795 13 Oct 14 nicklas 510   return painter;
2795 13 Oct 14 nicklas 511 }();
2795 13 Oct 14 nicklas 512
2795 13 Oct 14 nicklas 513