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

Code
Comments
Other
Rev Date Author Line
1809 25 Jan 13 nicklas 1
1809 25 Jan 13 nicklas 2 var Plate = function()
1809 25 Jan 13 nicklas 3 {
1809 25 Jan 13 nicklas 4   var plate = {};
1809 25 Jan 13 nicklas 5   plate.rows = 8;
1809 25 Jan 13 nicklas 6   plate.columns = 12;
1809 25 Jan 13 nicklas 7   plate.wells = [];
1809 25 Jan 13 nicklas 8   plate.poolSchema = null;
1809 25 Jan 13 nicklas 9   plate.wellPainter = null;
1809 25 Jan 13 nicklas 10   
1809 25 Jan 13 nicklas 11   /**
1809 25 Jan 13 nicklas 12     Initialize a plate with the given number of rows and columns.
1809 25 Jan 13 nicklas 13   */
1809 25 Jan 13 nicklas 14   plate.init = function(rows, columns, poolSchema, wellPainter)
1809 25 Jan 13 nicklas 15   {
1809 25 Jan 13 nicklas 16     if (rows) plate.rows = rows;
1809 25 Jan 13 nicklas 17     if (columns) plate.columns = columns;
1809 25 Jan 13 nicklas 18     if (poolSchema) plate.poolSchema = poolSchema;
1809 25 Jan 13 nicklas 19     if (wellPainter) plate.wellPainter = wellPainter;
1809 25 Jan 13 nicklas 20     
1809 25 Jan 13 nicklas 21     for (var c = 0; c < plate.columns; c++)
1809 25 Jan 13 nicklas 22     {
1809 25 Jan 13 nicklas 23       for (var r = 0; r < plate.rows; r++)
1809 25 Jan 13 nicklas 24       {
1809 25 Jan 13 nicklas 25         plate.wells[plate.wells.length] = new Well(r, c);
1809 25 Jan 13 nicklas 26       }
1809 25 Jan 13 nicklas 27     }
1809 25 Jan 13 nicklas 28   }
1809 25 Jan 13 nicklas 29   
1809 25 Jan 13 nicklas 30   /**
1809 25 Jan 13 nicklas 31     Change the pool layout schema for the plate.
1809 25 Jan 13 nicklas 32   */
1809 25 Jan 13 nicklas 33   plate.setPoolSchema = function(poolSchema)
1809 25 Jan 13 nicklas 34   {
1809 25 Jan 13 nicklas 35     plate.poolSchema = poolSchema;
1809 25 Jan 13 nicklas 36   }
1809 25 Jan 13 nicklas 37
1809 25 Jan 13 nicklas 38   /**
1809 25 Jan 13 nicklas 39     Change the well painter for the plate.
1809 25 Jan 13 nicklas 40   */
1809 25 Jan 13 nicklas 41   plate.setWellPainter = function(wellPainter)
1809 25 Jan 13 nicklas 42   {
1809 25 Jan 13 nicklas 43     plate.wellPainter = wellPainter;
1809 25 Jan 13 nicklas 44   }
1809 25 Jan 13 nicklas 45   
1809 25 Jan 13 nicklas 46   /**
1809 25 Jan 13 nicklas 47     Get the number of rows on the plate.
1809 25 Jan 13 nicklas 48   */
1809 25 Jan 13 nicklas 49   plate.getRows = function()
1809 25 Jan 13 nicklas 50   {
1809 25 Jan 13 nicklas 51     return plate.rows;
1809 25 Jan 13 nicklas 52   }
1809 25 Jan 13 nicklas 53
1809 25 Jan 13 nicklas 54   /**
1809 25 Jan 13 nicklas 55     Get the number of columns on the plate.
1809 25 Jan 13 nicklas 56   */
1809 25 Jan 13 nicklas 57   plate.getColumns = function()
1809 25 Jan 13 nicklas 58   {
1809 25 Jan 13 nicklas 59     return plate.columns;
1809 25 Jan 13 nicklas 60   }
1809 25 Jan 13 nicklas 61
1809 25 Jan 13 nicklas 62   /**
1809 25 Jan 13 nicklas 63     Get the number of pools on the plate.
1809 25 Jan 13 nicklas 64     If no schema has been set, 0 is returned.
1809 25 Jan 13 nicklas 65   */
1809 25 Jan 13 nicklas 66   plate.getPools = function()
1809 25 Jan 13 nicklas 67   {
1934 17 Apr 13 nicklas 68     return plate.poolSchema ? plate.poolSchema.numPools : 0;
1809 25 Jan 13 nicklas 69   }
1809 25 Jan 13 nicklas 70   
1809 25 Jan 13 nicklas 71   /**
1809 25 Jan 13 nicklas 72     Get all wells on the plate.
1809 25 Jan 13 nicklas 73   */
1809 25 Jan 13 nicklas 74   plate.getWells = function()
1809 25 Jan 13 nicklas 75   {
1809 25 Jan 13 nicklas 76     return plate.wells;
1809 25 Jan 13 nicklas 77   }
1809 25 Jan 13 nicklas 78   
1809 25 Jan 13 nicklas 79   /**
1809 25 Jan 13 nicklas 80     Get all wells in the given row. First row is 0.
1809 25 Jan 13 nicklas 81   */
1809 25 Jan 13 nicklas 82   plate.getRow = function(row)
1809 25 Jan 13 nicklas 83   {
1809 25 Jan 13 nicklas 84     var result = [];
1809 25 Jan 13 nicklas 85     for (var i = row; result.length < plate.columns; i += plate.rows)
1809 25 Jan 13 nicklas 86     {
1809 25 Jan 13 nicklas 87       result[result.length] = plate.wells[i];
1809 25 Jan 13 nicklas 88     }
1809 25 Jan 13 nicklas 89     return result;
1809 25 Jan 13 nicklas 90   }
1809 25 Jan 13 nicklas 91   
1809 25 Jan 13 nicklas 92   /**
1809 25 Jan 13 nicklas 93     Get all wells in the given column. First column is 0.
1809 25 Jan 13 nicklas 94   */
1809 25 Jan 13 nicklas 95   plate.getColumn = function(column)
1809 25 Jan 13 nicklas 96   {
1809 25 Jan 13 nicklas 97     var result = [];
1809 25 Jan 13 nicklas 98     for (var i = column*plate.rows; result.length < plate.rows; i++)
1809 25 Jan 13 nicklas 99     {
1809 25 Jan 13 nicklas 100       result[result.length] = plate.wells[i];
1809 25 Jan 13 nicklas 101     }
1809 25 Jan 13 nicklas 102     return result;
1809 25 Jan 13 nicklas 103   }
1809 25 Jan 13 nicklas 104
1809 25 Jan 13 nicklas 105   
1809 25 Jan 13 nicklas 106   /**
1809 25 Jan 13 nicklas 107     Get all wells in the given pool number. Which wells are selected,
1809 25 Jan 13 nicklas 108     depends on the pool schema. First pool number is 0.
1809 25 Jan 13 nicklas 109   */
1809 25 Jan 13 nicklas 110   plate.getPool = function(poolNum)
1809 25 Jan 13 nicklas 111   {
1809 25 Jan 13 nicklas 112     return plate.poolSchema.getWellsInPool(plate, poolNum);
1809 25 Jan 13 nicklas 113   }
1809 25 Jan 13 nicklas 114
1809 25 Jan 13 nicklas 115   /**
1809 25 Jan 13 nicklas 116     Get the well at the given coordinate.
1809 25 Jan 13 nicklas 117   */
1809 25 Jan 13 nicklas 118   plate.getWell = function(row, column)
1809 25 Jan 13 nicklas 119   {
1809 25 Jan 13 nicklas 120     return plate.wells[row + column * plate.rows];
1809 25 Jan 13 nicklas 121   }
1809 25 Jan 13 nicklas 122   
1809 25 Jan 13 nicklas 123   /**
5631 27 Sep 19 nicklas 124     Get well by location string (A1, B2, etc.)
5631 27 Sep 19 nicklas 125   */
5631 27 Sep 19 nicklas 126   plate.getWellByLocation = function(location)
5631 27 Sep 19 nicklas 127   {
5631 27 Sep 19 nicklas 128     var row = Reggie.alphaToWell(location.substring(0,1));
5631 27 Sep 19 nicklas 129     var column = parseInt(location.substring(1))-1;
5631 27 Sep 19 nicklas 130     return plate.getWell(row, column);
5631 27 Sep 19 nicklas 131   }
5631 27 Sep 19 nicklas 132
5631 27 Sep 19 nicklas 133   /**
1809 25 Jan 13 nicklas 134     Get all wells that contains extract with a given name.
1809 25 Jan 13 nicklas 135   */
1809 25 Jan 13 nicklas 136   plate.getWellsByName = function(name)
1809 25 Jan 13 nicklas 137   {
1809 25 Jan 13 nicklas 138     var result = [];
1809 25 Jan 13 nicklas 139     for (var i = 0; i < plate.wells.length; i++)
1809 25 Jan 13 nicklas 140     {
1809 25 Jan 13 nicklas 141       var well = plate.wells[i];
1809 25 Jan 13 nicklas 142       if (well.extract && well.extract.name == name)
1809 25 Jan 13 nicklas 143       {
1809 25 Jan 13 nicklas 144         result[result.length] = plate.wells[i];
1809 25 Jan 13 nicklas 145       }
1809 25 Jan 13 nicklas 146     }
1809 25 Jan 13 nicklas 147     return result;
1809 25 Jan 13 nicklas 148   }
1809 25 Jan 13 nicklas 149   
1809 25 Jan 13 nicklas 150   /**
1809 25 Jan 13 nicklas 151     Get all wells that are selected.
1809 25 Jan 13 nicklas 152   */
1809 25 Jan 13 nicklas 153   plate.getSelected = function()
1809 25 Jan 13 nicklas 154   {
1809 25 Jan 13 nicklas 155     var selected = [];
1809 25 Jan 13 nicklas 156     for (var i = 0; i < plate.wells.length; i++)
1809 25 Jan 13 nicklas 157     {
1809 25 Jan 13 nicklas 158       var well = plate.wells[i];
1809 25 Jan 13 nicklas 159       if (well.selected)
1809 25 Jan 13 nicklas 160       {
1809 25 Jan 13 nicklas 161         selected[selected.length] = well;
1809 25 Jan 13 nicklas 162       }
1809 25 Jan 13 nicklas 163     }
1809 25 Jan 13 nicklas 164     return selected;
1809 25 Jan 13 nicklas 165   }
1809 25 Jan 13 nicklas 166
1809 25 Jan 13 nicklas 167   /**
1809 25 Jan 13 nicklas 168     Set the selected status for all wells in the array.
1809 25 Jan 13 nicklas 169     The wells are automatically repainted.
1809 25 Jan 13 nicklas 170   */
1809 25 Jan 13 nicklas 171   plate.setSelected = function(wells, select)
1809 25 Jan 13 nicklas 172   {
1809 25 Jan 13 nicklas 173     for (var i = 0; i < wells.length; i++)
1809 25 Jan 13 nicklas 174     {
1809 25 Jan 13 nicklas 175       var well = wells[i];
1809 25 Jan 13 nicklas 176       well.selected = select;
1809 25 Jan 13 nicklas 177       well.paint(plate.wellPainter, plate.poolSchema);
1809 25 Jan 13 nicklas 178     }
1809 25 Jan 13 nicklas 179   }
1809 25 Jan 13 nicklas 180   
1809 25 Jan 13 nicklas 181   /**
3645 03 Dec 15 nicklas 182     Get all wells which are used (well.extract has been set)
3645 03 Dec 15 nicklas 183   */
3645 03 Dec 15 nicklas 184   plate.getUsed = function()
3645 03 Dec 15 nicklas 185   {
3645 03 Dec 15 nicklas 186     var used = [];
3645 03 Dec 15 nicklas 187     for (var i = 0; i < plate.wells.length; i++)
3645 03 Dec 15 nicklas 188     {
3645 03 Dec 15 nicklas 189       var well = plate.wells[i];
3645 03 Dec 15 nicklas 190       if (well.extract)
3645 03 Dec 15 nicklas 191       {
3645 03 Dec 15 nicklas 192         used[used.length] = well;
3645 03 Dec 15 nicklas 193       }
3645 03 Dec 15 nicklas 194     }
3645 03 Dec 15 nicklas 195     return used;
3645 03 Dec 15 nicklas 196   }
3645 03 Dec 15 nicklas 197   
3645 03 Dec 15 nicklas 198   /**
5631 27 Sep 19 nicklas 199     Remove extract from all wells.
5631 27 Sep 19 nicklas 200   */
5631 27 Sep 19 nicklas 201   plate.clear = function(wells, clearSelected)
5631 27 Sep 19 nicklas 202   {
5631 27 Sep 19 nicklas 203     if (wells.length == 0) return;
5631 27 Sep 19 nicklas 204     for (var i = 0; i < wells.length; i++)
5631 27 Sep 19 nicklas 205     {
5631 27 Sep 19 nicklas 206       var well = wells[i];
5631 27 Sep 19 nicklas 207       well.extract = null;
5631 27 Sep 19 nicklas 208       well.poolNum = -1;
5631 27 Sep 19 nicklas 209       if (clearSelected) well.selected = false;
5631 27 Sep 19 nicklas 210     }
5631 27 Sep 19 nicklas 211   }
5631 27 Sep 19 nicklas 212
5631 27 Sep 19 nicklas 213   /**
1809 25 Jan 13 nicklas 214     Toggle the selected status for all wells in the array.
1809 25 Jan 13 nicklas 215     The next status is determined by the current status of 
1809 25 Jan 13 nicklas 216     the first well in the array.
1809 25 Jan 13 nicklas 217   */
1809 25 Jan 13 nicklas 218   plate.toggleSelected = function(wells)
1809 25 Jan 13 nicklas 219   {
1809 25 Jan 13 nicklas 220     if (wells.length == 0) return;
1809 25 Jan 13 nicklas 221     plate.setSelected(wells, !wells[0].selected);
1809 25 Jan 13 nicklas 222   }
1809 25 Jan 13 nicklas 223   
1809 25 Jan 13 nicklas 224   /**
1809 25 Jan 13 nicklas 225     Enable or disable highlight of the given wells.
1809 25 Jan 13 nicklas 226   */
1809 25 Jan 13 nicklas 227   plate.setHighlight = function(wells, highlightClass, on)
1809 25 Jan 13 nicklas 228   {
1809 25 Jan 13 nicklas 229     var tmpClass = on ? highlightClass : null;
1809 25 Jan 13 nicklas 230     for (var i = 0; i < wells.length; i++)
1809 25 Jan 13 nicklas 231     {
1809 25 Jan 13 nicklas 232       var well = wells[i];
1809 25 Jan 13 nicklas 233       well.highlightClass = tmpClass;
2803 14 Oct 14 nicklas 234       Doc.addOrRemoveClass(well.tag, highlightClass, on);
1809 25 Jan 13 nicklas 235     }
1809 25 Jan 13 nicklas 236   }
1809 25 Jan 13 nicklas 237   
1809 25 Jan 13 nicklas 238   /**
1809 25 Jan 13 nicklas 239     Paint the given wells.
1809 25 Jan 13 nicklas 240   */
1809 25 Jan 13 nicklas 241   plate.paint = function(wells)
1809 25 Jan 13 nicklas 242   {
1809 25 Jan 13 nicklas 243     for (var i = 0; i < wells.length; i++)
1809 25 Jan 13 nicklas 244     {
1809 25 Jan 13 nicklas 245       wells[i].paint(plate.wellPainter, plate.poolSchema);
1809 25 Jan 13 nicklas 246     }
1809 25 Jan 13 nicklas 247   }
1809 25 Jan 13 nicklas 248   
1809 25 Jan 13 nicklas 249   /**
1809 25 Jan 13 nicklas 250     Check if the plate have any replicated extracts. Eg. extracts that are
1809 25 Jan 13 nicklas 251     found in more than one well. If a name is given, only extracts with that
1809 25 Jan 13 nicklas 252     name is checked, otherwise the complete plate is checked. The
1809 25 Jan 13 nicklas 253     result of the check is stored in the 'replicate' flag of the well.
1809 25 Jan 13 nicklas 254   */
1809 25 Jan 13 nicklas 255   plate.checkReplicates = function(name, noRepaint)
1809 25 Jan 13 nicklas 256   {
1809 25 Jan 13 nicklas 257     var result = [];
1809 25 Jan 13 nicklas 258     if (name)
1809 25 Jan 13 nicklas 259     {
1809 25 Jan 13 nicklas 260       // If a name has been given, it is relatively easy
1809 25 Jan 13 nicklas 261       var wells = plate.getWellsByName(name);
1809 25 Jan 13 nicklas 262       var isReplicate = wells.length > 1;
1809 25 Jan 13 nicklas 263       for (var i = 0; i < wells.length; i++)
1809 25 Jan 13 nicklas 264       {
1809 25 Jan 13 nicklas 265         var well = wells[i];
1809 25 Jan 13 nicklas 266         if (well.replicate != isReplicate)
1809 25 Jan 13 nicklas 267         {
1809 25 Jan 13 nicklas 268           well.replicate = isReplicate;
1809 25 Jan 13 nicklas 269           if (!noRepaint) well.paint(plate.wellPainter, plate.poolSchema);
1809 25 Jan 13 nicklas 270         }
1809 25 Jan 13 nicklas 271       }
1809 25 Jan 13 nicklas 272     }
1809 25 Jan 13 nicklas 273     else
1809 25 Jan 13 nicklas 274     {
1809 25 Jan 13 nicklas 275       // No name, we begin by counting the number of times we find any given name
1809 25 Jan 13 nicklas 276       var nameCount = [];
1809 25 Jan 13 nicklas 277       for (var i = 0; i < plate.wells.length; i++)
1809 25 Jan 13 nicklas 278       {
1809 25 Jan 13 nicklas 279         var well = plate.wells[i];
1809 25 Jan 13 nicklas 280         // Ignore empty wells and wells with 'Stratagene' or external 
1809 25 Jan 13 nicklas 281         if (well.extract && !well.extract.stratagene && !well.extract.external)
1809 25 Jan 13 nicklas 282         {
1809 25 Jan 13 nicklas 283           nameCount[well.extract.name] = 1 + (nameCount[well.extract.name] || 0);
1809 25 Jan 13 nicklas 284         }
1809 25 Jan 13 nicklas 285       }
1809 25 Jan 13 nicklas 286       // Then, we update the status for all wells 
1809 25 Jan 13 nicklas 287       for (var i = 0; i < plate.wells.length; i++)
1809 25 Jan 13 nicklas 288       {
1809 25 Jan 13 nicklas 289         var well = plate.wells[i];
1809 25 Jan 13 nicklas 290         if (well.extract)
1809 25 Jan 13 nicklas 291         {
1809 25 Jan 13 nicklas 292           var isReplicate = nameCount[well.extract.name] > 1;
1809 25 Jan 13 nicklas 293           if (well.replicate != isReplicate)
1809 25 Jan 13 nicklas 294           {
1809 25 Jan 13 nicklas 295             well.replicate = isReplicate;
1809 25 Jan 13 nicklas 296             if (!noRepaint) well.paint(plate.wellPainter, plate.poolSchema);
1809 25 Jan 13 nicklas 297           }
1809 25 Jan 13 nicklas 298         }
1809 25 Jan 13 nicklas 299       }
1809 25 Jan 13 nicklas 300     }
1809 25 Jan 13 nicklas 301   }
1809 25 Jan 13 nicklas 302   
1809 25 Jan 13 nicklas 303   return plate;
1809 25 Jan 13 nicklas 304 }();
1809 25 Jan 13 nicklas 305
1809 25 Jan 13 nicklas 306 /**
1809 25 Jan 13 nicklas 307   Represents a well on the plate. Each well is created when 
1809 25 Jan 13 nicklas 308   the page is loaded and is initially empty.
1809 25 Jan 13 nicklas 309 */
1809 25 Jan 13 nicklas 310 function Well(row, column)
1809 25 Jan 13 nicklas 311 {
1809 25 Jan 13 nicklas 312   this.row = row;
1809 25 Jan 13 nicklas 313   this.column = column;
1809 25 Jan 13 nicklas 314   this.selected = false;
1809 25 Jan 13 nicklas 315   this.highlighClass = null;
1809 25 Jan 13 nicklas 316   this.extract = null;
1809 25 Jan 13 nicklas 317   this.duplicates = null;
1809 25 Jan 13 nicklas 318   this.replicate = false;
1809 25 Jan 13 nicklas 319   this.warning = null;
1809 25 Jan 13 nicklas 320   this.error = null;
1809 25 Jan 13 nicklas 321   
1809 25 Jan 13 nicklas 322   this.tag = document.getElementById('well.'+row+'.'+column);
1809 25 Jan 13 nicklas 323 }
1809 25 Jan 13 nicklas 324
1809 25 Jan 13 nicklas 325 /**
1809 25 Jan 13 nicklas 326   Set the extract item that is put into this well. Use
1809 25 Jan 13 nicklas 327   'null' to clear the well. The extract should always
1809 25 Jan 13 nicklas 328   have a 'name' property, and an 'id' property if it 
1809 25 Jan 13 nicklas 329   exists in the database.
1809 25 Jan 13 nicklas 330 */
1809 25 Jan 13 nicklas 331 Well.prototype.setExtract = function(extract)
1809 25 Jan 13 nicklas 332 {
1809 25 Jan 13 nicklas 333   this.extract = extract;
1809 25 Jan 13 nicklas 334   this.duplicates = null;
1809 25 Jan 13 nicklas 335   this.replicate = false;
1809 25 Jan 13 nicklas 336   if (extract && this.clipboard) this.doneWithCopy();
1809 25 Jan 13 nicklas 337 }
1809 25 Jan 13 nicklas 338
1809 25 Jan 13 nicklas 339 /**
1809 25 Jan 13 nicklas 340   Set duplicate extract items in this well. This can
1809 25 Jan 13 nicklas 341   happen when using a file import if the same location
1809 25 Jan 13 nicklas 342   is specified twice and is an error condition which
1809 25 Jan 13 nicklas 343   must be resolved.
1809 25 Jan 13 nicklas 344 */
1809 25 Jan 13 nicklas 345 Well.prototype.addDuplicate = function(extract)
1809 25 Jan 13 nicklas 346 {
1809 25 Jan 13 nicklas 347   if (!this.duplicates)
1809 25 Jan 13 nicklas 348   {
1809 25 Jan 13 nicklas 349     this.duplicates = [];
1809 25 Jan 13 nicklas 350     this.duplicates[0] = this.extract.name;
1809 25 Jan 13 nicklas 351   }
1809 25 Jan 13 nicklas 352   this.duplicates[this.duplicates.length] = extract.name;
1809 25 Jan 13 nicklas 353 }
1809 25 Jan 13 nicklas 354
1809 25 Jan 13 nicklas 355 /**
1809 25 Jan 13 nicklas 356   Create a copy-object holding information about this well.
1809 25 Jan 13 nicklas 357   The copy has 'well' property pointing to this well and
1809 25 Jan 13 nicklas 358   'name' property holding the extract name if the well is not
1809 25 Jan 13 nicklas 359   empty. The 'clipboard' flag of this well is set to true.
1809 25 Jan 13 nicklas 360 */
1809 25 Jan 13 nicklas 361 Well.prototype.makeCopy = function()
1809 25 Jan 13 nicklas 362 {
1809 25 Jan 13 nicklas 363   var cp = {};
1809 25 Jan 13 nicklas 364   cp.well = this;
1809 25 Jan 13 nicklas 365   cp.name = this.extract ? this.extract.name : null;
1816 31 Jan 13 nicklas 366   cp.comment = this.extract ? this.extract.comment : null;
1809 25 Jan 13 nicklas 367   this.clipboard = true;
1809 25 Jan 13 nicklas 368   this.copyText = cp.name;
1809 25 Jan 13 nicklas 369   return cp;
1809 25 Jan 13 nicklas 370 }
1809 25 Jan 13 nicklas 371
1809 25 Jan 13 nicklas 372 /**
1809 25 Jan 13 nicklas 373   Unset the 'clipboard' flag for this well.
1809 25 Jan 13 nicklas 374 */
1809 25 Jan 13 nicklas 375 Well.prototype.doneWithCopy = function()
1809 25 Jan 13 nicklas 376 {
1809 25 Jan 13 nicklas 377   this.clipboard = false;
1809 25 Jan 13 nicklas 378   this.copyText = null;
1809 25 Jan 13 nicklas 379 }
1809 25 Jan 13 nicklas 380
1809 25 Jan 13 nicklas 381 Well.prototype.setWarning = function(warning)
1809 25 Jan 13 nicklas 382 {
1809 25 Jan 13 nicklas 383   this.warning = warning;
1809 25 Jan 13 nicklas 384 }
1809 25 Jan 13 nicklas 385
1809 25 Jan 13 nicklas 386 Well.prototype.hasWarning = function()
1809 25 Jan 13 nicklas 387 {
5631 27 Sep 19 nicklas 388   return this.warning != null || this.extract && this.extract.warning != null;
1809 25 Jan 13 nicklas 389 }
1809 25 Jan 13 nicklas 390
1809 25 Jan 13 nicklas 391 Well.prototype.setError = function(error)
1809 25 Jan 13 nicklas 392 {
1809 25 Jan 13 nicklas 393   this.error = error;
1809 25 Jan 13 nicklas 394 }
1809 25 Jan 13 nicklas 395
1809 25 Jan 13 nicklas 396 Well.prototype.hasError = function()
1809 25 Jan 13 nicklas 397 {
5631 27 Sep 19 nicklas 398   return this.error != null || this.extract && this.extract.error != null;
1809 25 Jan 13 nicklas 399 }
1809 25 Jan 13 nicklas 400
1809 25 Jan 13 nicklas 401 Well.prototype.getClassName = function(wellPainter, poolSchema)
1809 25 Jan 13 nicklas 402 {
1809 25 Jan 13 nicklas 403   var c = this.column;
1809 25 Jan 13 nicklas 404   var cls = 'well col-'+c;
1809 25 Jan 13 nicklas 405   if (this.selected) cls += ' selected';
1809 25 Jan 13 nicklas 406   if (this.clipboard) cls += ' clipboard';
1960 06 May 13 nicklas 407   if (!this.extract) cls += ' empty';
1809 25 Jan 13 nicklas 408   if (this.hasError()) cls += ' err';
1809 25 Jan 13 nicklas 409   if (this.hasWarning()) cls += ' warning';
1809 25 Jan 13 nicklas 410   if (this.highlightClass) cls += ' ' + this.highlightClass;
1809 25 Jan 13 nicklas 411
1809 25 Jan 13 nicklas 412   if (poolSchema)
1809 25 Jan 13 nicklas 413   {
1810 28 Jan 13 nicklas 414     cls += ' ' + poolSchema.getClassNameForWell(this, wellPainter);
1809 25 Jan 13 nicklas 415   }
1809 25 Jan 13 nicklas 416   if (wellPainter)
1809 25 Jan 13 nicklas 417   {
1810 28 Jan 13 nicklas 418     cls += ' ' + wellPainter.getClassNameForWell(this, poolSchema);
1809 25 Jan 13 nicklas 419   }
1809 25 Jan 13 nicklas 420   return cls;
1809 25 Jan 13 nicklas 421 }
1809 25 Jan 13 nicklas 422
1809 25 Jan 13 nicklas 423 Well.prototype.getText = function(wellPainter, poolSchema)
1809 25 Jan 13 nicklas 424 {
1809 25 Jan 13 nicklas 425   var text = '';
1809 25 Jan 13 nicklas 426   if (wellPainter)
1809 25 Jan 13 nicklas 427   {
1810 28 Jan 13 nicklas 428     text = wellPainter.getWellText(this, poolSchema);
1809 25 Jan 13 nicklas 429   }
1809 25 Jan 13 nicklas 430   else
1809 25 Jan 13 nicklas 431   {
1809 25 Jan 13 nicklas 432     if (this.extract)
1809 25 Jan 13 nicklas 433     {
1809 25 Jan 13 nicklas 434       text += '<div class="name">'+this.extract.name+'</div>'
1809 25 Jan 13 nicklas 435     }
1809 25 Jan 13 nicklas 436   }
1809 25 Jan 13 nicklas 437   if (this.hasError())
1809 25 Jan 13 nicklas 438   {
5631 27 Sep 19 nicklas 439     text += '<div class="err-msg">'+(this.error || this.extract.error)+'</div>';
1809 25 Jan 13 nicklas 440   }
1809 25 Jan 13 nicklas 441   if (this.hasWarning())
1809 25 Jan 13 nicklas 442   {
5631 27 Sep 19 nicklas 443     text += '<div class="warn-msg">'+(this.warning || this.extract.warning)+'</div>';
1809 25 Jan 13 nicklas 444   }
1809 25 Jan 13 nicklas 445   return text;
1809 25 Jan 13 nicklas 446 }
1809 25 Jan 13 nicklas 447
1809 25 Jan 13 nicklas 448 Well.prototype.paint = function(wellPainter, poolSchema)
1809 25 Jan 13 nicklas 449 {
1809 25 Jan 13 nicklas 450   this.warning = null;
1809 25 Jan 13 nicklas 451   this.error = null;
1809 25 Jan 13 nicklas 452   this.tag.innerHTML = this.getText(wellPainter, poolSchema);
1809 25 Jan 13 nicklas 453   this.tag.className = this.getClassName(wellPainter, poolSchema);
1809 25 Jan 13 nicklas 454 }
1809 25 Jan 13 nicklas 455
1809 25 Jan 13 nicklas 456