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

Code
Comments
Other
Rev Date Author Line
2668 15 Sep 14 nicklas 1 var Protocol = function()
2668 15 Sep 14 nicklas 2 {
2668 15 Sep 14 nicklas 3   var protocol = {};
2702 26 Sep 14 nicklas 4   var debug = 0;
2668 15 Sep 14 nicklas 5   
2668 15 Sep 14 nicklas 6   var LOW_QUANTITY_WARNING_FACTOR = 2;
3832 07 Apr 16 nicklas 7   var DEFAULT_DILUTION_VOLUME = 50; //µl
2668 15 Sep 14 nicklas 8
2668 15 Sep 14 nicklas 9   // Page initialization
2668 15 Sep 14 nicklas 10   protocol.initPage = function()
2668 15 Sep 14 nicklas 11   {
2668 15 Sep 14 nicklas 12     var pageId = Doc.getPageId();
2668 15 Sep 14 nicklas 13     if (pageId == 'protocol')
2668 15 Sep 14 nicklas 14     {
2668 15 Sep 14 nicklas 15       Buttons.addClickHandler('print-button', Wizard.goPrint);  
2668 15 Sep 14 nicklas 16
2668 15 Sep 14 nicklas 17       var mrnaPlateId = Data.int('page-data', 'mrna-plate');
2668 15 Sep 14 nicklas 18
2668 15 Sep 14 nicklas 19       var url = '../MRna.servlet?ID='+App.getSessionId();
2668 15 Sep 14 nicklas 20       url += '&cmd=GetMRnaInfoForPlate&bioplate='+mrnaPlateId;    
2668 15 Sep 14 nicklas 21       Wizard.showLoadingAnimation('Loading mRNA bioplate information...');
2668 15 Sep 14 nicklas 22       Wizard.asyncJsonRequest(url, protocol.initializeProtocol);
2668 15 Sep 14 nicklas 23     }
2668 15 Sep 14 nicklas 24     else
2668 15 Sep 14 nicklas 25     {
2668 15 Sep 14 nicklas 26       Events.addEventHandler('bioplate', 'change', protocol.bioplateOnChange);
2668 15 Sep 14 nicklas 27       Events.addEventHandler('listview', 'click', protocol.viewProtocol);
2668 15 Sep 14 nicklas 28       Events.addEventHandler('plateview', 'click', protocol.viewProtocol);
2842 20 Oct 14 nicklas 29       Events.addEventHandler('stratageneConc', 'keypress', Events.numberOnly);
2668 15 Sep 14 nicklas 30
2668 15 Sep 14 nicklas 31       var url = '../MRna.servlet?ID='+App.getSessionId();
2668 15 Sep 14 nicklas 32       url += '&cmd=GetUnprocessedPlates&plateType=MRNA';
2668 15 Sep 14 nicklas 33       Wizard.showLoadingAnimation('Loading mRNA plates...');
2668 15 Sep 14 nicklas 34       Wizard.asyncJsonRequest(url, protocol.initializeStep1);
2668 15 Sep 14 nicklas 35     }
2668 15 Sep 14 nicklas 36   }
2668 15 Sep 14 nicklas 37
2668 15 Sep 14 nicklas 38
2668 15 Sep 14 nicklas 39   protocol.initializeStep1 = function(response)
2668 15 Sep 14 nicklas 40   {
2668 15 Sep 14 nicklas 41     var frm = document.forms['reggie'];  
2668 15 Sep 14 nicklas 42
2668 15 Sep 14 nicklas 43     var bioplates = response.bioplates;
2668 15 Sep 14 nicklas 44     var plates = frm.bioplate;
2668 15 Sep 14 nicklas 45     if (bioplates.length > 0)
2668 15 Sep 14 nicklas 46     {
2668 15 Sep 14 nicklas 47       for (var i=0; i < bioplates.length; i++)
2668 15 Sep 14 nicklas 48       {
2668 15 Sep 14 nicklas 49         var bioplate = bioplates[i];
2668 15 Sep 14 nicklas 50         var name = bioplate.name;
2906 07 Nov 14 nicklas 51         if (bioplate.AutoProcessing == 'PreNormalizeRNA')
2668 15 Sep 14 nicklas 52         {
2906 07 Nov 14 nicklas 53           name += ' (pre-normalized)';
2906 07 Nov 14 nicklas 54         }
2906 07 Nov 14 nicklas 55         else if (bioplate.DilutionDate)
2906 07 Nov 14 nicklas 56         {
2668 15 Sep 14 nicklas 57           name += ' (diluted ' + Reggie.reformatDate(bioplate.DilutionDate) + ')';
2668 15 Sep 14 nicklas 58         }
2668 15 Sep 14 nicklas 59         var option = new Option(name, bioplate.id);
2668 15 Sep 14 nicklas 60         option.bioplate = bioplate;
2668 15 Sep 14 nicklas 61         plates.options[plates.length] = option;
2668 15 Sep 14 nicklas 62       }
2668 15 Sep 14 nicklas 63       bioplateIsValid = true;
2668 15 Sep 14 nicklas 64       
2668 15 Sep 14 nicklas 65       protocol.bioplateOnChange();
2668 15 Sep 14 nicklas 66       protocol.loadStratageneConc();
2668 15 Sep 14 nicklas 67     }
2668 15 Sep 14 nicklas 68     else
2668 15 Sep 14 nicklas 69     {
2668 15 Sep 14 nicklas 70       Wizard.setFatalError('No mRNA bioplates available for processing.');
2668 15 Sep 14 nicklas 71       return;
2668 15 Sep 14 nicklas 72     }
2668 15 Sep 14 nicklas 73
2668 15 Sep 14 nicklas 74     Doc.show('step-1');
2668 15 Sep 14 nicklas 75     Doc.show('gonext');
2668 15 Sep 14 nicklas 76   }
2668 15 Sep 14 nicklas 77   
2668 15 Sep 14 nicklas 78   
2668 15 Sep 14 nicklas 79   // Add pools to the pools list based on the bioplate selection
2668 15 Sep 14 nicklas 80   protocol.bioplateOnChange = function()
2668 15 Sep 14 nicklas 81   {
2668 15 Sep 14 nicklas 82     var frm = document.forms['reggie'];
2668 15 Sep 14 nicklas 83     var bioplate = frm.bioplate[frm.bioplate.selectedIndex].bioplate;
2668 15 Sep 14 nicklas 84     Doc.element('comments').innerHTML = Strings.encodeTags(bioplate.comments);
2668 15 Sep 14 nicklas 85     frm.poolSchema.value = bioplate.poolSchema;
2668 15 Sep 14 nicklas 86   }
2668 15 Sep 14 nicklas 87   
2668 15 Sep 14 nicklas 88   protocol.saveStratageneConc = function()
2668 15 Sep 14 nicklas 89   {
2668 15 Sep 14 nicklas 90     if (!window.localStorage) return;
2668 15 Sep 14 nicklas 91     
2668 15 Sep 14 nicklas 92     var frm = document.forms['reggie'];  
2668 15 Sep 14 nicklas 93     var stratageneInfo = new Object();
2668 15 Sep 14 nicklas 94     stratageneInfo.conc = frm.stratageneConc.value;
2668 15 Sep 14 nicklas 95     window.localStorage.setItem('reggie.stratagene-info', JSON.stringify(stratageneInfo));
2668 15 Sep 14 nicklas 96   }
2668 15 Sep 14 nicklas 97
2668 15 Sep 14 nicklas 98   protocol.loadStratageneConc = function()
2668 15 Sep 14 nicklas 99   {
2668 15 Sep 14 nicklas 100     if (!window.localStorage) return;
2668 15 Sep 14 nicklas 101     var frm = document.forms['reggie'];  
2668 15 Sep 14 nicklas 102     
2668 15 Sep 14 nicklas 103     var stratageneInfo = JSON.parse(window.localStorage.getItem('reggie.stratagene-info'));
2668 15 Sep 14 nicklas 104     if (stratageneInfo)
2668 15 Sep 14 nicklas 105     {
2668 15 Sep 14 nicklas 106       frm.stratageneConc.value = stratageneInfo.conc;
2668 15 Sep 14 nicklas 107     }
2668 15 Sep 14 nicklas 108   }
2668 15 Sep 14 nicklas 109
2668 15 Sep 14 nicklas 110   protocol.viewProtocol = function(event)
2668 15 Sep 14 nicklas 111   {
2668 15 Sep 14 nicklas 112     protocol.saveStratageneConc();
2668 15 Sep 14 nicklas 113     
2668 15 Sep 14 nicklas 114     var frm = document.forms['reggie'];
2668 15 Sep 14 nicklas 115     if (frm.bioplate && !frm.bioplate.disabled)
2668 15 Sep 14 nicklas 116     {
2668 15 Sep 14 nicklas 117       frm.view.value = Data.get(event.currentTarget, 'protocol-type');
2668 15 Sep 14 nicklas 118       frm.submit();
2668 15 Sep 14 nicklas 119     }
2668 15 Sep 14 nicklas 120   }
2668 15 Sep 14 nicklas 121
2668 15 Sep 14 nicklas 122   
2668 15 Sep 14 nicklas 123   protocol.initializeProtocol = function(response)
2668 15 Sep 14 nicklas 124   {
2668 15 Sep 14 nicklas 125     var plate = response.plate;
2668 15 Sep 14 nicklas 126     if (plate.DilutionDate)
2668 15 Sep 14 nicklas 127     {
2668 15 Sep 14 nicklas 128       Doc.element('dilution-date').innerHTML = Reggie.reformatDate(plate.DilutionDate);
2668 15 Sep 14 nicklas 129       Doc.element('dilution-operator').innerHTML = Strings.encodeTags(plate.DilutionOperator);
2668 15 Sep 14 nicklas 130     }
2668 15 Sep 14 nicklas 131     
2668 15 Sep 14 nicklas 132     var list = response.mrna;
2668 15 Sep 14 nicklas 133     var stratageneConc = Data.float('page-data', 'stratagene-conc');
2668 15 Sep 14 nicklas 134     
2668 15 Sep 14 nicklas 135     // Pre-process the return mRNA items
2906 07 Nov 14 nicklas 136     var allPreNormalized = true;
6727 05 May 22 nicklas 137     var showLabelColumn = false;
2668 15 Sep 14 nicklas 138     for (var i = 0; i < list.length; i++)
2668 15 Sep 14 nicklas 139     {
6727 05 May 22 nicklas 140       var rna = list[i].rna;
6727 05 May 22 nicklas 141       allPreNormalized &= rna.preNormalized;
6727 05 May 22 nicklas 142       if (rna.label) showLabelColumn = true;
2668 15 Sep 14 nicklas 143       protocol.checkAndPreProcessMRna(list[i], stratageneConc);
2668 15 Sep 14 nicklas 144     }
2668 15 Sep 14 nicklas 145     
2668 15 Sep 14 nicklas 146     var view = Data.get('page-data', 'view');
2668 15 Sep 14 nicklas 147     if (view == 'list')
2668 15 Sep 14 nicklas 148     {
2668 15 Sep 14 nicklas 149       protocol.viewAsList(list);
6727 05 May 22 nicklas 150       if (showLabelColumn)
6727 05 May 22 nicklas 151       {
6727 05 May 22 nicklas 152         Doc.removeClass('listview', 'nolabels');
6727 05 May 22 nicklas 153         Doc.show('protocol-footer');
6727 05 May 22 nicklas 154       }
2668 15 Sep 14 nicklas 155     }
2668 15 Sep 14 nicklas 156     else
2668 15 Sep 14 nicklas 157     {
2668 15 Sep 14 nicklas 158       protocol.viewAsPlate(plate, list)
2668 15 Sep 14 nicklas 159     }
2906 07 Nov 14 nicklas 160     if (allPreNormalized)
2906 07 Nov 14 nicklas 161     {
2906 07 Nov 14 nicklas 162       Doc.element('dilution-date').innerHTML = 'PreNormalized';
2906 07 Nov 14 nicklas 163     }
2668 15 Sep 14 nicklas 164   }
2668 15 Sep 14 nicklas 165   
2668 15 Sep 14 nicklas 166   protocol.checkAndPreProcessMRna = function(mrna, stratageneConc)
2668 15 Sep 14 nicklas 167   {
2668 15 Sep 14 nicklas 168     var rna = mrna.rna;
2668 15 Sep 14 nicklas 169     // Set the 'stratagene' flag
2668 15 Sep 14 nicklas 170     rna.stratagene = Reggie.isStratagene(rna.name);
2668 15 Sep 14 nicklas 171     rna.external = Reggie.isExternal(rna.name);
3757 18 Feb 16 nicklas 172     rna.isYellow = rna.specimen && rna.specimen.YellowLabel != null;
3833 08 Apr 16 nicklas 173     if (!mrna.DilutionVolume) mrna.DilutionVolume = DEFAULT_DILUTION_VOLUME;
2668 15 Sep 14 nicklas 174     
3303 04 May 15 nicklas 175     // Set the 'QC' flag 
3303 04 May 15 nicklas 176     rna.qc = mrna.UseForQC;
2668 15 Sep 14 nicklas 177     
2668 15 Sep 14 nicklas 178     if (stratageneConc > 0)
2668 15 Sep 14 nicklas 179     {
6218 20 Apr 21 nicklas 180       if (rna.stratagene && !rna.conc) rna.conc = stratageneConc;
2668 15 Sep 14 nicklas 181     }
2668 15 Sep 14 nicklas 182     
2668 15 Sep 14 nicklas 183     // Calculate volume to use and water to add based on concentration
3303 04 May 15 nicklas 184     var remarks = [];
6218 20 Apr 21 nicklas 185     if (rna.conc && rna.usedQuantity)
2668 15 Sep 14 nicklas 186     {
6218 20 Apr 21 nicklas 187       rna.volume = Math.ceil(10000*rna.usedQuantity/rna.conc) / 10; // µl
3833 08 Apr 16 nicklas 188       
3833 08 Apr 16 nicklas 189       var totalVolume = mrna.DilutionConc ? 1000 * rna.usedQuantity / mrna.DilutionConc : mrna.DilutionVolume;
3833 08 Apr 16 nicklas 190       if (totalVolume < mrna.DilutionVolume) 
2906 07 Nov 14 nicklas 191       {
3833 08 Apr 16 nicklas 192         totalVolume = mrna.DilutionVolume;
2906 07 Nov 14 nicklas 193       }
5740 20 Nov 19 nicklas 194       else if (totalVolume - 0.05 > mrna.DilutionVolume) // Use 0.05 to avoid issues with 50.0000000001 > 50.0
2906 07 Nov 14 nicklas 195       {
3833 08 Apr 16 nicklas 196         remarks[remarks.length] = 'Large mix; Use '+Reggie.formatNumber(mrna.DilutionVolume, 'µl', 1);
2906 07 Nov 14 nicklas 197       }
3833 08 Apr 16 nicklas 198       rna.water = totalVolume-rna.volume;
2668 15 Sep 14 nicklas 199     }
2668 15 Sep 14 nicklas 200     
2668 15 Sep 14 nicklas 201     // check for some issues that may indicate problems
2668 15 Sep 14 nicklas 202     if (rna.qc) remarks[remarks.length] = 'QC';
2668 15 Sep 14 nicklas 203     if (!rna.stratagene && !rna.external)
2668 15 Sep 14 nicklas 204     {
2906 07 Nov 14 nicklas 205       if (!rna.bioWell && !rna.preNormalized)
2668 15 Sep 14 nicklas 206       {
2668 15 Sep 14 nicklas 207         remarks[remarks.length] = 'No location';
2668 15 Sep 14 nicklas 208       }
2668 15 Sep 14 nicklas 209       if (!rna.remainingQuantity)
2668 15 Sep 14 nicklas 210       {
2668 15 Sep 14 nicklas 211         remarks[remarks.length] = 'No quantity';
2668 15 Sep 14 nicklas 212       }
3272 23 Apr 15 nicklas 213       else if (rna.remainingQuantity < rna.usedQuantity)
3272 23 Apr 15 nicklas 214       {
3272 23 Apr 15 nicklas 215         remarks[remarks.length] = 'Not enough RNA';
3272 23 Apr 15 nicklas 216       }
3303 04 May 15 nicklas 217       else if (rna.remainingQuantity < rna.usedQuantity * LOW_QUANTITY_WARNING_FACTOR && !rna.preNormalized)
2668 15 Sep 14 nicklas 218       {
2668 15 Sep 14 nicklas 219         remarks[remarks.length] = 'Low quantity';
2668 15 Sep 14 nicklas 220       }
6218 20 Apr 21 nicklas 221       if (!rna.conc)
2668 15 Sep 14 nicklas 222       {
6218 20 Apr 21 nicklas 223         remarks[remarks.length] = 'No concentration';
2668 15 Sep 14 nicklas 224       }
2668 15 Sep 14 nicklas 225     }
5552 12 Aug 19 nicklas 226     else
2668 15 Sep 14 nicklas 227     {
6218 20 Apr 21 nicklas 228       if (!rna.conc && rna.usedQuantity) 
2668 15 Sep 14 nicklas 229       {
2668 15 Sep 14 nicklas 230         remarks[remarks.length] = 'Use ' + Numbers.formatNumber(rna.usedQuantity, 2) + ' µg RNA';
2668 15 Sep 14 nicklas 231       }
2668 15 Sep 14 nicklas 232     }
2668 15 Sep 14 nicklas 233     if (mrna.comment) remarks[remarks.length] = mrna.comment;
2668 15 Sep 14 nicklas 234     rna.remarks = remarks;
2668 15 Sep 14 nicklas 235   }
2668 15 Sep 14 nicklas 236
2668 15 Sep 14 nicklas 237   protocol.viewAsPlate = function(plate, list)
2668 15 Sep 14 nicklas 238   {
3299 04 May 15 nicklas 239     var schema = PoolSchema.getById(plate.poolSchema);
2668 15 Sep 14 nicklas 240     Plate.init(plate.rows, plate.columns, schema, WellPainter);
2668 15 Sep 14 nicklas 241     
2668 15 Sep 14 nicklas 242     for (var i = 0; i < list.length; i++)
2668 15 Sep 14 nicklas 243     {
2668 15 Sep 14 nicklas 244       var mrna = list[i];
2668 15 Sep 14 nicklas 245       var well = mrna.bioWell;
2668 15 Sep 14 nicklas 246       Plate.getWell(well.row, well.column).setExtract(mrna);
2668 15 Sep 14 nicklas 247     }
2668 15 Sep 14 nicklas 248
2668 15 Sep 14 nicklas 249     Plate.paint(Plate.getWells());
2668 15 Sep 14 nicklas 250     PoolSchema.buildPoolTableRow(schema, plate.columns);
2668 15 Sep 14 nicklas 251     Doc.show('all-protocol');
2668 15 Sep 14 nicklas 252   }
2668 15 Sep 14 nicklas 253
2668 15 Sep 14 nicklas 254   protocol.viewAsList = function(list)
2668 15 Sep 14 nicklas 255   {
3757 18 Feb 16 nicklas 256     var homeUrl = Data.get('page-data', 'home-url');
3757 18 Feb 16 nicklas 257     var yellowImg = '<img src="'+homeUrl+'/images/yellow-label-small.png">';
2668 15 Sep 14 nicklas 258     for (var i = 0; i < list.length; i++)
2668 15 Sep 14 nicklas 259     {
2668 15 Sep 14 nicklas 260       var mrna = list[i];
2668 15 Sep 14 nicklas 261       var rna = mrna.rna;
2668 15 Sep 14 nicklas 262       var idSuffix = mrna.bioWell.column + '.' + mrna.bioWell.row;
2668 15 Sep 14 nicklas 263       var tableRow = Doc.element('row.'+idSuffix);
3757 18 Feb 16 nicklas 264       var img = rna.isYellow ? yellowImg : '';
2668 15 Sep 14 nicklas 265       
2668 15 Sep 14 nicklas 266       Doc.removeClass(tableRow, 'empty');
2668 15 Sep 14 nicklas 267       if (rna.external) Doc.addClass(tableRow, 'external');
2668 15 Sep 14 nicklas 268       if (rna.stratagene) Doc.addClass(tableRow, 'stratagene');
3757 18 Feb 16 nicklas 269       if (rna.isYellow) Doc.addClass(tableRow, 'yellow-specimen');
6727 05 May 22 nicklas 270       var name = rna.name;
6727 05 May 22 nicklas 271       if (rna.external && mrna.externalId)
6727 05 May 22 nicklas 272       {
6727 05 May 22 nicklas 273         name = mrna.externalId;
6727 05 May 22 nicklas 274       }
6727 05 May 22 nicklas 275       Doc.element('rna.'+idSuffix).innerHTML = img+Strings.encodeTags(name);
6728 05 May 22 nicklas 276       Doc.element('label.'+idSuffix).innerHTML = Strings.encodeTags(rna.label);
2906 07 Nov 14 nicklas 277       Doc.element('box.'+idSuffix).innerHTML = Strings.encodeTags(protocol.getPlateCoordinate(rna, true));
6218 20 Apr 21 nicklas 278       Doc.element('conc.'+idSuffix).innerHTML = Numbers.formatNumber(rna.conc, 2);
2668 15 Sep 14 nicklas 279       Doc.element('remain.'+idSuffix).innerHTML = Numbers.formatNumber(rna.remainingQuantity, 2);
2668 15 Sep 14 nicklas 280       Doc.element('volume.'+idSuffix).innerHTML = Numbers.formatNumber(rna.volume, 1);
3833 08 Apr 16 nicklas 281       Doc.element('water.'+idSuffix).innerHTML = rna.water > 0 ? Numbers.formatNumber(rna.water, 1) : '—';
2668 15 Sep 14 nicklas 282       Doc.element('remarks.'+idSuffix).innerHTML = rna.remarks.join('; ');
2668 15 Sep 14 nicklas 283     }
2668 15 Sep 14 nicklas 284     
2668 15 Sep 14 nicklas 285     Doc.show('all-protocol');
2668 15 Sep 14 nicklas 286   }
2668 15 Sep 14 nicklas 287   
2668 15 Sep 14 nicklas 288   
2906 07 Nov 14 nicklas 289   protocol.getPlateCoordinate = function(rna, includePlateName)
2668 15 Sep 14 nicklas 290   {
2668 15 Sep 14 nicklas 291     var c = '';
2907 07 Nov 14 nicklas 292     if (rna.bioWell)
2668 15 Sep 14 nicklas 293     {
2907 07 Nov 14 nicklas 294       if (includePlateName) c += rna.bioWell.bioPlate.name;
2907 07 Nov 14 nicklas 295       c += ' ' + Reggie.wellToAlpha(rna.bioWell.row) + (rna.bioWell.column+1);
2668 15 Sep 14 nicklas 296     }
2906 07 Nov 14 nicklas 297     else if (rna.preNormalized)
2906 07 Nov 14 nicklas 298     {
2907 07 Nov 14 nicklas 299       c = 'PreNorm.';
2906 07 Nov 14 nicklas 300     }
2668 15 Sep 14 nicklas 301     else
2668 15 Sep 14 nicklas 302     {
2906 07 Nov 14 nicklas 303       c = ' ';
2668 15 Sep 14 nicklas 304     }
2668 15 Sep 14 nicklas 305     return c;
2668 15 Sep 14 nicklas 306   }
2668 15 Sep 14 nicklas 307
2668 15 Sep 14 nicklas 308     
2668 15 Sep 14 nicklas 309   return protocol;
2668 15 Sep 14 nicklas 310 }();
2668 15 Sep 14 nicklas 311
2668 15 Sep 14 nicklas 312 Doc.onLoad(Protocol.initPage);
2668 15 Sep 14 nicklas 313
2668 15 Sep 14 nicklas 314
2668 15 Sep 14 nicklas 315 var WellPainter = function()
2668 15 Sep 14 nicklas 316 {
2668 15 Sep 14 nicklas 317   var painter = {};
2668 15 Sep 14 nicklas 318   
2668 15 Sep 14 nicklas 319   painter.getClassNameForWell = function(well)
2668 15 Sep 14 nicklas 320   {
2668 15 Sep 14 nicklas 321     var cls = '';
2668 15 Sep 14 nicklas 322     var mrna = well.extract;
2668 15 Sep 14 nicklas 323     if (mrna)
2668 15 Sep 14 nicklas 324     {
2668 15 Sep 14 nicklas 325       var rna = mrna.rna;
2668 15 Sep 14 nicklas 326       if (rna.qc) cls += ' qc';
2668 15 Sep 14 nicklas 327       if (rna.external) cls += ' external';
2668 15 Sep 14 nicklas 328       if (rna.stratagene) cls += ' stratagene';
3757 18 Feb 16 nicklas 329       if (rna.isYellow) cls += ' yellow-specimen';
2668 15 Sep 14 nicklas 330     }
2668 15 Sep 14 nicklas 331     return cls;
2668 15 Sep 14 nicklas 332   }
2668 15 Sep 14 nicklas 333   
2668 15 Sep 14 nicklas 334   painter.getWellText = function(well)
2668 15 Sep 14 nicklas 335   {
2668 15 Sep 14 nicklas 336     var text = '';
2668 15 Sep 14 nicklas 337     var mrna = well.extract;
2668 15 Sep 14 nicklas 338     if (mrna)
2668 15 Sep 14 nicklas 339     {
2668 15 Sep 14 nicklas 340       var rna = mrna.rna;
6727 05 May 22 nicklas 341       var name = rna.name;
6727 05 May 22 nicklas 342       if (rna.label) 
6727 05 May 22 nicklas 343       {
6727 05 May 22 nicklas 344         name = rna.label;
6727 05 May 22 nicklas 345       }
6727 05 May 22 nicklas 346       else if (rna.external && mrna.externalId)
6727 05 May 22 nicklas 347       {
6727 05 May 22 nicklas 348         name = mrna.externalId;
6727 05 May 22 nicklas 349       }
6727 05 May 22 nicklas 350       text += '<div class="rna if-yellow">'+Strings.encodeTags(name)+'</div>';
2906 07 Nov 14 nicklas 351       text += '<div class="box">'+Strings.encodeTags(Protocol.getPlateCoordinate(rna, true))+'</div>';
2668 15 Sep 14 nicklas 352       text += '<div class="remain">'+Numbers.formatNumber(rna.remainingQuantity, 2, 'µg')+'</div>';
6218 20 Apr 21 nicklas 353       text += '<div class="conc">'+Numbers.formatNumber(rna.conc, 2, 'ng/µl') + '</div>';
2668 15 Sep 14 nicklas 354
2668 15 Sep 14 nicklas 355       if (rna.volume >= 0 && rna.water >= 0)
2668 15 Sep 14 nicklas 356       {
2668 15 Sep 14 nicklas 357         text += '<div><span class="volume">'+Numbers.formatNumber(rna.volume, 1)+'µl</span>';
3833 08 Apr 16 nicklas 358         text += '<span class="water">'+(rna.water > 0 ? Numbers.formatNumber(rna.water, 1)+'µl' : '—')+'</span></div>';
2668 15 Sep 14 nicklas 359       }
2668 15 Sep 14 nicklas 360       text += '<div class="remarks">'+ rna.remarks.join('; ') + '</div>';
2668 15 Sep 14 nicklas 361     }
2668 15 Sep 14 nicklas 362     return text;
2668 15 Sep 14 nicklas 363   }
2668 15 Sep 14 nicklas 364
2668 15 Sep 14 nicklas 365   return painter;
2668 15 Sep 14 nicklas 366 }();
2668 15 Sep 14 nicklas 367