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

Code
Comments
Other
Rev Date Author Line
5458 29 May 19 nicklas 1 var SelectPlates = function()
5458 29 May 19 nicklas 2 {
5458 29 May 19 nicklas 3   var select = {};
5458 29 May 19 nicklas 4   var plates;
5459 29 May 19 nicklas 5   var currentPreviewPlateId;
5458 29 May 19 nicklas 6   
5458 29 May 19 nicklas 7   var debug = 0;
5458 29 May 19 nicklas 8
5458 29 May 19 nicklas 9   // Page initialization
5458 29 May 19 nicklas 10   select.initPage = function()
5458 29 May 19 nicklas 11   {
5458 29 May 19 nicklas 12     Buttons.addClickHandler('close', App.closeWindow);
5458 29 May 19 nicklas 13     Buttons.addClickHandler('btnOk', select.saveSelected);
5458 29 May 19 nicklas 14     
5459 29 May 19 nicklas 15     Events.addEventHandler('plate-list', 'click', select.previewPlate);
5459 29 May 19 nicklas 16     
5458 29 May 19 nicklas 17     var url = '../Mips.servlet?ID='+App.getSessionId();
5458 29 May 19 nicklas 18     url += '&cmd=GetAliquotPlatesForMips';
5458 29 May 19 nicklas 19     var ignore = Data.get('page-data', 'ignore');
5458 29 May 19 nicklas 20     if (ignore) url += '&ignore='+encodeURIComponent(ignore);
5458 29 May 19 nicklas 21     Wizard.showLoadingAnimation('Loading information about aliquot plates...');
5458 29 May 19 nicklas 22     Wizard.asyncJsonRequest(url, select.aliquotPlatesLoaded);    
5458 29 May 19 nicklas 23   }
5458 29 May 19 nicklas 24   
5458 29 May 19 nicklas 25   select.aliquotPlatesLoaded = function(response)
5458 29 May 19 nicklas 26   {
5458 29 May 19 nicklas 27     plates = response.plates;
5458 29 May 19 nicklas 28     if (plates.length == 0)
5458 29 May 19 nicklas 29     {
5458 29 May 19 nicklas 30       Wizard.setFatalError('Could not find any aliquot plates');
5458 29 May 19 nicklas 31       return;
5458 29 May 19 nicklas 32     }
5458 29 May 19 nicklas 33     
5458 29 May 19 nicklas 34     var html = '';
5458 29 May 19 nicklas 35     for (var plateNo = 0; plateNo < plates.length; plateNo++)
5458 29 May 19 nicklas 36     {
5458 29 May 19 nicklas 37       var plate = plates[plateNo];
5458 29 May 19 nicklas 38       
5458 29 May 19 nicklas 39       var notes = [];
5458 29 May 19 nicklas 40       if (plate.PlateProcessing == 'AddAliquots') notes[notes.length] = 'SCAN-B lab';
5458 29 May 19 nicklas 41       if (plate.AutoProcessing == 'ReProcess') notes[notes.length] = 'Re-process';
5458 29 May 19 nicklas 42       if (plate.comments) notes[notes.length] = Strings.encodeTags(plate.comments);
5458 29 May 19 nicklas 43       html += '<tr class="highlight">';
5458 29 May 19 nicklas 44       html += '<td class="check"><input type="checkbox" id="check.'+plate.id+'" value="'+plate.id+'"></td>';
5459 29 May 19 nicklas 45       html += '<td class="name"><label for="check.'+plate.id+'" data-plate-id="'+plate.id+'">'+Strings.encodeTags(plate.name)+'</label></td>';
5460 03 Jun 19 nicklas 46       html += '<td class="image"><img class="link" src="../images/search.png" data-plate-id="'+plate.id+'" title="Preview aliquots on this plate"></td>';
5458 29 May 19 nicklas 47       html += '<td class="count">'+plate.usedWells+'</td>';
5458 29 May 19 nicklas 48       html += '<td class="count">'+plate.unusedAliquots+'</td>';
5458 29 May 19 nicklas 49       html += '<td class="date">'+Reggie.reformatDate(plate.registrationDate)+'</td>';
5458 29 May 19 nicklas 50       html += '<td class="notes">'+notes.join('; ')+'</td>';
5458 29 May 19 nicklas 51       html += '</tr>';
5458 29 May 19 nicklas 52     }
5458 29 May 19 nicklas 53     
5458 29 May 19 nicklas 54     Doc.element('plate-list').innerHTML = html;
5458 29 May 19 nicklas 55     Doc.show('aliquot-table', 'table');
5458 29 May 19 nicklas 56   }
5458 29 May 19 nicklas 57
5459 29 May 19 nicklas 58   select.previewPlate = function(event)
5459 29 May 19 nicklas 59   {
5459 29 May 19 nicklas 60     var plateId = Data.get(event.target, 'plate-id');
5459 29 May 19 nicklas 61     if (!plateId || plateId == currentPreviewPlateId) return;
5459 29 May 19 nicklas 62     
5459 29 May 19 nicklas 63     currentPreviewPlateId = plateId;
5459 29 May 19 nicklas 64     
5459 29 May 19 nicklas 65     var url = '../Mips.servlet?ID='+App.getSessionId();
5459 29 May 19 nicklas 66     url += '&cmd=GetUnusedAliquotsFromPlates';
5459 29 May 19 nicklas 67     url += '&plates='+plateId;
5459 29 May 19 nicklas 68     url += '&includeall=1';
5459 29 May 19 nicklas 69     Wizard.asyncJsonRequest(url, select.previewLoaded);
5459 29 May 19 nicklas 70   }
5458 29 May 19 nicklas 71   
5459 29 May 19 nicklas 72   select.previewLoaded = function(response)
5459 29 May 19 nicklas 73   {
5459 29 May 19 nicklas 74     var plate = response.plates[0];
5459 29 May 19 nicklas 75     var html = '<table class="fullborder">';
5459 29 May 19 nicklas 76     html += '<caption>Preview of ' + Strings.encodeTags(plate.name)+'</caption>';
5459 29 May 19 nicklas 77     html += '<tr class="bg-filled-100 bottomborder"><th></th>';
5459 29 May 19 nicklas 78     for (var c = 0; c < plate.columns; c++)
5459 29 May 19 nicklas 79     {
5459 29 May 19 nicklas 80       html += '<th>'+(c+1)+'</th>';
5459 29 May 19 nicklas 81     }
5459 29 May 19 nicklas 82     html += '</tr>';
5459 29 May 19 nicklas 83     
5459 29 May 19 nicklas 84     for (var r = 0; r < plate.rows; r++)
5459 29 May 19 nicklas 85     {
5459 29 May 19 nicklas 86       var row = Reggie.wellToAlpha(r);
5459 29 May 19 nicklas 87       html += '<tr><th class="bg-filled-100 rightborder">'+row+'</th>';
5459 29 May 19 nicklas 88       for (var c = 0; c < plate.columns; c++)
5459 29 May 19 nicklas 89       {
5459 29 May 19 nicklas 90         var id = row+(c+1);
5459 29 May 19 nicklas 91         html += '<td id="'+id+'"></td>';
5459 29 May 19 nicklas 92       }
5459 29 May 19 nicklas 93       html += '</tr>';
5459 29 May 19 nicklas 94     }
5603 13 Sep 19 nicklas 95     var panelCounters = [];
5460 03 Jun 19 nicklas 96     html += '<tr class="topborder pool-row">';
5460 03 Jun 19 nicklas 97     html += '<th class="bg-filled-100 rightborder"></th>';
5460 03 Jun 19 nicklas 98     for (var c = 0; c < plate.columns; c++)
5460 03 Jun 19 nicklas 99     {
5520 20 Jun 19 nicklas 100       html += '<th><div id="c.'+c+'"></div></th>';
5603 13 Sep 19 nicklas 101       panelCounters[c] = new ItemCounter();
5460 03 Jun 19 nicklas 102     }
5460 03 Jun 19 nicklas 103     html += '</tr>';
5459 29 May 19 nicklas 104     html += '</table>';
5460 03 Jun 19 nicklas 105
5459 29 May 19 nicklas 106     Doc.element('plate-preview').innerHTML = html;
5459 29 May 19 nicklas 107     
5459 29 May 19 nicklas 108     for (var a = 0; a < plate.aliquots.length; a++)
5459 29 May 19 nicklas 109     {
5459 29 May 19 nicklas 110       var aliquot = plate.aliquots[a];
5459 29 May 19 nicklas 111       var td = Doc.element(aliquot.bioWell.location);
5603 13 Sep 19 nicklas 112       var cls = 'aliquot ' + MipsColor.getColor(aliquot.MIPS_Panel);
5459 29 May 19 nicklas 113       if (aliquot.numChildren > 0) cls += ' used';
5459 29 May 19 nicklas 114       td.className = cls;
5603 13 Sep 19 nicklas 115       td.title = aliquot.MIPS_Panel;
5603 13 Sep 19 nicklas 116       panelCounters[aliquot.bioWell.column].count(aliquot.MIPS_Panel);
5459 29 May 19 nicklas 117     }
5460 03 Jun 19 nicklas 118     for (var c = 0; c < plate.columns; c++)
5460 03 Jun 19 nicklas 119     {
5603 13 Sep 19 nicklas 120       counter = panelCounters[c];
5603 13 Sep 19 nicklas 121       var mipsPanel = Strings.encodeTags(counter.maxKey);
5603 13 Sep 19 nicklas 122       if (mipsPanel)
5520 20 Jun 19 nicklas 123       {
5603 13 Sep 19 nicklas 124         var numPanels = counter.numKeys();
5520 20 Jun 19 nicklas 125         var div = Doc.element('c.'+c);
5603 13 Sep 19 nicklas 126         div.innerHTML = mipsPanel + (numPanels > 1 ? '+' : '');
5603 13 Sep 19 nicklas 127         div.title = mipsPanel + (numPanels > 1 ? ' and ' + (numPanels- 1) + ' more' : '');
5603 13 Sep 19 nicklas 128         Doc.addClass(div.parentNode, MipsColor.getColor(mipsPanel));
5520 20 Jun 19 nicklas 129       }
5460 03 Jun 19 nicklas 130     }
5459 29 May 19 nicklas 131   }
5459 29 May 19 nicklas 132   
5458 29 May 19 nicklas 133   select.saveSelected = function()
5458 29 May 19 nicklas 134   {
5458 29 May 19 nicklas 135     var frm = document.forms['reggie'];
5458 29 May 19 nicklas 136     
5458 29 May 19 nicklas 137     var selected = [];
5458 29 May 19 nicklas 138     for (var plateNo = 0; plateNo < plates.length; plateNo++)
5458 29 May 19 nicklas 139     {
5458 29 May 19 nicklas 140       var plate = plates[plateNo];
5458 29 May 19 nicklas 141       if (frm['check.'+plate.id].checked)
5458 29 May 19 nicklas 142       {
5458 29 May 19 nicklas 143         selected[selected.length] = {'id': plate.id, 'name': plate.name };
5458 29 May 19 nicklas 144       };
5458 29 May 19 nicklas 145     }
5458 29 May 19 nicklas 146     if (selected.length > 0)
5458 29 May 19 nicklas 147     {
5458 29 May 19 nicklas 148       var notifyTarget = window.opener.Doc.element('plates');
5458 29 May 19 nicklas 149       var remaining = selected.length-1;
5458 29 May 19 nicklas 150       for (var i = 0; i < selected.length; i++)
5458 29 May 19 nicklas 151       {
5458 29 May 19 nicklas 152         var s = selected[i];
5458 29 May 19 nicklas 153         s.remaining = remaining--;
5458 29 May 19 nicklas 154         Events.sendCustomEvent(notifyTarget, 'base-selected', s);
5458 29 May 19 nicklas 155       }
5458 29 May 19 nicklas 156     }
5458 29 May 19 nicklas 157     App.closeWindow();
5458 29 May 19 nicklas 158   }
5458 29 May 19 nicklas 159   
5458 29 May 19 nicklas 160   return select;
5458 29 May 19 nicklas 161 }();
5458 29 May 19 nicklas 162
5458 29 May 19 nicklas 163 Doc.onLoad(SelectPlates.initPage);
5458 29 May 19 nicklas 164