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

Code
Comments
Other
Rev Date Author Line
3719 22 Jan 16 olle 1 var SelectDna = function()
3719 22 Jan 16 olle 2 {
3719 22 Jan 16 olle 3   var selectdna = {};
3719 22 Jan 16 olle 4   var dnaItems = [];
3719 22 Jan 16 olle 5   
3719 22 Jan 16 olle 6   var debug = 0;
3719 22 Jan 16 olle 7
3719 22 Jan 16 olle 8   // Page initialization
3719 22 Jan 16 olle 9   selectdna.initPage = function()
3719 22 Jan 16 olle 10   {
3719 22 Jan 16 olle 11     // Step 1
3719 22 Jan 16 olle 12     Events.addEventHandler('step-1', 'wizard-validate', selectdna.validateStep1);
3719 22 Jan 16 olle 13
3719 22 Jan 16 olle 14     // Step 2
3719 22 Jan 16 olle 15     Events.addEventHandler('step-2', 'wizard-initialize', selectdna.initializeStep2);
3719 22 Jan 16 olle 16     Events.addEventHandler('max_delta_ct', 'change', selectdna.maxDeltaCtOnChange);
3719 22 Jan 16 olle 17     Events.addEventHandler('max_delta_ct', 'keypress', Events.numberOnly);
3719 22 Jan 16 olle 18
3719 22 Jan 16 olle 19     // Navigation
3719 22 Jan 16 olle 20     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
3719 22 Jan 16 olle 21     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
3719 22 Jan 16 olle 22     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
3719 22 Jan 16 olle 23     Buttons.addClickHandler('goregister', Wizard.goRegister);
3719 22 Jan 16 olle 24     
3719 22 Jan 16 olle 25     // Final registration
3719 22 Jan 16 olle 26     Events.addEventHandler('wizard', 'wizard-submit', selectdna.submit);
3719 22 Jan 16 olle 27
3719 22 Jan 16 olle 28     var url = '../Extraction.servlet?ID='+App.getSessionId();
3719 22 Jan 16 olle 29     url += '&cmd=GetProcessedStartItemLists';
3719 22 Jan 16 olle 30     url += '&orderDesc=true';
3719 22 Jan 16 olle 31     url += '&anItemNotOnLibPlate=true';
3719 22 Jan 16 olle 32     url += '&ignoreQpcrBranch=false';
3719 22 Jan 16 olle 33     Wizard.showLoadingAnimation('Loading processed items...');
3719 22 Jan 16 olle 34     Wizard.asyncJsonRequest(url, selectdna.initializeStep1);
3719 22 Jan 16 olle 35   }
3719 22 Jan 16 olle 36
3719 22 Jan 16 olle 37   selectdna.initializeStep1 = function(response)
3719 22 Jan 16 olle 38   {
3719 22 Jan 16 olle 39     var frm = document.forms['meludi'];
3719 22 Jan 16 olle 40     var itemLists = response.itemLists;
3719 22 Jan 16 olle 41     dnaItems = [];
3719 22 Jan 16 olle 42
3719 22 Jan 16 olle 43     var startList = frm.startList;
3719 22 Jan 16 olle 44     if (itemLists.length > 0)
3719 22 Jan 16 olle 45     {
3719 22 Jan 16 olle 46       for (var i=0; i < itemLists.length; i++)
3719 22 Jan 16 olle 47       {
3719 22 Jan 16 olle 48         var itemList = itemLists[i];
3719 22 Jan 16 olle 49         var name = (i+1) + ': ' + Strings.encodeTags(itemList.name);
3719 22 Jan 16 olle 50         if (itemList.sourceItemNames)
3719 22 Jan 16 olle 51         {
3719 22 Jan 16 olle 52           name += ' -- (';
3719 22 Jan 16 olle 53           name += itemList.numMeludiItems;
3719 22 Jan 16 olle 54           name += ' + ' + itemList.numExtraItems;
3719 22 Jan 16 olle 55           name += ')';
3719 22 Jan 16 olle 56         }
3719 22 Jan 16 olle 57         if (itemList.extractionDate)
3719 22 Jan 16 olle 58         {
3719 22 Jan 16 olle 59           name += ' -- [' + selectdna.asDate(itemList.extractionDate) + ']';
3719 22 Jan 16 olle 60         }
3719 22 Jan 16 olle 61         var selected = (i == 0);
3719 22 Jan 16 olle 62         var option = new Option(name, itemList.id, selected, selected);
3719 22 Jan 16 olle 63         option.itemList = itemList;
3719 22 Jan 16 olle 64         startList.options[startList.length] = option;
3719 22 Jan 16 olle 65       }
3719 22 Jan 16 olle 66       startList.options[0].selected = true;
3719 22 Jan 16 olle 67     }
3719 22 Jan 16 olle 68     else
3719 22 Jan 16 olle 69     {
3719 22 Jan 16 olle 70       Wizard.setFatalError('No start lists available.');
3719 22 Jan 16 olle 71       return;
3719 22 Jan 16 olle 72     }
3719 22 Jan 16 olle 73     Doc.show('step-1');
3719 22 Jan 16 olle 74     Doc.hide('gocancel');
3719 22 Jan 16 olle 75     Doc.show('gonext');
3719 22 Jan 16 olle 76     Doc.hide('goregister');
3719 22 Jan 16 olle 77     Doc.hide('extractSourceItems');
3719 22 Jan 16 olle 78   }
3719 22 Jan 16 olle 79
3719 22 Jan 16 olle 80   selectdna.validateStep1 = function(event)
3719 22 Jan 16 olle 81   {
3719 22 Jan 16 olle 82     var frm = document.forms['meludi'];
3719 22 Jan 16 olle 83     var startList = null;
3719 22 Jan 16 olle 84     for (var i = 0; i < frm.startList.length; i++)
3719 22 Jan 16 olle 85     {
3719 22 Jan 16 olle 86       if (frm.startList[i].selected)
3719 22 Jan 16 olle 87       {
3719 22 Jan 16 olle 88         startList = frm.startList[i];
3719 22 Jan 16 olle 89       }
3719 22 Jan 16 olle 90     }
3719 22 Jan 16 olle 91     if (startList == null)
3719 22 Jan 16 olle 92     {
3719 22 Jan 16 olle 93       event.preventDefault();
3719 22 Jan 16 olle 94     }
3719 22 Jan 16 olle 95   }
3719 22 Jan 16 olle 96   
3719 22 Jan 16 olle 97   selectdna.initializeStep2 = function(event)
3719 22 Jan 16 olle 98   {
3719 22 Jan 16 olle 99     var frm = document.forms['meludi'];
3719 22 Jan 16 olle 100     var startItemList = null;
3719 22 Jan 16 olle 101     var jsonStartItemListIds = [];
3719 22 Jan 16 olle 102     var numSelected = 0;
3719 22 Jan 16 olle 103     for (var i = 0; i < frm.startList.length; i++)
3719 22 Jan 16 olle 104     {
3719 22 Jan 16 olle 105       if (frm.startList[i].selected)
3719 22 Jan 16 olle 106       {
3719 22 Jan 16 olle 107         var jsonStartList = {};
3719 22 Jan 16 olle 108         jsonStartList.id = frm.startList[i].value;
3719 22 Jan 16 olle 109         jsonStartList.name = frm.startList[i].itemList.name;
3719 22 Jan 16 olle 110         jsonStartItemListIds[numSelected] = jsonStartList;
3719 22 Jan 16 olle 111         numSelected++;
3719 22 Jan 16 olle 112       }
3719 22 Jan 16 olle 113     }
3719 22 Jan 16 olle 114     if (numSelected == 0)
3719 22 Jan 16 olle 115     {
3719 22 Jan 16 olle 116       event.preventDefault();
3719 22 Jan 16 olle 117     }
3719 22 Jan 16 olle 118
3719 22 Jan 16 olle 119     frm.startList.disabled = true;
3719 22 Jan 16 olle 120     var startListName = jsonStartItemListIds[0].name;
3719 22 Jan 16 olle 121     Doc.element('detailsStartListName').innerHTML = '<b>Start list: ' + startListName + '</b>';
3719 22 Jan 16 olle 122
3719 22 Jan 16 olle 123     Wizard.setCurrentStep(2);
3719 22 Jan 16 olle 124     Doc.show('step-2');
3719 22 Jan 16 olle 125     Doc.show('gocancel');
3719 22 Jan 16 olle 126     Doc.hide('gonext');
3719 22 Jan 16 olle 127     Doc.show('goregister');
3719 22 Jan 16 olle 128     Doc.addClass('goregister', 'disabled');
3719 22 Jan 16 olle 129     
3719 22 Jan 16 olle 130     var url = '../Extraction.servlet?ID='+App.getSessionId();
3719 22 Jan 16 olle 131     url += '&cmd=GetListOfItemsFromStartItemLists';
3719 22 Jan 16 olle 132     url += '&startListIds='+JSON.stringify(jsonStartItemListIds);
3719 22 Jan 16 olle 133     url += '&itemType=DNA';
3719 22 Jan 16 olle 134     url += '&itemNotOnLibPlate=true';
3719 22 Jan 16 olle 135     url += '&ignoreQpcrBranch=false';
3719 22 Jan 16 olle 136     Wizard.asyncJsonRequest(url, selectdna.dnaItemListLoaded);
3719 22 Jan 16 olle 137   }
3719 22 Jan 16 olle 138
3719 22 Jan 16 olle 139   selectdna.dnaItemListLoaded = function(response)
3719 22 Jan 16 olle 140   {
3719 22 Jan 16 olle 141     var frm = document.forms['meludi'];
3719 22 Jan 16 olle 142
3719 22 Jan 16 olle 143     var maxDeltaCt = frm.max_delta_ct.value;
3719 22 Jan 16 olle 144     var items = response.items;
3719 22 Jan 16 olle 145     dnaItems = items;
3719 22 Jan 16 olle 146
3719 22 Jan 16 olle 147     // Create table with DNA item data
3719 22 Jan 16 olle 148     //
3719 22 Jan 16 olle 149     var html = '<table id="dna-details" class="step-form">';
3719 22 Jan 16 olle 150     // First header row
3719 22 Jan 16 olle 151     html += '<thead>';
3719 22 Jan 16 olle 152     html += '<tr>';
3719 22 Jan 16 olle 153     html += '<th style="width: 18em;">Item name</th>';
3719 22 Jan 16 olle 154     html += '<th style="width: 5em;" align="right">ΔCt</th>';
3719 22 Jan 16 olle 155     html += '<th colspan="2" style="width: 12em;">qPCR branch</th>';
3719 22 Jan 16 olle 156 /*
3719 22 Jan 16 olle 157     html += '<th style="width: 300px;">Operator delivery comment</th>';
3719 22 Jan 16 olle 158     html += '<th></th>';
3719 22 Jan 16 olle 159     html += '<th>Input message</th>';
3719 22 Jan 16 olle 160 */
3719 22 Jan 16 olle 161     html += '</tr>';
3719 22 Jan 16 olle 162     // Second header row
3719 22 Jan 16 olle 163     html += '<tr>';
3719 22 Jan 16 olle 164     html += '<th class="dottedleft"></th>';
3719 22 Jan 16 olle 165     html += '<th style="width: 5em;"></th>';
3719 22 Jan 16 olle 166     html += '<td style="width: 6em;" align="center">Current</td>';
3719 22 Jan 16 olle 167     html += '<td style="width: 6em;" align="center">New</td>';
3719 22 Jan 16 olle 168 /*
3719 22 Jan 16 olle 169     html += '<td style="width: 300px;"></td>';
3719 22 Jan 16 olle 170     html += '<td class="dottedleft"></td>';
3719 22 Jan 16 olle 171     html += '<td class="dottedleft"></td>';
3719 22 Jan 16 olle 172 */
3719 22 Jan 16 olle 173     html += '</tr>';
3719 22 Jan 16 olle 174     html += '</thead>';
3719 22 Jan 16 olle 175     html += '<tbody>';
3719 22 Jan 16 olle 176
3719 22 Jan 16 olle 177     var numItems = items.length;
3719 22 Jan 16 olle 178     for (var i=0; i < numItems; i++)
3719 22 Jan 16 olle 179     {
3719 22 Jan 16 olle 180       var item = items[i];
3719 22 Jan 16 olle 181       html += '<tr>';
3719 22 Jan 16 olle 182       // Item name
3719 22 Jan 16 olle 183       html += '<td id="itemname.'+i+'" style="width: 18em;">' + item.name + '</td>';
3719 22 Jan 16 olle 184       // ΔCt
3719 22 Jan 16 olle 185       var deltaCtDisplayed = '-';
3719 22 Jan 16 olle 186       if (item.deltaCt != null)
3719 22 Jan 16 olle 187       {
3719 22 Jan 16 olle 188         deltaCtDisplayed = Numbers.formatNumber(item.deltaCt, 2);
3719 22 Jan 16 olle 189       }
3719 22 Jan 16 olle 190       html += '<td id="itemdeltact.'+i+'" style="width: 5em;" align="right">' + deltaCtDisplayed + '</td>';
3719 22 Jan 16 olle 191       // Current qPCR branch check box
3719 22 Jan 16 olle 192       var qPcrCurValue = item.qpcrBranch;
3719 22 Jan 16 olle 193       if (qPcrCurValue == null)
3719 22 Jan 16 olle 194       {
3719 22 Jan 16 olle 195         qPcrCurValue = false;
3719 22 Jan 16 olle 196       }
3719 22 Jan 16 olle 197       var qPcrCurDefault = '';
3719 22 Jan 16 olle 198       if (qPcrCurValue)
3719 22 Jan 16 olle 199       {
3719 22 Jan 16 olle 200         qPcrCurDefault = ' checked';
3719 22 Jan 16 olle 201       }
3719 22 Jan 16 olle 202       html += '<td style="width: 6em;" align="center"><input type="checkbox" name="qPcrCur.'+i+'" id="qPcrCur.'+i+'"'+qPcrCurDefault+'></td>';
3719 22 Jan 16 olle 203       // New qPCR branch check box
3719 22 Jan 16 olle 204       var qPcrNewDefault = '';
3719 22 Jan 16 olle 205       if (item.deltaCt != null)
3719 22 Jan 16 olle 206       {
3719 22 Jan 16 olle 207         if (item.deltaCt > maxDeltaCt)
3719 22 Jan 16 olle 208         {
3719 22 Jan 16 olle 209           qPcrNewDefault = ' checked';
3719 22 Jan 16 olle 210         }
3719 22 Jan 16 olle 211       }
3719 22 Jan 16 olle 212       html += '<td style="width: 6em;" align="center"><input type="checkbox" name="qPcrNew.'+i+'" id="qPcrNew.'+i+'"'+qPcrNewDefault+'></td>';
3719 22 Jan 16 olle 213 /*
3719 22 Jan 16 olle 214       // Operator delivery comment
3719 22 Jan 16 olle 215       html += '<td class="input"  style="width: 300px;"><textarea rows="1" name="comment.'+i+'" id="comment.'+i+'" style="width: 300px; height: 20px;" data-next-focus="'+commentNextId+'"></textarea></td>';
3719 22 Jan 16 olle 216       // Status and message columns
3719 22 Jan 16 olle 217       html += '<td class="status" id="extramaterial.'+i+'.status"></td>';
3719 22 Jan 16 olle 218       html += '<td class="help"><span id="extramaterial.'+i+'.message" class="message"></span></td>';
3719 22 Jan 16 olle 219 */
3719 22 Jan 16 olle 220       html += '</tr>';
3719 22 Jan 16 olle 221     }
3719 22 Jan 16 olle 222     Doc.element('detailsSection').innerHTML = html;
3719 22 Jan 16 olle 223
3719 22 Jan 16 olle 224     for (var i=0; i < numItems; i++)
3719 22 Jan 16 olle 225     {
3719 22 Jan 16 olle 226       var item = items[i];
3719 22 Jan 16 olle 227
3719 22 Jan 16 olle 228       // Disable check box for current qPCR branch value
3719 22 Jan 16 olle 229       Doc.addClass('qPcrCur.'+i, 'disabled');
3719 22 Jan 16 olle 230
3719 22 Jan 16 olle 231       // Highlight name of items with changed qPCR branch settings
3719 22 Jan 16 olle 232       var qPcrCurValue = Doc.element('qPcrCur.'+i).checked;
3719 22 Jan 16 olle 233       var qPcrNewValue = Doc.element('qPcrNew.'+i).checked;
3719 22 Jan 16 olle 234       Doc.addOrRemoveClass('itemname.'+i, 'nondefault', qPcrCurValue != qPcrNewValue);
3719 22 Jan 16 olle 235
3719 22 Jan 16 olle 236       // Add event handler for qPCR branch check box
3719 22 Jan 16 olle 237       Events.addEventHandler('qPcrNew.'+i, 'change', selectdna.qPcrNewOnChange, { 'index': i });
3719 22 Jan 16 olle 238     }
3719 22 Jan 16 olle 239     Doc.removeClass('goregister', 'disabled');
3719 22 Jan 16 olle 240   }
3719 22 Jan 16 olle 241   
3719 22 Jan 16 olle 242   selectdna.maxDeltaCtOnChange = function(event)
3719 22 Jan 16 olle 243   {
3719 22 Jan 16 olle 244     var frm = document.forms['meludi'];
3719 22 Jan 16 olle 245     var startItemList = null;
3719 22 Jan 16 olle 246     var jsonStartItemListIds = [];
3719 22 Jan 16 olle 247     var numSelected = 0;
3719 22 Jan 16 olle 248     for (var i = 0; i < frm.startList.length; i++)
3719 22 Jan 16 olle 249     {
3719 22 Jan 16 olle 250       if (frm.startList[i].selected)
3719 22 Jan 16 olle 251       {
3719 22 Jan 16 olle 252         var jsonStartList = {};
3719 22 Jan 16 olle 253         jsonStartList.id = frm.startList[i].value;
3719 22 Jan 16 olle 254         jsonStartItemListIds[numSelected] = jsonStartList;
3719 22 Jan 16 olle 255         numSelected++;
3719 22 Jan 16 olle 256       }
3719 22 Jan 16 olle 257     }
3719 22 Jan 16 olle 258     Doc.addClass('goregister', 'disabled');
3719 22 Jan 16 olle 259
3719 22 Jan 16 olle 260     var url = '../Extraction.servlet?ID='+App.getSessionId();
3719 22 Jan 16 olle 261     url += '&cmd=GetListOfItemsFromStartItemLists';
3719 22 Jan 16 olle 262     url += '&startListIds='+JSON.stringify(jsonStartItemListIds);
3719 22 Jan 16 olle 263     url += '&itemType=DNA';
3719 22 Jan 16 olle 264     url += '&itemNotOnLibPlate=true';
3719 22 Jan 16 olle 265     url += '&ignoreQpcrBranch=false';
3719 22 Jan 16 olle 266     Wizard.asyncJsonRequest(url, selectdna.dnaItemListLoaded);
3719 22 Jan 16 olle 267   }
3719 22 Jan 16 olle 268   
3719 22 Jan 16 olle 269   selectdna.qPcrNewOnChange = function(event)
3719 22 Jan 16 olle 270   {
3719 22 Jan 16 olle 271     var frm = document.forms['meludi'];
3719 22 Jan 16 olle 272     var target = event.currentTarget;
3719 22 Jan 16 olle 273
3719 22 Jan 16 olle 274     var index = Data.int(target, 'index');
3719 22 Jan 16 olle 275     // Highlight name of items with changed qPCR branch settings
3719 22 Jan 16 olle 276     var qPcrCurValue = Doc.element('qPcrCur.'+index).checked;
3719 22 Jan 16 olle 277     var qPcrNewValue = Doc.element('qPcrNew.'+index).checked;
3719 22 Jan 16 olle 278     Doc.addOrRemoveClass('itemname.'+index, 'nondefault', qPcrCurValue != qPcrNewValue);
3719 22 Jan 16 olle 279   }
3719 22 Jan 16 olle 280
3719 22 Jan 16 olle 281   selectdna.submit = function()
3719 22 Jan 16 olle 282   {
3719 22 Jan 16 olle 283     var frm = document.forms['meludi'];
3719 22 Jan 16 olle 284     var submitInfo = {};
3719 22 Jan 16 olle 285
3719 22 Jan 16 olle 286     // Add new qPCR branch values to dnaItems
3719 22 Jan 16 olle 287     for (var i = 0; i < dnaItems.length; i++)
3719 22 Jan 16 olle 288     {
3719 22 Jan 16 olle 289       var dnaItem = dnaItems[i];
3719 22 Jan 16 olle 290       var qPcrNewValue = Doc.element('qPcrNew.'+i).checked;
3719 22 Jan 16 olle 291       dnaItem.qpcrBranch = qPcrNewValue;
3719 22 Jan 16 olle 292       dnaItems[i] = dnaItem;
3719 22 Jan 16 olle 293     }
3719 22 Jan 16 olle 294     submitInfo.items = dnaItems;
3719 22 Jan 16 olle 295
3719 22 Jan 16 olle 296     var url = '../Dna.servlet?ID='+App.getSessionId();
3719 22 Jan 16 olle 297     url += '&cmd=UpdateDnaQpcrBranchFlag';
3719 22 Jan 16 olle 298     Wizard.showLoadingAnimation('Performing registration...');
3719 22 Jan 16 olle 299     Wizard.asyncJsonRequest(url, selectdna.submissionResults, 'POST', JSON.stringify(submitInfo));
3719 22 Jan 16 olle 300   }
3719 22 Jan 16 olle 301   
3719 22 Jan 16 olle 302   selectdna.submissionResults = function(response)
3719 22 Jan 16 olle 303   {
3719 22 Jan 16 olle 304     Wizard.showFinalMessage(response.messages);
3719 22 Jan 16 olle 305     Doc.show('gorestart');
3719 22 Jan 16 olle 306   }
3719 22 Jan 16 olle 307
3719 22 Jan 16 olle 308   // Format value as a date in format yyyy-mm-dd
3719 22 Jan 16 olle 309   selectdna.asDate = function(value)
3719 22 Jan 16 olle 310   {
3719 22 Jan 16 olle 311     if (!value) return '';
3719 22 Jan 16 olle 312     if (value.length == 8)
3719 22 Jan 16 olle 313     {
3719 22 Jan 16 olle 314       value = value.substr(0, 4) + '-' + value.substr(4, 2) + '-' + value.substr(6, 2);
3719 22 Jan 16 olle 315     }
3719 22 Jan 16 olle 316     return value;
3719 22 Jan 16 olle 317   }
3719 22 Jan 16 olle 318
3719 22 Jan 16 olle 319   return selectdna;
3719 22 Jan 16 olle 320 }();
3719 22 Jan 16 olle 321
3719 22 Jan 16 olle 322 Doc.onLoad(SelectDna.initPage);