extensions/net.sf.basedb.reggie/trunk/resources/sampleproc/storagebox.js

Code
Comments
Other
Rev Date Author Line
7173 17 May 23 nicklas 1 // Inpsired from plate.js, but with support for multiple boxes on
7173 17 May 23 nicklas 2 // one page but otherwise a lot simpler
7173 17 May 23 nicklas 3 function StorageBox(boxId, rows, columns, painter)
7173 17 May 23 nicklas 4 {
7173 17 May 23 nicklas 5   this.id = boxId;
7173 17 May 23 nicklas 6   this.rows = rows;
7173 17 May 23 nicklas 7   this.columns = columns;
7173 17 May 23 nicklas 8   this.painter = painter;
7173 17 May 23 nicklas 9   this.tag = document.getElementById(boxId);
7173 17 May 23 nicklas 10   
7173 17 May 23 nicklas 11   this.wells = [];
7173 17 May 23 nicklas 12   // Wells are ordered by row instead of by column
7173 17 May 23 nicklas 13   for (var r = 0; r < rows; r++)
7173 17 May 23 nicklas 14   {
7173 17 May 23 nicklas 15     for (var c = 0; c < columns; c++)
7173 17 May 23 nicklas 16     {
7173 17 May 23 nicklas 17       this.wells[this.wells.length] = new Well(this, r, c);
7173 17 May 23 nicklas 18     }
7173 17 May 23 nicklas 19   }
7173 17 May 23 nicklas 20 }
7173 17 May 23 nicklas 21   
7173 17 May 23 nicklas 22   
7173 17 May 23 nicklas 23 /**
7173 17 May 23 nicklas 24   Get the number of rows in the storage box.
7173 17 May 23 nicklas 25 */
7173 17 May 23 nicklas 26 StorageBox.prototype.getRows = function()
7173 17 May 23 nicklas 27 {
7173 17 May 23 nicklas 28   return this.rows;
7173 17 May 23 nicklas 29 }
7173 17 May 23 nicklas 30
7173 17 May 23 nicklas 31 /**
7173 17 May 23 nicklas 32   Get the number of columns in the storage box.
7173 17 May 23 nicklas 33 */
7173 17 May 23 nicklas 34 StorageBox.prototype.getColumns = function()
7173 17 May 23 nicklas 35 {
7173 17 May 23 nicklas 36   return this.columns;
7173 17 May 23 nicklas 37 }
7173 17 May 23 nicklas 38
7173 17 May 23 nicklas 39   
7173 17 May 23 nicklas 40 /**
7173 17 May 23 nicklas 41   Get all wells in the storage box.
7173 17 May 23 nicklas 42 */
7173 17 May 23 nicklas 43 StorageBox.prototype.getWells = function()
7173 17 May 23 nicklas 44 {
7173 17 May 23 nicklas 45   return this.wells;
7173 17 May 23 nicklas 46 }
7173 17 May 23 nicklas 47
7173 17 May 23 nicklas 48   
7173 17 May 23 nicklas 49 /**
7173 17 May 23 nicklas 50   Get the well at the given coordinate.
7173 17 May 23 nicklas 51 */
7173 17 May 23 nicklas 52 StorageBox.prototype.getWell = function(row, column)
7173 17 May 23 nicklas 53 {
7173 17 May 23 nicklas 54   return this.wells[row * this.columns + column];
7173 17 May 23 nicklas 55 }
7173 17 May 23 nicklas 56   
7173 17 May 23 nicklas 57   
7173 17 May 23 nicklas 58 /**
7173 17 May 23 nicklas 59   Paint the given wells.
7173 17 May 23 nicklas 60 */
7173 17 May 23 nicklas 61 StorageBox.prototype.paint = function(wells)
7173 17 May 23 nicklas 62 {
7173 17 May 23 nicklas 63   for (var i = 0; i < wells.length; i++)
7173 17 May 23 nicklas 64   {
7173 17 May 23 nicklas 65     wells[i].paint(this.painter);
7173 17 May 23 nicklas 66   }
7173 17 May 23 nicklas 67 }
7173 17 May 23 nicklas 68   
7173 17 May 23 nicklas 69
7173 17 May 23 nicklas 70 /**
7173 17 May 23 nicklas 71   Represents a well on the plate. Each well is created when 
7173 17 May 23 nicklas 72   the page is loaded and is initially empty.
7173 17 May 23 nicklas 73 */
7173 17 May 23 nicklas 74 function Well(box, row, column)
7173 17 May 23 nicklas 75 {
7173 17 May 23 nicklas 76   this.box = box;
7173 17 May 23 nicklas 77   this.row = row;
7173 17 May 23 nicklas 78   this.column = column;
7173 17 May 23 nicklas 79   this.selected = false;
7173 17 May 23 nicklas 80   this.highlighClass = null;
7173 17 May 23 nicklas 81   this.sample = null;
7173 17 May 23 nicklas 82   this.locked = false;
7173 17 May 23 nicklas 83   
7173 17 May 23 nicklas 84   this.tag = document.getElementById(box.id+'.well.'+row+'.'+column);
7173 17 May 23 nicklas 85 }
7173 17 May 23 nicklas 86
7173 17 May 23 nicklas 87 /**
7173 17 May 23 nicklas 88   Set the samples item that is put into this well. Use
7173 17 May 23 nicklas 89   'null' to clear the well. The sample should always
7173 17 May 23 nicklas 90   have a 'name' property, and an 'id' property if it 
7173 17 May 23 nicklas 91   exists in the database.
7173 17 May 23 nicklas 92 */
7173 17 May 23 nicklas 93 Well.prototype.setSample = function(sample)
7173 17 May 23 nicklas 94 {
7173 17 May 23 nicklas 95   this.sample = sample;
7173 17 May 23 nicklas 96 }
7173 17 May 23 nicklas 97
7173 17 May 23 nicklas 98 Well.prototype.setLocked = function(locked)
7173 17 May 23 nicklas 99 {
7173 17 May 23 nicklas 100   this.locked = locked;
7173 17 May 23 nicklas 101 }
7173 17 May 23 nicklas 102
7173 17 May 23 nicklas 103 Well.prototype.getClassName = function(painter)
7173 17 May 23 nicklas 104 {
7173 17 May 23 nicklas 105   var c = this.column;
7173 17 May 23 nicklas 106   var cls = 'well col-'+c;
7173 17 May 23 nicklas 107   
7173 17 May 23 nicklas 108   if (painter)
7173 17 May 23 nicklas 109   {
7173 17 May 23 nicklas 110     cls += ' ' + painter.getClassNameForWell(this);
7173 17 May 23 nicklas 111   }
7173 17 May 23 nicklas 112   return cls;
7173 17 May 23 nicklas 113 }
7173 17 May 23 nicklas 114
7173 17 May 23 nicklas 115 Well.prototype.getText = function(painter)
7173 17 May 23 nicklas 116 {
7173 17 May 23 nicklas 117   var text = '';
7173 17 May 23 nicklas 118   if (painter)
7173 17 May 23 nicklas 119   {
7173 17 May 23 nicklas 120     text = painter.getWellText(this);
7173 17 May 23 nicklas 121   }
7173 17 May 23 nicklas 122   else
7173 17 May 23 nicklas 123   {
7173 17 May 23 nicklas 124     if (this.sample)
7173 17 May 23 nicklas 125     {
7173 17 May 23 nicklas 126       text += '<div class="name">'+Strings.encodeTags(this.sample.name)+'</div>'
7173 17 May 23 nicklas 127     }
7173 17 May 23 nicklas 128   }
7173 17 May 23 nicklas 129   return text;
7173 17 May 23 nicklas 130 }
7173 17 May 23 nicklas 131
7173 17 May 23 nicklas 132 Well.prototype.paint = function(painter)
7173 17 May 23 nicklas 133 {
7173 17 May 23 nicklas 134   this.tag.innerHTML = this.getText(painter);
7173 17 May 23 nicklas 135   this.tag.className = this.getClassName(painter);
7173 17 May 23 nicklas 136 }