extensions/net.sf.basedb.meludi/trunk/resources/libprep/libprep_plate_protocol.js

Code
Comments
Other
Rev Date Author Line
3685 12 Jan 16 olle 1 var Protocol = function()
3685 12 Jan 16 olle 2 {
3685 12 Jan 16 olle 3   var protocol = {};
3685 12 Jan 16 olle 4   var debug = 0;
3685 12 Jan 16 olle 5   var MINIMAL_DNA_VOLUME = 1.0; //µl
3685 12 Jan 16 olle 6   
3685 12 Jan 16 olle 7   // Page initialization
3685 12 Jan 16 olle 8   protocol.initPage = function()
3685 12 Jan 16 olle 9   {
3685 12 Jan 16 olle 10     var pageId = Doc.getPageId();
3685 12 Jan 16 olle 11     if (pageId == 'protocol')
3685 12 Jan 16 olle 12     {
3685 12 Jan 16 olle 13       Buttons.addClickHandler('print-button', Wizard.goPrint);  
3685 12 Jan 16 olle 14
3685 12 Jan 16 olle 15       var submitInfoJsonStr = Data.get('page-data', 'submitinfo');
3685 12 Jan 16 olle 16       protocol.initializeProtocol(submitInfoJsonStr);
3685 12 Jan 16 olle 17     }
3685 12 Jan 16 olle 18   }
3685 12 Jan 16 olle 19
3685 12 Jan 16 olle 20   protocol.initializeProtocol = function(submitInfoJsonStr)
3685 12 Jan 16 olle 21   {
3685 12 Jan 16 olle 22     var submitInfo = JSON.parse(submitInfoJsonStr);
3685 12 Jan 16 olle 23     var docMode = submitInfo.docMode;
3685 12 Jan 16 olle 24     var itemInfo = submitInfo.items;
3685 12 Jan 16 olle 25     var list = itemInfo;
3685 12 Jan 16 olle 26
3685 12 Jan 16 olle 27     var schema = PoolSchema.getById(Data.get('page-data', 'schema'));
3685 12 Jan 16 olle 28
3685 12 Jan 16 olle 29     var view = Data.get('page-data', 'view');
3685 12 Jan 16 olle 30     if (view == 'list')
3685 12 Jan 16 olle 31     {
3685 12 Jan 16 olle 32       protocol.viewAsList(list);
3685 12 Jan 16 olle 33     }
3685 12 Jan 16 olle 34     else
3685 12 Jan 16 olle 35     {
3685 12 Jan 16 olle 36       protocol.viewAsPlate(list, schema)
3685 12 Jan 16 olle 37     }
3685 12 Jan 16 olle 38
3685 12 Jan 16 olle 39   }
3685 12 Jan 16 olle 40   
3685 12 Jan 16 olle 41   protocol.viewAsPlate = function(list, schema)
3685 12 Jan 16 olle 42   {
3685 12 Jan 16 olle 43     var rows = Data.get('page-data', 'rows');
3685 12 Jan 16 olle 44     var columns = Data.get('page-data', 'columns');
3685 12 Jan 16 olle 45     Plate.init(rows, columns, schema, WellPainter);
3685 12 Jan 16 olle 46     
3685 12 Jan 16 olle 47     for (var i = 0; i < list.length; i++)
3685 12 Jan 16 olle 48     {
3685 12 Jan 16 olle 49       var lib = list[i];
3685 12 Jan 16 olle 50       var well = lib.bioWell;
3685 12 Jan 16 olle 51       Plate.getWell(well.row, well.column).setExtract(lib);
3685 12 Jan 16 olle 52       // FPB aliquot
3685 12 Jan 16 olle 53       var libFpb = protocol.fetchFpbAliquot(lib);
3685 12 Jan 16 olle 54       var wellFpb = libFpb.bioWell;
3685 12 Jan 16 olle 55       Plate.getWell(wellFpb.row, wellFpb.column).setExtract(libFpb);
3685 12 Jan 16 olle 56     }
3685 12 Jan 16 olle 57
3685 12 Jan 16 olle 58     Plate.paint(Plate.getWells());
3685 12 Jan 16 olle 59     PoolSchema.buildPoolTableRow(schema, columns);
3685 12 Jan 16 olle 60
3685 12 Jan 16 olle 61     Doc.show('all-protocol');
3685 12 Jan 16 olle 62   }
3685 12 Jan 16 olle 63
3685 12 Jan 16 olle 64   protocol.viewAsList = function(list)
3685 12 Jan 16 olle 65   {
3685 12 Jan 16 olle 66     var lastPoolNum = -1;
3685 12 Jan 16 olle 67     for (var i = 0; i < list.length; i++)
3685 12 Jan 16 olle 68     {
3685 12 Jan 16 olle 69       var lib = list[i];
3685 12 Jan 16 olle 70       protocol.libListEntry(lib);
3685 12 Jan 16 olle 71       // FPB aliquot
3685 12 Jan 16 olle 72       var libFpb = protocol.fetchFpbAliquot(lib);
3685 12 Jan 16 olle 73       protocol.libListEntry(libFpb);
3685 12 Jan 16 olle 74     }
3685 12 Jan 16 olle 75
3685 12 Jan 16 olle 76     Doc.show('all-protocol');
3685 12 Jan 16 olle 77   }
3685 12 Jan 16 olle 78
3685 12 Jan 16 olle 79   protocol.libListEntry = function(lib)
3685 12 Jan 16 olle 80   {
3685 12 Jan 16 olle 81     var well = lib.bioWell;
3685 12 Jan 16 olle 82   
3685 12 Jan 16 olle 83     var idSuffix = well.column + '.' + well.row;
3685 12 Jan 16 olle 84     Doc.removeClass('row.'+idSuffix, 'empty');
3685 12 Jan 16 olle 85     Doc.element('lib.'+idSuffix).innerHTML = Strings.encodeTags(lib.name);
3685 12 Jan 16 olle 86     // Index 1 & 2 primers
3685 12 Jan 16 olle 87     var well = lib.bioWell;
3685 12 Jan 16 olle 88     var row = well.row + 1;
3685 12 Jan 16 olle 89     var column = well.column + 1;
3685 12 Jan 16 olle 90     var index2 = 'A50' + row;
3685 12 Jan 16 olle 91     var index1 = 'A70' + column;
3685 12 Jan 16 olle 92     if (column > 9)
3685 12 Jan 16 olle 93     {
3685 12 Jan 16 olle 94       index1 = 'A7' + column;
3685 12 Jan 16 olle 95     }
3685 12 Jan 16 olle 96     Doc.element('barcode.'+idSuffix).innerHTML = Strings.encodeTags(index2 + ', ' + index1);
3685 12 Jan 16 olle 97     // DNA extract
3685 12 Jan 16 olle 98     var dna = lib.info;
3685 12 Jan 16 olle 99     if (dna)
3685 12 Jan 16 olle 100     {
3685 12 Jan 16 olle 101       var volDnaInSolution = Numbers.formatNumber(dna.volDnaInSolution, 2);
3685 12 Jan 16 olle 102       var waterInSolution = Numbers.formatNumber(dna.waterInSolution, 2);
3685 12 Jan 16 olle 103       if (dna.volDnaInSolution < MINIMAL_DNA_VOLUME)
3685 12 Jan 16 olle 104       {
3685 12 Jan 16 olle 105         Doc.element('dilution.'+idSuffix).innerHTML = '<span class="lowvolume">' + volDnaInSolution + ' + ' + waterInSolution + 'µl</span>';
3685 12 Jan 16 olle 106       }
3685 12 Jan 16 olle 107       else
3685 12 Jan 16 olle 108       {
3685 12 Jan 16 olle 109         Doc.element('dilution.'+idSuffix).innerHTML = volDnaInSolution + ' + ' + waterInSolution + 'µl';
3685 12 Jan 16 olle 110       }
3685 12 Jan 16 olle 111     }
3685 12 Jan 16 olle 112       
3685 12 Jan 16 olle 113     if (lib.remarks)
3685 12 Jan 16 olle 114     {
3685 12 Jan 16 olle 115       Doc.element('remarks.'+idSuffix).innerHTML = lib.remarks.join('; ');
3685 12 Jan 16 olle 116     }
3685 12 Jan 16 olle 117   }
3685 12 Jan 16 olle 118   
3685 12 Jan 16 olle 119   protocol.fetchFpbAliquot = function(lib)
3685 12 Jan 16 olle 120   {
3685 12 Jan 16 olle 121     // FPA aliquot
3685 12 Jan 16 olle 122     var well = lib.bioWell;
3685 12 Jan 16 olle 123     var fpaName = lib.name;
3685 12 Jan 16 olle 124     var fpaInfo = lib.info;
3685 12 Jan 16 olle 125     // FPB aliquot
3685 12 Jan 16 olle 126     var row = well.row;
3685 12 Jan 16 olle 127     var column = well.column;
3685 12 Jan 16 olle 128     if (column < 6)
3685 12 Jan 16 olle 129     {
3685 12 Jan 16 olle 130       column += 6;
3685 12 Jan 16 olle 131     }
3685 12 Jan 16 olle 132     var wellFpb = {};
3685 12 Jan 16 olle 133     wellFpb.row = row;
3685 12 Jan 16 olle 134     wellFpb.column = column;
3685 12 Jan 16 olle 135     var aliquotExtensionIndex = fpaName.indexOf('.fpa');
3685 12 Jan 16 olle 136     var fpbName = fpaName.substring(0, aliquotExtensionIndex) + ".fpb";
3685 12 Jan 16 olle 137     var libFpb = {};
3685 12 Jan 16 olle 138     libFpb.bioWell = wellFpb;
3685 12 Jan 16 olle 139     libFpb.name = fpbName;
3685 12 Jan 16 olle 140     // Clone of FPA info is OK for library preparation plate protocol
3685 12 Jan 16 olle 141     libFpb.info = fpaInfo;
3685 12 Jan 16 olle 142     return libFpb;
3685 12 Jan 16 olle 143   }
3685 12 Jan 16 olle 144
3685 12 Jan 16 olle 145   return protocol;
3685 12 Jan 16 olle 146 }();
3685 12 Jan 16 olle 147
3685 12 Jan 16 olle 148 Doc.onLoad(Protocol.initPage);
3685 12 Jan 16 olle 149
3685 12 Jan 16 olle 150
3685 12 Jan 16 olle 151 var WellPainter = function()
3685 12 Jan 16 olle 152 {
3685 12 Jan 16 olle 153   var MINIMAL_DNA_VOLUME = 1.0; //µl
3685 12 Jan 16 olle 154   var painter = {};
3685 12 Jan 16 olle 155   
3685 12 Jan 16 olle 156   painter.getClassNameForWell = function(well, schema)
3685 12 Jan 16 olle 157   {
3685 12 Jan 16 olle 158     var cls = '';
3685 12 Jan 16 olle 159     if (well.column < 6)
3685 12 Jan 16 olle 160     {
3685 12 Jan 16 olle 161       cls = 'bg-green';
3685 12 Jan 16 olle 162     }
3685 12 Jan 16 olle 163     else
3685 12 Jan 16 olle 164     {
3685 12 Jan 16 olle 165       cls = 'bg-blue';
3685 12 Jan 16 olle 166     }
3685 12 Jan 16 olle 167     return cls;
3685 12 Jan 16 olle 168   }
3685 12 Jan 16 olle 169   
3685 12 Jan 16 olle 170   painter.getWellText = function(well, schema)
3685 12 Jan 16 olle 171   {
3685 12 Jan 16 olle 172     var text = '';
3685 12 Jan 16 olle 173     var lib = well.extract;
3685 12 Jan 16 olle 174     if (lib)
3685 12 Jan 16 olle 175     {
3685 12 Jan 16 olle 176       var name = lib.name;
3685 12 Jan 16 olle 177       var aliquotName = painter.fetchPlateViewAliquotName(name);
3685 12 Jan 16 olle 178       text += '<div class="lib">'+Strings.encodeTags(aliquotName)+'</div>';
3685 12 Jan 16 olle 179       // DNA extract
3685 12 Jan 16 olle 180       var dna = lib.info;
3685 12 Jan 16 olle 181       if (dna)
3685 12 Jan 16 olle 182       {
3685 12 Jan 16 olle 183         var volDnaInSolution = Numbers.formatNumber(dna.volDnaInSolution, 2);
3685 12 Jan 16 olle 184         var waterInSolution = Numbers.formatNumber(dna.waterInSolution, 2);
3685 12 Jan 16 olle 185         if (dna.volDnaInSolution < MINIMAL_DNA_VOLUME)
3685 12 Jan 16 olle 186         {
3685 12 Jan 16 olle 187           text += '<div class="lib"><span class="lowvolume">'+volDnaInSolution+' + '+waterInSolution+'µl</span></div>';
3685 12 Jan 16 olle 188         }
3685 12 Jan 16 olle 189         else
3685 12 Jan 16 olle 190         {
3685 12 Jan 16 olle 191           text += '<div class="lib">'+volDnaInSolution+' + '+waterInSolution+'µl</div>';
3685 12 Jan 16 olle 192         }
3685 12 Jan 16 olle 193       }
3685 12 Jan 16 olle 194       // Index 1 & 2 primers
3685 12 Jan 16 olle 195       var well = lib.bioWell;
3685 12 Jan 16 olle 196       var row = well.row + 1;
3685 12 Jan 16 olle 197       var column = well.column + 1;
3685 12 Jan 16 olle 198       var index2 = 'A50' + row;
3685 12 Jan 16 olle 199       var index1 = 'A70' + column;
3685 12 Jan 16 olle 200       if (column > 9)
3685 12 Jan 16 olle 201       {
3685 12 Jan 16 olle 202         index1 = 'A7' + column;
3685 12 Jan 16 olle 203       }
3685 12 Jan 16 olle 204       text += '<div class="lib">'+index2+'</div>';
3685 12 Jan 16 olle 205       text += '<div class="lib">'+index1+'</div>';
3685 12 Jan 16 olle 206     }
3685 12 Jan 16 olle 207     return text;
3685 12 Jan 16 olle 208   }
3685 12 Jan 16 olle 209
3685 12 Jan 16 olle 210   painter.fetchPlateViewAliquotName = function(name)
3685 12 Jan 16 olle 211   {
3685 12 Jan 16 olle 212     // Concatenate parts before first dot and after last dot and convert to uppercase
3685 12 Jan 16 olle 213     var extIndex = name.indexOf('.fp');
3685 12 Jan 16 olle 214     var origBaseName = name.substring(0, extIndex);
3685 12 Jan 16 olle 215     var origExtName = name.substring(extIndex);
3685 12 Jan 16 olle 216     var baseName = origBaseName.toUpperCase();
3685 12 Jan 16 olle 217     var dotIndex = baseName.indexOf('.');
3685 12 Jan 16 olle 218     baseName = baseName.substring(0, dotIndex);
3685 12 Jan 16 olle 219     var extName = 'FPA';
3685 12 Jan 16 olle 220     if (origExtName == '.fpb')
3685 12 Jan 16 olle 221     {
3685 12 Jan 16 olle 222       extName = 'FPB';
3685 12 Jan 16 olle 223     }
3685 12 Jan 16 olle 224     var aliquotName = baseName + extName;
3685 12 Jan 16 olle 225     return aliquotName;
3685 12 Jan 16 olle 226   }
3685 12 Jan 16 olle 227
3685 12 Jan 16 olle 228   return painter;
3685 12 Jan 16 olle 229 }();