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

Code
Comments
Other
Rev Date Author Line
5424 13 May 19 nicklas 1 var Protocol = function()
5424 13 May 19 nicklas 2 {
5424 13 May 19 nicklas 3   var protocol = {};
5424 13 May 19 nicklas 4   var debug = 0;
5424 13 May 19 nicklas 5   
5424 13 May 19 nicklas 6   // Page initialization
5424 13 May 19 nicklas 7   protocol.initPage = function()
5424 13 May 19 nicklas 8   {
5424 13 May 19 nicklas 9     var pageId = Doc.getPageId();
5424 13 May 19 nicklas 10     if (pageId == 'protocol')
5424 13 May 19 nicklas 11     {
5424 13 May 19 nicklas 12       Buttons.addClickHandler('print-button', Wizard.goPrint);  
5424 13 May 19 nicklas 13
5424 13 May 19 nicklas 14       var mipsPlateId = Data.int('page-data', 'mips-plate');
5424 13 May 19 nicklas 15
5424 13 May 19 nicklas 16       var url = '../Mips.servlet?ID='+App.getSessionId();
5424 13 May 19 nicklas 17       url += '&cmd=GetLibraryInfoForPlate&bioplate='+mipsPlateId;    
5424 13 May 19 nicklas 18       Wizard.showLoadingAnimation('Loading MIPs plate information...');
5424 13 May 19 nicklas 19       Wizard.asyncJsonRequest(url, protocol.initializeProtocol);
5424 13 May 19 nicklas 20     }
5424 13 May 19 nicklas 21     else
5424 13 May 19 nicklas 22     {
5424 13 May 19 nicklas 23       Events.addEventHandler('bioplate', 'change', protocol.bioplateOnChange);
5424 13 May 19 nicklas 24       Events.addEventHandler('listview', 'click', protocol.viewProtocol);
5424 13 May 19 nicklas 25       Events.addEventHandler('plateview', 'click', protocol.viewProtocol);
5424 13 May 19 nicklas 26
5424 13 May 19 nicklas 27       var url = '../Mips.servlet?ID='+App.getSessionId();
5424 13 May 19 nicklas 28       url += '&cmd=GetUnprocessedPlates&plateType=MIPS';
5424 13 May 19 nicklas 29       Wizard.showLoadingAnimation('Loading MIPs plates...');
5424 13 May 19 nicklas 30       Wizard.asyncJsonRequest(url, protocol.initializeStep1);
5424 13 May 19 nicklas 31     }
5424 13 May 19 nicklas 32   }
5424 13 May 19 nicklas 33
5424 13 May 19 nicklas 34
5424 13 May 19 nicklas 35   protocol.initializeStep1 = function(response)
5424 13 May 19 nicklas 36   {
5424 13 May 19 nicklas 37     var frm = document.forms['reggie'];  
5424 13 May 19 nicklas 38
5424 13 May 19 nicklas 39     var bioplates = response.bioplates;
5424 13 May 19 nicklas 40     var plates = frm.bioplate;
5424 13 May 19 nicklas 41     if (bioplates.length > 0)
5424 13 May 19 nicklas 42     {
5424 13 May 19 nicklas 43       for (var i=0; i < bioplates.length; i++)
5424 13 May 19 nicklas 44       {
5424 13 May 19 nicklas 45         var bioplate = bioplates[i];
5424 13 May 19 nicklas 46         var name = bioplate.name;
5424 13 May 19 nicklas 47         var option = new Option(name, bioplate.id);
5424 13 May 19 nicklas 48         option.bioplate = bioplate;
5424 13 May 19 nicklas 49         plates.options[plates.length] = option;
5424 13 May 19 nicklas 50       }
5424 13 May 19 nicklas 51       bioplateIsValid = true;
5424 13 May 19 nicklas 52       protocol.bioplateOnChange();
5424 13 May 19 nicklas 53     }
5424 13 May 19 nicklas 54     else
5424 13 May 19 nicklas 55     {
5424 13 May 19 nicklas 56       Wizard.setFatalError('No MIPs plates available for processing.');
5424 13 May 19 nicklas 57       return;
5424 13 May 19 nicklas 58     }
5424 13 May 19 nicklas 59
5424 13 May 19 nicklas 60     Doc.show('step-1');
5424 13 May 19 nicklas 61     Doc.show('gonext');
5424 13 May 19 nicklas 62   }
5424 13 May 19 nicklas 63   
5424 13 May 19 nicklas 64   
5424 13 May 19 nicklas 65   // Add pools to the pools list based on the bioplate selection
5424 13 May 19 nicklas 66   protocol.bioplateOnChange = function()
5424 13 May 19 nicklas 67   {
5424 13 May 19 nicklas 68     var frm = document.forms['reggie'];
5424 13 May 19 nicklas 69     var bioplate = frm.bioplate[frm.bioplate.selectedIndex].bioplate;
5424 13 May 19 nicklas 70     Doc.element('comments').innerHTML = Strings.encodeTags(bioplate.comments);
5424 13 May 19 nicklas 71   }
5424 13 May 19 nicklas 72   
5424 13 May 19 nicklas 73   protocol.viewProtocol = function(event)
5424 13 May 19 nicklas 74   {
5424 13 May 19 nicklas 75     var frm = document.forms['reggie'];
5424 13 May 19 nicklas 76     if (frm.bioplate && !frm.bioplate.disabled)
5424 13 May 19 nicklas 77     {
5424 13 May 19 nicklas 78       frm.view.value = Data.get(event.currentTarget, 'protocol-type');
5424 13 May 19 nicklas 79       frm.submit();
5424 13 May 19 nicklas 80     }
5424 13 May 19 nicklas 81   }
5424 13 May 19 nicklas 82   
5424 13 May 19 nicklas 83   protocol.initializeProtocol = function(response)
5424 13 May 19 nicklas 84   {
5424 13 May 19 nicklas 85     var plate = response.plate;
5424 13 May 19 nicklas 86     var list = response.libraries;
5424 13 May 19 nicklas 87     
5451 27 May 19 nicklas 88     protocol.preProcessPlate(plate, list);
5424 13 May 19 nicklas 89     var view = Data.get('page-data', 'view');
5424 13 May 19 nicklas 90     if (view == 'list')
5424 13 May 19 nicklas 91     {
5424 13 May 19 nicklas 92       protocol.viewAsList(list);
5424 13 May 19 nicklas 93     }
5424 13 May 19 nicklas 94     else
5424 13 May 19 nicklas 95     {
5424 13 May 19 nicklas 96       protocol.viewAsPlate(plate, list)
5424 13 May 19 nicklas 97     }
5424 13 May 19 nicklas 98   }
5424 13 May 19 nicklas 99   
5451 27 May 19 nicklas 100   // We need to make column-wize checks on the data
5604 13 Sep 19 nicklas 101   // For example a single MIPS_Panel is expected per column otherwise we must show a warning
5451 27 May 19 nicklas 102   protocol.preProcessPlate = function(plate, list)
5424 13 May 19 nicklas 103   {
5451 27 May 19 nicklas 104     Plate.init(plate.rows, plate.columns, WellPainter);
5451 27 May 19 nicklas 105     // Place all libraries on the plate and initialize some information
5451 27 May 19 nicklas 106     for (var i = 0; i < list.length; i++)
5451 27 May 19 nicklas 107     {
5451 27 May 19 nicklas 108       var lib = list[i];
5451 27 May 19 nicklas 109       var well = lib.bioWell;
5451 27 May 19 nicklas 110       var dna = lib.dna;
5451 27 May 19 nicklas 111       dna.remarks = [];
5451 27 May 19 nicklas 112       dna.warnings = [];
5451 27 May 19 nicklas 113       if (lib.comment) dna.remarks[dna.remarks.length] = lib.comment;
5451 27 May 19 nicklas 114       Plate.getWell(well.row, well.column).setExtract(lib);
5451 27 May 19 nicklas 115     }
5424 13 May 19 nicklas 116     
5604 13 Sep 19 nicklas 117     // Analyze columns on the MIPs plate with resepect to MIPS_Panel and PoolVolume
5451 27 May 19 nicklas 118     COLUMN_DATA = new Array(plate.columns);
5451 27 May 19 nicklas 119     for (var colNo = 0; colNo < plate.columns; colNo++)
5451 27 May 19 nicklas 120     {
5451 27 May 19 nicklas 121       var col = {};
5451 27 May 19 nicklas 122       COLUMN_DATA[colNo] = col;
5451 27 May 19 nicklas 123       col.numAliquots = 0;
5604 13 Sep 19 nicklas 124       col.panelCounter = new ItemCounter();
5451 27 May 19 nicklas 125       col.poolVolumeCounter = new ItemCounter();
5451 27 May 19 nicklas 126       for (var rowNo = 0; rowNo < Plate.rows; rowNo++)
5451 27 May 19 nicklas 127       {
5451 27 May 19 nicklas 128         var well = Plate.getWell(rowNo, colNo);
5451 27 May 19 nicklas 129         if (well.extract)
5451 27 May 19 nicklas 130         {
5451 27 May 19 nicklas 131           var aliquot = well.extract.dna;
5451 27 May 19 nicklas 132           col.numAliquots++;
5604 13 Sep 19 nicklas 133           col.panelCounter.count(aliquot.MIPS_Panel);
5451 27 May 19 nicklas 134           col.poolVolumeCounter.count(aliquot.MIPS_PoolVolume);
5451 27 May 19 nicklas 135           if (!col.plate && aliquot.bioWell)
5451 27 May 19 nicklas 136           {
5451 27 May 19 nicklas 137             col.plate = aliquot.bioWell.bioPlate.name;
5451 27 May 19 nicklas 138           }
5451 27 May 19 nicklas 139         }
5451 27 May 19 nicklas 140       }
5604 13 Sep 19 nicklas 141       col.MIPS_Panel = col.panelCounter.maxKey;
5604 13 Sep 19 nicklas 142       col.isMissingMIPSPanel = col.panelCounter.numCounted != col.numAliquots;
5604 13 Sep 19 nicklas 143       col.hasMultipleMIPSPanels = col.panelCounter.numKeys() > 1;
5451 27 May 19 nicklas 144       col.MIPS_PoolVolume = col.poolVolumeCounter.maxKey;
5451 27 May 19 nicklas 145       col.hasMultiplePoolVolumes = col.poolVolumeCounter.numKeys() > 1;
5451 27 May 19 nicklas 146     }
5424 13 May 19 nicklas 147     
5451 27 May 19 nicklas 148     // Finally, check library data against column data and generate warnings
5451 27 May 19 nicklas 149     for (var i = 0; i < list.length; i++)
5424 13 May 19 nicklas 150     {
5451 27 May 19 nicklas 151       var lib = list[i];
5451 27 May 19 nicklas 152       var well = lib.bioWell;
5451 27 May 19 nicklas 153       var dna = lib.dna;
5451 27 May 19 nicklas 154       
5451 27 May 19 nicklas 155       if (dna.MIPS_PoolVolume != null)
5451 27 May 19 nicklas 156       {
5451 27 May 19 nicklas 157         if (dna.MIPS_PoolVolume != COLUMN_DATA[well.column].MIPS_PoolVolume)
5451 27 May 19 nicklas 158         {
5461 03 Jun 19 nicklas 159           dna.warnings[dna.warnings.length] = 'PoolVolume!';
5451 27 May 19 nicklas 160         }
5451 27 May 19 nicklas 161       }
5424 13 May 19 nicklas 162     }
5451 27 May 19 nicklas 163   }
5451 27 May 19 nicklas 164   
5451 27 May 19 nicklas 165   protocol.viewAsPlate = function()
5451 27 May 19 nicklas 166   {
5451 27 May 19 nicklas 167     protocol.buildPoolRow();
5451 27 May 19 nicklas 168     protocol.buildPlateRow();
5451 27 May 19 nicklas 169     Plate.paint(Plate.getWells());
5451 27 May 19 nicklas 170     Doc.show('all-protocol');
5451 27 May 19 nicklas 171   }
5451 27 May 19 nicklas 172   
5451 27 May 19 nicklas 173   protocol.buildPoolRow = function()
5451 27 May 19 nicklas 174   {
5451 27 May 19 nicklas 175     var html = '<th></th>';
5604 13 Sep 19 nicklas 176     var pools = [];  // A 'pool' is a number of columns with the same MIPS_Panel
5451 27 May 19 nicklas 177     var currentPool = {};
5451 27 May 19 nicklas 178
5451 27 May 19 nicklas 179     var poolNum = -1;
5451 27 May 19 nicklas 180     for (var colNo = 0; colNo < COLUMN_DATA.length; colNo++)
5424 13 May 19 nicklas 181     {
5451 27 May 19 nicklas 182       var col = COLUMN_DATA[colNo];
5604 13 Sep 19 nicklas 183       if ((col.MIPS_Panel != currentPool.name) || (col.numAliquots == 0 && currentPool.numAliquots != 0))
5424 13 May 19 nicklas 184       {
5604 13 Sep 19 nicklas 185         // The column has a different MIPS_Panel than the previous one so we create a new pool
5451 27 May 19 nicklas 186         currentPool = {};
5604 13 Sep 19 nicklas 187         currentPool.name = col.MIPS_Panel;
5451 27 May 19 nicklas 188         currentPool.startCol = colNo;
5451 27 May 19 nicklas 189         currentPool.columnSpan = 1;
5604 13 Sep 19 nicklas 190         currentPool.hasMultipleMIPSPanels = col.hasMultipleMIPSPanels;
5451 27 May 19 nicklas 191         currentPool.hasMultiplePoolVolumes = col.hasMultiplePoolVolumes;
5604 13 Sep 19 nicklas 192         currentPool.isMissingMIPSPanel = col.isMissingMIPSPanel;
5451 27 May 19 nicklas 193         currentPool.numAliquots = col.numAliquots;
5451 27 May 19 nicklas 194         pools[pools.length] = currentPool;
5451 27 May 19 nicklas 195         poolNum++;
5424 13 May 19 nicklas 196       }
5451 27 May 19 nicklas 197       else if (currentPool)
5424 13 May 19 nicklas 198       {
5604 13 Sep 19 nicklas 199         // The column has the same MIPS_Panel as the previous one, we make the pool span across multiple columns
5451 27 May 19 nicklas 200         currentPool.columnSpan++;
5451 27 May 19 nicklas 201         currentPool.numAliquots += col.numAliquots;
5604 13 Sep 19 nicklas 202         if (col.isMissingMIPSPanel) currentPool.isMissingMIPSPanel = true;
5604 13 Sep 19 nicklas 203         if (col.hasMultipleMIPSPanels) currentPool.hasMultipleMIPSPanels = true;
5451 27 May 19 nicklas 204         if (col.hasMultiplePoolVolumes) currentPool.hasMultiplePoolVolumes = true;
5424 13 May 19 nicklas 205       }
5451 27 May 19 nicklas 206     }
5451 27 May 19 nicklas 207     
5451 27 May 19 nicklas 208     colNo = 0;
5451 27 May 19 nicklas 209     for (var poolNo = 0; poolNo < pools.length; poolNo++)
5451 27 May 19 nicklas 210     {
5451 27 May 19 nicklas 211       var pool = pools[poolNo];
5451 27 May 19 nicklas 212       var poolClass = 'pool link';
5451 27 May 19 nicklas 213       var poolText = null;
5451 27 May 19 nicklas 214       
5451 27 May 19 nicklas 215       if (pool.columnSpan == 1)
5424 13 May 19 nicklas 216       {
5451 27 May 19 nicklas 217         COLUMN_DATA[colNo].poolClass = 'pool-left pool-right';
5424 13 May 19 nicklas 218       }
5451 27 May 19 nicklas 219       else
5424 13 May 19 nicklas 220       {
5451 27 May 19 nicklas 221         COLUMN_DATA[colNo].poolClass = 'pool-left';
5451 27 May 19 nicklas 222         for (var i = 1; i < pool.columnSpan-1; i++)
5451 27 May 19 nicklas 223         {
5451 27 May 19 nicklas 224           COLUMN_DATA[colNo+i].poolClass = 'pool-middle';
5451 27 May 19 nicklas 225         }
5451 27 May 19 nicklas 226         COLUMN_DATA[colNo+pool.columnSpan-1].poolClass = 'pool-right';
5424 13 May 19 nicklas 227       }
5451 27 May 19 nicklas 228
5451 27 May 19 nicklas 229       if (pool.numAliquots > 0)
5424 13 May 19 nicklas 230       {
5604 13 Sep 19 nicklas 231         if (pool.hasMultiplePoolVolumes || pool.isMissingMIPSPanel) 
5451 27 May 19 nicklas 232         {
5451 27 May 19 nicklas 233           poolClass += ' pool-warning';
5604 13 Sep 19 nicklas 234           if (pool.isMissingMIPSPanel)
5451 27 May 19 nicklas 235           {
5604 13 Sep 19 nicklas 236             poolText = 'Some aliquots have no MIPS_Panel!';
5451 27 May 19 nicklas 237           }
5521 20 Jun 19 nicklas 238           else if (pool.hasMultiplePoolVolumes)
5451 27 May 19 nicklas 239           {
5521 20 Jun 19 nicklas 240             poolText = 'Some aliquots have a different pool volume!';
5451 27 May 19 nicklas 241           }
5451 27 May 19 nicklas 242         }
5521 20 Jun 19 nicklas 243         if (pool.name) poolClass += ' ' + MipsColor.getColor(pool.name);
5451 27 May 19 nicklas 244         html += '<th id="pool.' + poolNo + '" colspan="'+pool.columnSpan+'"';
5451 27 May 19 nicklas 245         html += ' class="'+poolClass+'"';
5451 27 May 19 nicklas 246         html += ' data-start-col="'+pool.startCol+'"';
5451 27 May 19 nicklas 247         html += ' data-end-col="'+(pool.startCol+pool.columnSpan-1)+'"';
5451 27 May 19 nicklas 248         if (poolText) html += ' title="'+poolText+'"';
5604 13 Sep 19 nicklas 249         html += '>'+Strings.encodeTags(pool.name || 'No MIPS_Panel')+'</th>';
5424 13 May 19 nicklas 250       }
5451 27 May 19 nicklas 251       else
5451 27 May 19 nicklas 252       {
5451 27 May 19 nicklas 253         poolClass = '';
5451 27 May 19 nicklas 254         if (colNo > 0) poolClass += ' nopool-after-pool';
5451 27 May 19 nicklas 255         if (colNo + pool.columnSpan < 12) poolClass += ' nopool-before-pool';
5451 27 May 19 nicklas 256         html += '<th colspan="'+pool.columnSpan+'"';
5451 27 May 19 nicklas 257         html += ' class="'+poolClass+'"';
5451 27 May 19 nicklas 258         html += '></th>';
5451 27 May 19 nicklas 259       }
5451 27 May 19 nicklas 260       colNo += pool.columnSpan;
5424 13 May 19 nicklas 261     }
5424 13 May 19 nicklas 262     
5451 27 May 19 nicklas 263     var row = Doc.element('pool-row');
5451 27 May 19 nicklas 264     row.innerHTML = html;
5451 27 May 19 nicklas 265     Doc.show(row);
5424 13 May 19 nicklas 266   }
5440 20 May 19 nicklas 267   
5451 27 May 19 nicklas 268   protocol.buildPlateRow = function()
5440 20 May 19 nicklas 269   {
5440 20 May 19 nicklas 270     var html = '<th></th>';
5451 27 May 19 nicklas 271     var poolClass = 'group link';
5451 27 May 19 nicklas 272     var totalSpan = 0;
5451 27 May 19 nicklas 273     var colNo = 0;
5440 20 May 19 nicklas 274     
5440 20 May 19 nicklas 275     var plates = [];
5451 27 May 19 nicklas 276     var currentPlate = {};
5451 27 May 19 nicklas 277     for (var colNo = 0; colNo < COLUMN_DATA.length; colNo++)
5440 20 May 19 nicklas 278     {
5451 27 May 19 nicklas 279       var col = COLUMN_DATA[colNo];
5451 27 May 19 nicklas 280       if ((col.plate != currentPlate.name))
5440 20 May 19 nicklas 281       {
5451 27 May 19 nicklas 282         // The column has a different aliquot plate than the previous one so we create a new pool
5451 27 May 19 nicklas 283         currentPlate = {};
5451 27 May 19 nicklas 284         currentPlate.name = col.plate;
5451 27 May 19 nicklas 285         currentPlate.startCol = colNo;
5451 27 May 19 nicklas 286         currentPlate.columnSpan = 1;
5451 27 May 19 nicklas 287         plates[plates.length] = currentPlate;
5440 20 May 19 nicklas 288       }
5440 20 May 19 nicklas 289       else if (currentPlate)
5440 20 May 19 nicklas 290       {
5451 27 May 19 nicklas 291         // The column has the same aliquot plate as the previous one, we make the pool span across multiple columns
5440 20 May 19 nicklas 292         currentPlate.columnSpan++;
5440 20 May 19 nicklas 293       }
5440 20 May 19 nicklas 294     }
5451 27 May 19 nicklas 295
5440 20 May 19 nicklas 296     for (var plateNo = 0; plateNo < plates.length; plateNo++)
5440 20 May 19 nicklas 297     {
5440 20 May 19 nicklas 298       var plate = plates[plateNo];
5440 20 May 19 nicklas 299       if (plate.columnSpan == 1)
5440 20 May 19 nicklas 300       {
5451 27 May 19 nicklas 301         COLUMN_DATA[plate.startCol].groupClass = 'group-left group-right';
5440 20 May 19 nicklas 302       }
5440 20 May 19 nicklas 303       else
5440 20 May 19 nicklas 304       {
5451 27 May 19 nicklas 305         COLUMN_DATA[plate.startCol].groupClass = 'group-left';
5440 20 May 19 nicklas 306         for (var i = 1; i < plate.columnSpan-1; i++)
5440 20 May 19 nicklas 307         {
5451 27 May 19 nicklas 308           COLUMN_DATA[plate.startCol+i].groupClass = 'group-middle';
5440 20 May 19 nicklas 309         }
5451 27 May 19 nicklas 310         COLUMN_DATA[plate.startCol+plate.columnSpan-1].groupClass = 'group-right';
5440 20 May 19 nicklas 311       }
5440 20 May 19 nicklas 312       
5451 27 May 19 nicklas 313       if (plate.name)
5451 27 May 19 nicklas 314       {
5451 27 May 19 nicklas 315         totalSpan += plate.columnSpan;
5451 27 May 19 nicklas 316         html += '<th id="group.' + plateNo + '" colspan="'+plate.columnSpan+'"';
5451 27 May 19 nicklas 317         html += ' class="'+poolClass+'"';
5451 27 May 19 nicklas 318         html += ' data-start-col="' + plate.startCol + '"';
5451 27 May 19 nicklas 319         html += ' data-end-col="' + (plate.startCol+plate.columnSpan-1) + '"';
5451 27 May 19 nicklas 320         html += '>'+Strings.encodeTags(plate.name)+'</th>';
5451 27 May 19 nicklas 321       }
5451 27 May 19 nicklas 322       else
5451 27 May 19 nicklas 323       {
5451 27 May 19 nicklas 324         totalSpan += plate.columnSpan;
5451 27 May 19 nicklas 325         html += '<th class="nopool-after-pool" colspan="'+plate.columnSpan+'"></th>';
5451 27 May 19 nicklas 326       }
5440 20 May 19 nicklas 327     }
5451 27 May 19 nicklas 328     var row = document.getElementById('plate-row');
5440 20 May 19 nicklas 329     row.innerHTML = html;
5451 27 May 19 nicklas 330     Doc.show(row);
5440 20 May 19 nicklas 331   }
5451 27 May 19 nicklas 332
5440 20 May 19 nicklas 333   
5424 13 May 19 nicklas 334   protocol.viewAsList = function(list)
5424 13 May 19 nicklas 335   {
5424 13 May 19 nicklas 336     var homeUrl = Data.get('page-data', 'home-url');
5424 13 May 19 nicklas 337     var yellowImg = '<img src="'+homeUrl+'/images/yellow-label-small.png">';
5424 13 May 19 nicklas 338     for (var i = 0; i < list.length; i++)
5424 13 May 19 nicklas 339     {
5424 13 May 19 nicklas 340       var lib = list[i];
5424 13 May 19 nicklas 341       var dna = lib.dna;
5424 13 May 19 nicklas 342       var idSuffix = lib.bioWell.column + '.' + lib.bioWell.row;
5424 13 May 19 nicklas 343       var tableRow = Doc.element('row.'+idSuffix);
5424 13 May 19 nicklas 344       
5424 13 May 19 nicklas 345       Doc.removeClass(tableRow, 'empty');
5424 13 May 19 nicklas 346       Doc.element('dna.'+idSuffix).innerHTML = Strings.encodeTags(dna.name);
5424 13 May 19 nicklas 347       
5424 13 May 19 nicklas 348       Doc.element('box.'+idSuffix).innerHTML = Strings.encodeTags(protocol.getPlateCoordinate(dna, true));
5604 13 Sep 19 nicklas 349       Doc.element('panel.'+idSuffix).innerHTML = Strings.encodeTags(dna.MIPS_Panel);
5604 13 Sep 19 nicklas 350       Doc.addClass('panel.'+idSuffix, MipsColor.getColor(dna.MIPS_Panel));
5451 27 May 19 nicklas 351       
5451 27 May 19 nicklas 352       var form = '';
5451 27 May 19 nicklas 353       if (dna.MIPS_NormalTumor != null) form += '<span>'+Strings.encodeTags(dna.MIPS_NormalTumor)+'</span>';
5451 27 May 19 nicklas 354       if (dna.MIPS_Form != null) form += '<span>'+Strings.encodeTags(dna.MIPS_Form)+'</span>';
5451 27 May 19 nicklas 355       Doc.element('form.'+idSuffix).innerHTML = form;
5461 03 Jun 19 nicklas 356       Doc.element('volume.'+idSuffix).innerHTML = Numbers.formatNumber(dna.MIPS_PoolVolume, 0, 'µl');
5451 27 May 19 nicklas 357       var remarks = dna.remarks.join('; ');
5451 27 May 19 nicklas 358       if (dna.warnings.length > 0)
5451 27 May 19 nicklas 359       {
5451 27 May 19 nicklas 360         remarks += '<span class="warning">'+dna.warnings.join('; ')+'</span>';
5451 27 May 19 nicklas 361       }
5451 27 May 19 nicklas 362       Doc.element('remarks.'+idSuffix).innerHTML = remarks;
5424 13 May 19 nicklas 363     }
5424 13 May 19 nicklas 364     
5424 13 May 19 nicklas 365     Doc.show('all-protocol');
5424 13 May 19 nicklas 366   }
5424 13 May 19 nicklas 367   
5424 13 May 19 nicklas 368   
5424 13 May 19 nicklas 369   protocol.getPlateCoordinate = function(dna, includePlateName)
5424 13 May 19 nicklas 370   {
5424 13 May 19 nicklas 371     var c = '';
5424 13 May 19 nicklas 372     if (dna.bioWell)
5424 13 May 19 nicklas 373     {
5451 27 May 19 nicklas 374       if (includePlateName) c += dna.bioWell.bioPlate.name + ' ';
5451 27 May 19 nicklas 375       c += '[' + Reggie.wellToAlpha(dna.bioWell.row) + (dna.bioWell.column+1) + ']';
5424 13 May 19 nicklas 376     }
5424 13 May 19 nicklas 377     else
5424 13 May 19 nicklas 378     {
5424 13 May 19 nicklas 379       c = ' ';
5424 13 May 19 nicklas 380     }
5424 13 May 19 nicklas 381     return c;
5424 13 May 19 nicklas 382   }
5424 13 May 19 nicklas 383
5424 13 May 19 nicklas 384     
5424 13 May 19 nicklas 385   return protocol;
5424 13 May 19 nicklas 386 }();
5424 13 May 19 nicklas 387
5424 13 May 19 nicklas 388 Doc.onLoad(Protocol.initPage);
5424 13 May 19 nicklas 389
5451 27 May 19 nicklas 390 var COLUMN_DATA = [];
5424 13 May 19 nicklas 391 var WellPainter = function()
5424 13 May 19 nicklas 392 {
5424 13 May 19 nicklas 393   var painter = {};
5424 13 May 19 nicklas 394   
5424 13 May 19 nicklas 395   painter.getClassNameForWell = function(well)
5424 13 May 19 nicklas 396   {
5424 13 May 19 nicklas 397     var cls = '';
5451 27 May 19 nicklas 398     if (COLUMN_DATA[well.column]) 
5424 13 May 19 nicklas 399     {
5451 27 May 19 nicklas 400       cls += ' ' + (COLUMN_DATA[well.column].poolClass || '');
5451 27 May 19 nicklas 401       cls += ' ' + (COLUMN_DATA[well.column].groupClass || '');
5424 13 May 19 nicklas 402     }
5604 13 Sep 19 nicklas 403     if (well.extract) cls += ' ' + MipsColor.getColor(well.extract.dna.MIPS_Panel);
5424 13 May 19 nicklas 404     return cls;
5424 13 May 19 nicklas 405   }
5424 13 May 19 nicklas 406   
5424 13 May 19 nicklas 407   painter.getWellText = function(well)
5424 13 May 19 nicklas 408   {
5424 13 May 19 nicklas 409     var text = '';
5424 13 May 19 nicklas 410     var lib = well.extract;
5424 13 May 19 nicklas 411     if (lib)
5424 13 May 19 nicklas 412     {
5424 13 May 19 nicklas 413       var dna = lib.dna;
5483 11 Jun 19 nicklas 414       
5483 11 Jun 19 nicklas 415       if (!dna.nameWithoutPrefix) dna.nameWithoutPrefix = dna.name.replace(/^[a-zA-Z]+_/, '');
5483 11 Jun 19 nicklas 416       
5483 11 Jun 19 nicklas 417       text += '<div class="dna">'+Reggie.softLineBreaks(Strings.encodeTags(dna.nameWithoutPrefix))+'</div>';
5440 20 May 19 nicklas 418       text += '<div class="box">'+Strings.encodeTags(Protocol.getPlateCoordinate(dna, false))+'</div>';
5424 13 May 19 nicklas 419
5451 27 May 19 nicklas 420       if (dna.MIPS_PoolVolume != null)
5424 13 May 19 nicklas 421       {
5461 03 Jun 19 nicklas 422         text += '<div class="volume">'+Numbers.formatNumber(dna.MIPS_PoolVolume, 0, 'µl')+'</div>';
5451 27 May 19 nicklas 423       }
5451 27 May 19 nicklas 424
5604 13 Sep 19 nicklas 425       text += '<div class="mips-panel">'+Strings.encodeTags(dna.MIPS_Panel)+'</div>';
5451 27 May 19 nicklas 426
5451 27 May 19 nicklas 427       if (dna.MIPS_Form != null || dna.MIPS_NormalTumor != null)
5451 27 May 19 nicklas 428       {
5451 27 May 19 nicklas 429         text += '<div class="mips-form">';
5451 27 May 19 nicklas 430         if (dna.MIPS_NormalTumor != null) text += '<span>'+Strings.encodeTags(dna.MIPS_NormalTumor)+'</span>';
5451 27 May 19 nicklas 431         if (dna.MIPS_Form != null) text += '<span>'+Strings.encodeTags(dna.MIPS_Form)+'</span>';
5424 13 May 19 nicklas 432         text += '</div>';
5424 13 May 19 nicklas 433       }
5451 27 May 19 nicklas 434       
5451 27 May 19 nicklas 435       if (dna.warnings.length > 0)
5451 27 May 19 nicklas 436       {
5451 27 May 19 nicklas 437         well.setWarning(dna.warnings.join('; '));
5451 27 May 19 nicklas 438       }
5451 27 May 19 nicklas 439       
5424 13 May 19 nicklas 440       text += '<div class="remarks">'+ dna.remarks.join('; ') + '</div>';
5424 13 May 19 nicklas 441     }
5424 13 May 19 nicklas 442     return text;
5424 13 May 19 nicklas 443   }
5424 13 May 19 nicklas 444
5424 13 May 19 nicklas 445   return painter;
5424 13 May 19 nicklas 446 }();
5424 13 May 19 nicklas 447