3449 |
28 Jul 15 |
olle |
var SelectDna = function() |
3449 |
28 Jul 15 |
olle |
2 |
{ |
3449 |
28 Jul 15 |
olle |
var selectdna = {}; |
3449 |
28 Jul 15 |
olle |
var barcodesByName = []; |
3449 |
28 Jul 15 |
olle |
5 |
|
3449 |
28 Jul 15 |
olle |
var EXTERNAL_DNA_NAME = 'External.d'; |
3449 |
28 Jul 15 |
olle |
var debug = 0; |
3449 |
28 Jul 15 |
olle |
8 |
|
3573 |
05 Nov 15 |
olle |
var currentSelected; |
3573 |
05 Nov 15 |
olle |
var names = []; |
3631 |
27 Nov 15 |
olle |
var originalNames = []; |
3631 |
27 Nov 15 |
olle |
var originalNamesHasBeenLoaded = false; |
3619 |
23 Nov 15 |
olle |
var protocolMap = {}; |
3582 |
06 Nov 15 |
olle |
var kitNum = 0; |
3582 |
06 Nov 15 |
olle |
var selectedKitName; |
4200 |
01 Nov 16 |
olle |
var startPlatePrefix; |
3573 |
05 Nov 15 |
olle |
17 |
|
3449 |
28 Jul 15 |
olle |
var graphics; |
3449 |
28 Jul 15 |
olle |
var pen; |
3449 |
28 Jul 15 |
olle |
20 |
|
3449 |
28 Jul 15 |
olle |
var quantitiesAreValid = false; |
3449 |
28 Jul 15 |
olle |
var plateNameIsValid = false; |
3449 |
28 Jul 15 |
olle |
var subtypeDna; |
3573 |
05 Nov 15 |
olle |
var subtypeDnaNormalized; |
3617 |
23 Nov 15 |
olle |
var MINIMAL_DNA_VOLUME = 1.0; //µl |
3573 |
05 Nov 15 |
olle |
var THIN_SPACE = ' '; |
3573 |
05 Nov 15 |
olle |
27 |
|
3573 |
05 Nov 15 |
olle |
var jsonRowIndex = {"A": 0, "B": 1, "C": 2, "D": 3, "E": 4, "F": 5, "G": 6, "H": 7}; |
3573 |
05 Nov 15 |
olle |
var jsonColIndex = {"1": 0, "2": 1, "3": 2, "4": 3, "5": 4, "6": 5, "7": 6, "8": 7, "9": 8, "10": 9, "11": 10, "12": 11}; |
3590 |
11 Nov 15 |
olle |
var jsonRowLetter = {0: "A", 1: "B", 2: "C", 3: "D", 4: "E", 5: "F", 6: "G", 7: "H"}; |
3590 |
11 Nov 15 |
olle |
var jsonColNumber = {0: "1", 1: "2", 2: "3", 3: "4", 4: "5", 5: "6", 6: "7", 7: "8", 8: "9", 9: "10", 10: "11", 11: "12"}; |
3449 |
28 Jul 15 |
olle |
32 |
|
3449 |
28 Jul 15 |
olle |
// Page initialization |
3449 |
28 Jul 15 |
olle |
selectdna.initPage = function() |
3449 |
28 Jul 15 |
olle |
35 |
{ |
3449 |
28 Jul 15 |
olle |
// Step 1 |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('step-1', 'wizard-validate', selectdna.validateStep1); |
3449 |
28 Jul 15 |
olle |
38 |
|
3449 |
28 Jul 15 |
olle |
// Step 2 |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('step-2', 'wizard-initialize', selectdna.initializeStep2); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('step-2', 'wizard-validate', selectdna.validateStep2); |
3449 |
28 Jul 15 |
olle |
42 |
|
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('max_delta_ct', 'change', selectdna.maxDeltaCtOnChange); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('max_delta_ct', 'keypress', Events.numberOnly); |
3449 |
28 Jul 15 |
olle |
45 |
|
3449 |
28 Jul 15 |
olle |
// Step 3 |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('step-3', 'wizard-initialize', selectdna.initializeStep3); |
3573 |
05 Nov 15 |
olle |
//Events.addEventHandler('step-3', 'wizard-validate', selectdna.validateStep3); |
3631 |
27 Nov 15 |
olle |
Buttons.addClickHandler('btnManualSelectExtract', selectdna.manualSelectExtract); |
3631 |
27 Nov 15 |
olle |
Buttons.addClickHandler('btnManualSelectControl', selectdna.manualSelectControl); |
3631 |
27 Nov 15 |
olle |
Events.addEventHandler('plate', 'base-selected', selectdna.manuallySelectedExtract); |
3631 |
27 Nov 15 |
olle |
Buttons.addClickHandler('btnManualSelectReset', selectdna.manualSelectReset); |
3449 |
28 Jul 15 |
olle |
53 |
|
3573 |
05 Nov 15 |
olle |
// Step 4 |
3573 |
05 Nov 15 |
olle |
Events.addEventHandler('step-4', 'wizard-initialize', selectdna.initializeStep4); |
3573 |
05 Nov 15 |
olle |
Events.addEventHandler('step-4', 'wizard-validate', selectdna.validateStep4); |
3573 |
05 Nov 15 |
olle |
57 |
|
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('plateName', 'change', selectdna.plateNameOnChange); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('pool_schema', 'change', selectdna.poolSchemaOnChange); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('barcode_variant', 'change', selectdna.barcodeVariantOnChange); |
3617 |
23 Nov 15 |
olle |
61 |
/* |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('quantity_regular', 'change', selectdna.quantityOnChange); |
3617 |
23 Nov 15 |
olle |
63 |
*/ |
3617 |
23 Nov 15 |
olle |
Events.addEventHandler('min_vol_dna', 'change', selectdna.minVolDnaOnChange); |
3596 |
12 Nov 15 |
olle |
65 |
/* |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('quantity_qc', 'change', selectdna.quantityOnChange); |
3596 |
12 Nov 15 |
olle |
67 |
*/ |
3617 |
23 Nov 15 |
olle |
68 |
/* |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('quantity_regular', 'keypress', Events.numberOnly); |
3617 |
23 Nov 15 |
olle |
70 |
*/ |
3617 |
23 Nov 15 |
olle |
Events.addEventHandler('min_vol_dna', 'keypress', Events.numberOnly); |
3596 |
12 Nov 15 |
olle |
72 |
/* |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('quantity_qc', 'keypress', Events.numberOnly); |
3596 |
12 Nov 15 |
olle |
74 |
*/ |
3449 |
28 Jul 15 |
olle |
75 |
|
3449 |
28 Jul 15 |
olle |
//Events.addEventHandler('warning_quantity', 'change', selectdna.warningLevelOnChange); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('warning_quality_score', 'change', selectdna.warningLevelOnChange); |
3449 |
28 Jul 15 |
olle |
//Events.addEventHandler('warning_quantity', 'keypress', Events.numberOnly); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('warning_quality_score', 'keypress', Events.numberOnly); |
3449 |
28 Jul 15 |
olle |
80 |
|
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('location', 'click', selectdna.toggleInfo); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('quantity', 'click', selectdna.toggleInfo); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('quality-score', 'click', selectdna.toggleInfo); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('qubitconc', 'click', selectdna.toggleInfo); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('volumes', 'click', selectdna.toggleInfo); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('qiacube-date', 'click', selectdna.toggleInfo); |
3449 |
28 Jul 15 |
olle |
87 |
|
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('pool-row', 'click', selectdna.togglePool); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('pool-row', 'mouseover', selectdna.highlightPool); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('pool-row', 'mouseout', selectdna.highlightPool); |
3594 |
12 Nov 15 |
olle |
91 |
|
3594 |
12 Nov 15 |
olle |
92 |
/* |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('btnLoadFromFile', selectdna.selectFile); |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('btnAutoSelect', selectdna.autoSelect); |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('btnManualSelect', selectdna.manualSelect); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('plate', 'base-selected', selectdna.manuallySelected); |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('btnStratagene', selectdna.setToStratagene); |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('btnExternal', selectdna.setToExternal); |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('btnToggleQc', selectdna.toggleQc); |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('btnComment', selectdna.commentSelected); |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('btnCutSelected', selectdna.cutSelected); |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('btnCopySelected', selectdna.copySelected); |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('btnPasteToSelected', selectdna.pasteToSelected); |
3709 |
20 Jan 16 |
olle |
104 |
*/ |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('btnSwitch', selectdna.switchSelected); |
3709 |
20 Jan 16 |
olle |
106 |
|
3624 |
25 Nov 15 |
olle |
Buttons.addClickHandler('downloadLibPrepFile', selectdna.downloadLibPrepFile); |
3593 |
12 Nov 15 |
olle |
108 |
|
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('iconSpecialSelect', 'click', selectdna.toggleSpecialSelect); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('plate', 'mouseup', selectdna.contextEvent); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('plate', 'contextmenu', selectdna.contextEvent); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('mnuComment', 'click', selectdna.commentSelected); |
3593 |
12 Nov 15 |
olle |
113 |
/* |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('mnuToggleQc', 'click', selectdna.toggleQc); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('mnuCutSelected', 'click', selectdna.cutSelected); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('mnuCopySelected', 'click', selectdna.copySelected); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('mnuPasteToSelected', 'click', selectdna.pasteToSelected); |
3709 |
20 Jan 16 |
olle |
118 |
*/ |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('mnuSwitch', 'click', selectdna.switchSelected); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('mnuCaseSummary', 'click', selectdna.showCaseSummary); |
3593 |
12 Nov 15 |
olle |
121 |
/* |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('mnuFlagLowQualityScore', 'click', selectdna.flagSelected); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('mnuFlagNotEnoughRemainingQuantity', 'click', selectdna.flagSelected); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('mnuFlagOther', 'click', selectdna.flagSelected); |
3593 |
12 Nov 15 |
olle |
125 |
*/ |
3449 |
28 Jul 15 |
olle |
126 |
|
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('flaggedDna', 'click', selectdna.showFlaggedDna); |
3449 |
28 Jul 15 |
olle |
128 |
|
3685 |
12 Jan 16 |
olle |
Events.addEventHandler('listview', 'click', selectdna.viewProtocol); |
3685 |
12 Jan 16 |
olle |
Events.addEventHandler('plateview', 'click', selectdna.viewProtocol); |
3449 |
28 Jul 15 |
olle |
131 |
|
3449 |
28 Jul 15 |
olle |
// Navigation |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('gocancel', Wizard.cancelWizard); |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('gorestart', Wizard.restartWizard); |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('gonext', Wizard.goNextOnClick); |
3449 |
28 Jul 15 |
olle |
Buttons.addClickHandler('goregister', Wizard.goRegister); |
3590 |
11 Nov 15 |
olle |
Buttons.addClickHandler('gocreate', selectdna.createProtocol); |
3449 |
28 Jul 15 |
olle |
138 |
|
3449 |
28 Jul 15 |
olle |
// Final registration |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler('wizard', 'wizard-submit', selectdna.submit); |
3449 |
28 Jul 15 |
olle |
141 |
|
4200 |
01 Nov 16 |
olle |
// Load configuration |
4200 |
01 Nov 16 |
olle |
selectdna.loadConfiguration(); |
4200 |
01 Nov 16 |
olle |
144 |
} |
4200 |
01 Nov 16 |
olle |
145 |
|
4200 |
01 Nov 16 |
olle |
selectdna.loadConfiguration = function() |
4200 |
01 Nov 16 |
olle |
147 |
{ |
4200 |
01 Nov 16 |
olle |
var url = '../Session.servlet?ID='+App.getSessionId(); |
4200 |
01 Nov 16 |
olle |
url += '&cmd=GetConfiguration'; |
4200 |
01 Nov 16 |
olle |
var request = Ajax.getXmlHttpRequest(); |
4200 |
01 Nov 16 |
olle |
request.open("GET", url, true); |
4200 |
01 Nov 16 |
olle |
Ajax.setReadyStateHandler(request, selectdna.onConfiguration, selectdna.onConfiguration); |
4200 |
01 Nov 16 |
olle |
request.send(null); |
4200 |
01 Nov 16 |
olle |
154 |
} |
4200 |
01 Nov 16 |
olle |
155 |
|
4200 |
01 Nov 16 |
olle |
selectdna.onConfiguration = function(request) |
4200 |
01 Nov 16 |
olle |
157 |
{ |
4200 |
01 Nov 16 |
olle |
if (debug) |
4200 |
01 Nov 16 |
olle |
159 |
{ |
4200 |
01 Nov 16 |
olle |
App.debug(Strings.encodeTags(request.responseText)); |
4200 |
01 Nov 16 |
olle |
161 |
} |
4200 |
01 Nov 16 |
olle |
162 |
|
4200 |
01 Nov 16 |
olle |
var response; |
4200 |
01 Nov 16 |
olle |
var error = false; |
4200 |
01 Nov 16 |
olle |
try |
4200 |
01 Nov 16 |
olle |
166 |
{ |
4200 |
01 Nov 16 |
olle |
response = JSON.parse(request.responseText); |
4200 |
01 Nov 16 |
olle |
if (response.status != 'ok') |
4200 |
01 Nov 16 |
olle |
169 |
{ |
4200 |
01 Nov 16 |
olle |
error = response.message || response.stacktrace || 'Unexpected error'; |
4200 |
01 Nov 16 |
olle |
171 |
} |
4200 |
01 Nov 16 |
olle |
172 |
} |
4200 |
01 Nov 16 |
olle |
catch (ex) |
4200 |
01 Nov 16 |
olle |
174 |
{ |
4200 |
01 Nov 16 |
olle |
error = ex; |
4200 |
01 Nov 16 |
olle |
176 |
} |
4200 |
01 Nov 16 |
olle |
if (error) App.debug(error); |
4200 |
01 Nov 16 |
olle |
178 |
|
4200 |
01 Nov 16 |
olle |
// Get configuration result |
4200 |
01 Nov 16 |
olle |
var conf = response.configuration; |
4200 |
01 Nov 16 |
olle |
// Check for start plate prefix |
4200 |
01 Nov 16 |
olle |
startPlatePrefix = conf.startPlateItemPrefix; |
4200 |
01 Nov 16 |
olle |
183 |
|
4200 |
01 Nov 16 |
olle |
// Continue with initializing info for start plate |
3449 |
28 Jul 15 |
olle |
var url = '../Extraction.servlet?ID='+App.getSessionId(); |
3449 |
28 Jul 15 |
olle |
186 |
/* |
3449 |
28 Jul 15 |
olle |
url += '&cmd=GetStartItemLists'; |
3449 |
28 Jul 15 |
olle |
188 |
*/ |
3449 |
28 Jul 15 |
olle |
url += '&cmd=GetProcessedStartItemLists'; |
3644 |
03 Dec 15 |
olle |
url += '&orderDesc=true'; |
3644 |
03 Dec 15 |
olle |
url += '&anItemNotOnLibPlate=true'; |
3719 |
22 Jan 16 |
olle |
url += '&ignoreQpcrBranch=true'; |
3719 |
22 Jan 16 |
olle |
Wizard.showLoadingAnimation('Loading processed items...'); |
3449 |
28 Jul 15 |
olle |
Wizard.asyncJsonRequest(url, selectdna.initializeStep1); |
3449 |
28 Jul 15 |
olle |
195 |
} |
3449 |
28 Jul 15 |
olle |
196 |
|
3449 |
28 Jul 15 |
olle |
selectdna.initializeStep1 = function(response) |
3449 |
28 Jul 15 |
olle |
198 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var itemLists = response.itemLists; |
3631 |
27 Nov 15 |
olle |
201 |
|
3631 |
27 Nov 15 |
olle |
// Reset JSONArray for original names |
3631 |
27 Nov 15 |
olle |
originalNames = []; |
3631 |
27 Nov 15 |
olle |
originalNamesHasBeenLoaded = false; |
3631 |
27 Nov 15 |
olle |
205 |
|
3449 |
28 Jul 15 |
olle |
var startList = frm.startList; |
3449 |
28 Jul 15 |
olle |
if (itemLists.length > 0) |
3449 |
28 Jul 15 |
olle |
208 |
{ |
3449 |
28 Jul 15 |
olle |
for (var i=0; i < itemLists.length; i++) |
3449 |
28 Jul 15 |
olle |
210 |
{ |
3449 |
28 Jul 15 |
olle |
var itemList = itemLists[i]; |
3449 |
28 Jul 15 |
olle |
var name = (i+1) + ': ' + Strings.encodeTags(itemList.name); |
3449 |
28 Jul 15 |
olle |
if (itemList.sourceItemNames) |
3449 |
28 Jul 15 |
olle |
214 |
{ |
3449 |
28 Jul 15 |
olle |
name += ' -- ('; |
3449 |
28 Jul 15 |
olle |
name += itemList.numMeludiItems; |
3449 |
28 Jul 15 |
olle |
name += ' + ' + itemList.numExtraItems; |
3449 |
28 Jul 15 |
olle |
name += ')'; |
3449 |
28 Jul 15 |
olle |
219 |
} |
3449 |
28 Jul 15 |
olle |
if (itemList.extractionDate) |
3449 |
28 Jul 15 |
olle |
221 |
{ |
3449 |
28 Jul 15 |
olle |
name += ' -- [' + selectdna.asDate(itemList.extractionDate) + ']'; |
3449 |
28 Jul 15 |
olle |
223 |
} |
3449 |
28 Jul 15 |
olle |
var selected = (i == 0); |
3449 |
28 Jul 15 |
olle |
var option = new Option(name, itemList.id, selected, selected); |
3449 |
28 Jul 15 |
olle |
option.itemList = itemList; |
3449 |
28 Jul 15 |
olle |
startList.options[startList.length] = option; |
3449 |
28 Jul 15 |
olle |
228 |
} |
3449 |
28 Jul 15 |
olle |
startList.options[0].selected = true; |
3449 |
28 Jul 15 |
olle |
230 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
232 |
{ |
3449 |
28 Jul 15 |
olle |
Wizard.setFatalError('No start lists available.'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
235 |
} |
3449 |
28 Jul 15 |
olle |
Doc.show('step-1'); |
3449 |
28 Jul 15 |
olle |
Doc.show('gocancel'); |
3449 |
28 Jul 15 |
olle |
Doc.show('gonext'); |
3449 |
28 Jul 15 |
olle |
Doc.hide('goregister'); |
3590 |
11 Nov 15 |
olle |
Doc.hide('gocreate'); |
3449 |
28 Jul 15 |
olle |
Doc.hide('extractSourceItems'); |
3449 |
28 Jul 15 |
olle |
242 |
} |
3449 |
28 Jul 15 |
olle |
243 |
|
3449 |
28 Jul 15 |
olle |
selectdna.validateStep1 = function(event) |
3449 |
28 Jul 15 |
olle |
245 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
247 |
/* |
3449 |
28 Jul 15 |
olle |
var startList = null; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < frm.startList.length; i++) |
3449 |
28 Jul 15 |
olle |
250 |
{ |
3449 |
28 Jul 15 |
olle |
if (frm.startList[i].selected) |
3449 |
28 Jul 15 |
olle |
252 |
{ |
3449 |
28 Jul 15 |
olle |
startList = frm.startList[i]; |
3449 |
28 Jul 15 |
olle |
254 |
} |
3449 |
28 Jul 15 |
olle |
255 |
} |
3449 |
28 Jul 15 |
olle |
if (startList == null) |
3449 |
28 Jul 15 |
olle |
257 |
{ |
3449 |
28 Jul 15 |
olle |
event.preventDefault(); |
3449 |
28 Jul 15 |
olle |
259 |
} |
3449 |
28 Jul 15 |
olle |
260 |
*/ |
3449 |
28 Jul 15 |
olle |
261 |
} |
3449 |
28 Jul 15 |
olle |
262 |
|
3449 |
28 Jul 15 |
olle |
selectdna.initializeStep2 = function(event) |
3449 |
28 Jul 15 |
olle |
264 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var startItemList = null; |
3449 |
28 Jul 15 |
olle |
var jsonStartItemListIds = []; |
3449 |
28 Jul 15 |
olle |
var numSelected = 0; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < frm.startList.length; i++) |
3449 |
28 Jul 15 |
olle |
270 |
{ |
3449 |
28 Jul 15 |
olle |
if (frm.startList[i].selected) |
3449 |
28 Jul 15 |
olle |
272 |
{ |
3449 |
28 Jul 15 |
olle |
var jsonStartList = {}; |
3449 |
28 Jul 15 |
olle |
jsonStartList.id = frm.startList[i].value; |
3449 |
28 Jul 15 |
olle |
jsonStartItemListIds[numSelected] = jsonStartList; |
3449 |
28 Jul 15 |
olle |
numSelected++; |
3449 |
28 Jul 15 |
olle |
277 |
} |
3449 |
28 Jul 15 |
olle |
278 |
} |
3449 |
28 Jul 15 |
olle |
//alert("select_dna_for_start_plate.js::initializeStep2(): numSelected = " + numSelected); |
3449 |
28 Jul 15 |
olle |
if (numSelected == 0) |
3449 |
28 Jul 15 |
olle |
281 |
{ |
3449 |
28 Jul 15 |
olle |
event.preventDefault(); |
3449 |
28 Jul 15 |
olle |
283 |
} |
3449 |
28 Jul 15 |
olle |
284 |
|
3449 |
28 Jul 15 |
olle |
frm.startList.disabled = true; |
3449 |
28 Jul 15 |
olle |
286 |
|
3449 |
28 Jul 15 |
olle |
Wizard.setCurrentStep(2); |
3449 |
28 Jul 15 |
olle |
Doc.show('step-2'); |
3449 |
28 Jul 15 |
olle |
Doc.show('gocancel'); |
3449 |
28 Jul 15 |
olle |
Doc.show('gonext'); |
3518 |
01 Oct 15 |
olle |
Doc.addClass('gonext', 'disabled'); |
3449 |
28 Jul 15 |
olle |
292 |
|
3449 |
28 Jul 15 |
olle |
var url = '../Extraction.servlet?ID='+App.getSessionId(); |
3449 |
28 Jul 15 |
olle |
url += '&cmd=GetListOfItemsFromStartItemLists'; |
3449 |
28 Jul 15 |
olle |
url += '&startListIds='+JSON.stringify(jsonStartItemListIds); |
3449 |
28 Jul 15 |
olle |
url += '&itemType=DNA'; |
3644 |
03 Dec 15 |
olle |
url += '&itemNotOnLibPlate=true'; |
3719 |
22 Jan 16 |
olle |
url += '&ignoreQpcrBranch=true'; |
3449 |
28 Jul 15 |
olle |
Wizard.asyncJsonRequest(url, selectdna.dnaItemListLoaded); |
3449 |
28 Jul 15 |
olle |
300 |
} |
3449 |
28 Jul 15 |
olle |
301 |
|
3449 |
28 Jul 15 |
olle |
selectdna.dnaItemListLoaded = function(response) |
3449 |
28 Jul 15 |
olle |
303 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
305 |
|
3449 |
28 Jul 15 |
olle |
var maxDeltaCt = frm.max_delta_ct.value; |
3449 |
28 Jul 15 |
olle |
var items = response.items; |
3449 |
28 Jul 15 |
olle |
//alert("selectdna.dnaItemListLoaded(): maxDeltaCt = " + maxDeltaCt + " items.length = " + items.length); |
3449 |
28 Jul 15 |
olle |
309 |
|
3449 |
28 Jul 15 |
olle |
var sourceItemList = frm.extractDnaItems; |
3449 |
28 Jul 15 |
olle |
311 |
|
3449 |
28 Jul 15 |
olle |
// Reset option list |
3573 |
05 Nov 15 |
olle |
//alert("selectdna.dnaItemListLoaded(): sourceItemList.length = " + sourceItemList.length + " sourceItemList = " + sourceItemList); |
3449 |
28 Jul 15 |
olle |
while (sourceItemList.length > 0) |
3449 |
28 Jul 15 |
olle |
315 |
{ |
3573 |
05 Nov 15 |
olle |
sourceItemList.options[sourceItemList.length - 1] = null; |
3449 |
28 Jul 15 |
olle |
317 |
} |
3449 |
28 Jul 15 |
olle |
318 |
|
3449 |
28 Jul 15 |
olle |
if (items.length > 0) |
3449 |
28 Jul 15 |
olle |
320 |
{ |
3449 |
28 Jul 15 |
olle |
var numItems = items.length; |
3449 |
28 Jul 15 |
olle |
for (var i=0; i < items.length; i++) |
3449 |
28 Jul 15 |
olle |
323 |
{ |
3449 |
28 Jul 15 |
olle |
var item = items[i]; |
3449 |
28 Jul 15 |
olle |
// Only items with delta-Ct values included in list |
3449 |
28 Jul 15 |
olle |
if (item.deltaCt != null) |
3449 |
28 Jul 15 |
olle |
327 |
{ |
3449 |
28 Jul 15 |
olle |
var name = (i+1) + ': ' + Strings.encodeTags(item.name); |
3449 |
28 Jul 15 |
olle |
if (item.bioWell) |
3449 |
28 Jul 15 |
olle |
330 |
{ |
3449 |
28 Jul 15 |
olle |
name += ' -- ' + Strings.encodeTags(item.bioWell.bioPlate.name + ' (' + item.bioWell.location+')'); |
3449 |
28 Jul 15 |
olle |
332 |
} |
3719 |
22 Jan 16 |
olle |
if (item.deltaCt) |
3719 |
22 Jan 16 |
olle |
334 |
{ |
3719 |
22 Jan 16 |
olle |
name += ' -- (ΔCt = ' + Numbers.formatNumber(item.deltaCt, 2) + ')'; |
3719 |
22 Jan 16 |
olle |
336 |
} |
3449 |
28 Jul 15 |
olle |
var selected = true; |
3449 |
28 Jul 15 |
olle |
if (item.deltaCt > maxDeltaCt) |
3449 |
28 Jul 15 |
olle |
339 |
{ |
3449 |
28 Jul 15 |
olle |
selected = false; |
3449 |
28 Jul 15 |
olle |
341 |
} |
3449 |
28 Jul 15 |
olle |
var option = new Option(name, item.id, selected, selected); |
3449 |
28 Jul 15 |
olle |
option.item = item; |
3449 |
28 Jul 15 |
olle |
sourceItemList.options[sourceItemList.length] = option; |
3449 |
28 Jul 15 |
olle |
345 |
} |
3449 |
28 Jul 15 |
olle |
346 |
} |
3449 |
28 Jul 15 |
olle |
347 |
} |
3449 |
28 Jul 15 |
olle |
348 |
/* |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
350 |
{ |
3449 |
28 Jul 15 |
olle |
Wizard.setFatalError('No items available for processing.'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
353 |
} |
3449 |
28 Jul 15 |
olle |
354 |
*/ |
3518 |
01 Oct 15 |
olle |
Doc.removeClass('gonext', 'disabled'); |
3449 |
28 Jul 15 |
olle |
356 |
} |
3449 |
28 Jul 15 |
olle |
357 |
|
3449 |
28 Jul 15 |
olle |
selectdna.maxDeltaCtOnChange = function(event) |
3449 |
28 Jul 15 |
olle |
359 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var startItemList = null; |
3449 |
28 Jul 15 |
olle |
var jsonStartItemListIds = []; |
3449 |
28 Jul 15 |
olle |
var numSelected = 0; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < frm.startList.length; i++) |
3449 |
28 Jul 15 |
olle |
365 |
{ |
3449 |
28 Jul 15 |
olle |
if (frm.startList[i].selected) |
3449 |
28 Jul 15 |
olle |
367 |
{ |
3449 |
28 Jul 15 |
olle |
var jsonStartList = {}; |
3449 |
28 Jul 15 |
olle |
jsonStartList.id = frm.startList[i].value; |
3449 |
28 Jul 15 |
olle |
jsonStartItemListIds[numSelected] = jsonStartList; |
3449 |
28 Jul 15 |
olle |
numSelected++; |
3449 |
28 Jul 15 |
olle |
372 |
} |
3449 |
28 Jul 15 |
olle |
373 |
} |
3518 |
01 Oct 15 |
olle |
Doc.addClass('gonext', 'disabled'); |
3449 |
28 Jul 15 |
olle |
375 |
|
3449 |
28 Jul 15 |
olle |
var url = '../Extraction.servlet?ID='+App.getSessionId(); |
3449 |
28 Jul 15 |
olle |
url += '&cmd=GetListOfItemsFromStartItemLists'; |
3449 |
28 Jul 15 |
olle |
url += '&startListIds='+JSON.stringify(jsonStartItemListIds); |
3449 |
28 Jul 15 |
olle |
url += '&itemType=DNA'; |
3719 |
22 Jan 16 |
olle |
url += '&itemNotOnLibPlate=true'; |
3719 |
22 Jan 16 |
olle |
url += '&ignoreQpcrBranch=true'; |
3449 |
28 Jul 15 |
olle |
Wizard.asyncJsonRequest(url, selectdna.dnaItemListLoaded); |
3449 |
28 Jul 15 |
olle |
383 |
} |
3449 |
28 Jul 15 |
olle |
384 |
|
3449 |
28 Jul 15 |
olle |
selectdna.validateStep2 = function(event) |
3449 |
28 Jul 15 |
olle |
386 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var jsonItems = []; |
3449 |
28 Jul 15 |
olle |
var numSelected = 0; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < frm.extractDnaItems.length; i++) |
3449 |
28 Jul 15 |
olle |
391 |
{ |
3449 |
28 Jul 15 |
olle |
if (frm.extractDnaItems[i].selected) |
3449 |
28 Jul 15 |
olle |
393 |
{ |
3449 |
28 Jul 15 |
olle |
394 |
/* |
3449 |
28 Jul 15 |
olle |
var jsonItem = {}; |
3449 |
28 Jul 15 |
olle |
jsonItem.id = frm.extractDnaItems[i].value; |
3449 |
28 Jul 15 |
olle |
jsonItem = frm.extractDnaItems[i].item; |
3449 |
28 Jul 15 |
olle |
398 |
*/ |
3449 |
28 Jul 15 |
olle |
var item = frm.extractDnaItems[i].item; |
3449 |
28 Jul 15 |
olle |
jsonItems[numSelected] = item; |
3449 |
28 Jul 15 |
olle |
names[numSelected] = item.name; |
3449 |
28 Jul 15 |
olle |
//alert("select_dna_for_start_plate.js::validateStep2(): numSelected = " + numSelected + " jsonItem = " + JSON.stringify(jsonItems[numSelected])); |
3449 |
28 Jul 15 |
olle |
numSelected++; |
3449 |
28 Jul 15 |
olle |
404 |
} |
3449 |
28 Jul 15 |
olle |
405 |
} |
3449 |
28 Jul 15 |
olle |
//alert("select_dna_for_start_plate.js::validateStep2(): numSelected = " + numSelected); |
3449 |
28 Jul 15 |
olle |
407 |
} |
3449 |
28 Jul 15 |
olle |
408 |
|
3449 |
28 Jul 15 |
olle |
selectdna.initializeStep3 = function(event) |
3573 |
05 Nov 15 |
olle |
410 |
{ |
3573 |
05 Nov 15 |
olle |
var frm = document.forms['meludi']; |
3573 |
05 Nov 15 |
olle |
var startItemList = null; |
3573 |
05 Nov 15 |
olle |
var jsonStartItemListIds = []; |
3573 |
05 Nov 15 |
olle |
var numSelected = 0; |
3573 |
05 Nov 15 |
olle |
for (var i = 0; i < frm.startList.length; i++) |
3573 |
05 Nov 15 |
olle |
416 |
{ |
3573 |
05 Nov 15 |
olle |
if (frm.startList[i].selected) |
3573 |
05 Nov 15 |
olle |
418 |
{ |
3573 |
05 Nov 15 |
olle |
var jsonStartList = {}; |
3573 |
05 Nov 15 |
olle |
jsonStartList.id = frm.startList[i].value; |
3573 |
05 Nov 15 |
olle |
jsonStartItemListIds[numSelected] = jsonStartList; |
3573 |
05 Nov 15 |
olle |
numSelected++; |
3573 |
05 Nov 15 |
olle |
423 |
} |
3573 |
05 Nov 15 |
olle |
424 |
} |
3573 |
05 Nov 15 |
olle |
if (numSelected == 0) |
3573 |
05 Nov 15 |
olle |
426 |
{ |
3573 |
05 Nov 15 |
olle |
event.preventDefault(); |
3573 |
05 Nov 15 |
olle |
428 |
} |
3631 |
27 Nov 15 |
olle |
//alert("select_dna_for_start_plate.js::initializeStep3(): numSelected = " + numSelected + " names.length = " + names.length + " names = " + JSON.stringify(names)); |
3573 |
05 Nov 15 |
olle |
430 |
|
3573 |
05 Nov 15 |
olle |
frm.startList.disabled = true; |
3573 |
05 Nov 15 |
olle |
432 |
|
3573 |
05 Nov 15 |
olle |
Wizard.setCurrentStep(3); |
3573 |
05 Nov 15 |
olle |
Doc.show('step-3'); |
3573 |
05 Nov 15 |
olle |
Doc.show('gocancel'); |
3573 |
05 Nov 15 |
olle |
Doc.show('gonext'); |
3631 |
27 Nov 15 |
olle |
Doc.addClass('gonext', 'disabled'); |
3631 |
27 Nov 15 |
olle |
// Disable manual select buttons until kit tables have been loaded |
3631 |
27 Nov 15 |
olle |
Doc.addClass('btnManualSelectExtract', 'disabled'); |
3631 |
27 Nov 15 |
olle |
Doc.addClass('btnManualSelectControl', 'disabled'); |
3631 |
27 Nov 15 |
olle |
Doc.addClass('btnManualSelectReset', 'disabled'); |
3631 |
27 Nov 15 |
olle |
// Disable kit tables until they have been loaded |
3631 |
27 Nov 15 |
olle |
Doc.hide('kitplatetablecontent'); |
3631 |
27 Nov 15 |
olle |
// Hide lib prep kit menu, that is only used internally |
3631 |
27 Nov 15 |
olle |
Doc.hide('libPrepKit'); |
3573 |
05 Nov 15 |
olle |
446 |
|
3631 |
27 Nov 15 |
olle |
// Original names will only be loaded the first time this function is called |
3631 |
27 Nov 15 |
olle |
if (!originalNamesHasBeenLoaded) |
3631 |
27 Nov 15 |
olle |
449 |
{ |
3631 |
27 Nov 15 |
olle |
// Reset JSONArray for original names |
3631 |
27 Nov 15 |
olle |
originalNames = []; |
3631 |
27 Nov 15 |
olle |
452 |
|
3631 |
27 Nov 15 |
olle |
for (var i = 0; i < names.length; i++) |
3631 |
27 Nov 15 |
olle |
454 |
{ |
3631 |
27 Nov 15 |
olle |
var name = names[i]; |
3631 |
27 Nov 15 |
olle |
originalNames[originalNames.length] = name; |
3631 |
27 Nov 15 |
olle |
457 |
} |
3631 |
27 Nov 15 |
olle |
originalNamesHasBeenLoaded = true; |
3631 |
27 Nov 15 |
olle |
459 |
} |
3631 |
27 Nov 15 |
olle |
460 |
|
3573 |
05 Nov 15 |
olle |
var numItems = names.length; |
3573 |
05 Nov 15 |
olle |
// Check what library preparation kits are available |
3573 |
05 Nov 15 |
olle |
var url = '../LibPrep.servlet?ID='+App.getSessionId(); |
3573 |
05 Nov 15 |
olle |
url += '&cmd=GetLibPrepKitsAsPlates'; |
3573 |
05 Nov 15 |
olle |
url += '&numItems=' + encodeURIComponent(numItems); |
3573 |
05 Nov 15 |
olle |
466 |
|
3631 |
27 Nov 15 |
olle |
Wizard.showLoadingAnimation('Loading information about kits...'); |
3573 |
05 Nov 15 |
olle |
Wizard.asyncJsonRequest(url, selectdna.kitPlatesInfoLoaded); |
3573 |
05 Nov 15 |
olle |
469 |
} |
3573 |
05 Nov 15 |
olle |
470 |
|
3573 |
05 Nov 15 |
olle |
selectdna.kitPlatesInfoLoaded = function(response) |
3573 |
05 Nov 15 |
olle |
472 |
{ |
3573 |
05 Nov 15 |
olle |
var frm = document.forms['meludi']; |
3573 |
05 Nov 15 |
olle |
var platesInfo = response.plates; |
3573 |
05 Nov 15 |
olle |
if (platesInfo) |
3573 |
05 Nov 15 |
olle |
476 |
{ |
3573 |
05 Nov 15 |
olle |
// Find header data |
3573 |
05 Nov 15 |
olle |
var numItems = names.length; |
3610 |
20 Nov 15 |
olle |
var numUsedActiveKits = 0; |
3610 |
20 Nov 15 |
olle |
var numUnusedActiveKits = 0; |
3610 |
20 Nov 15 |
olle |
var usedActiveKitsJsonArr = []; |
3610 |
20 Nov 15 |
olle |
var unusedActiveKitsJsonArr = []; |
3610 |
20 Nov 15 |
olle |
var activeKitsJsonArr = []; |
3573 |
05 Nov 15 |
olle |
for (var i = 0; i < platesInfo.length; i++) |
3573 |
05 Nov 15 |
olle |
485 |
{ |
3573 |
05 Nov 15 |
olle |
var plateInfo = platesInfo[i]; |
3573 |
05 Nov 15 |
olle |
var bioplate = plateInfo; |
3573 |
05 Nov 15 |
olle |
var expirationDate = bioplate.expirationDate; |
3573 |
05 Nov 15 |
olle |
var numTimesUsed = bioplate.timesUsed; |
3573 |
05 Nov 15 |
olle |
var unusedWellsJsonArr = bioplate.unusedWells; |
3573 |
05 Nov 15 |
olle |
var effUnusedWellsJsonArr = bioplate.effUnusedWells; |
3573 |
05 Nov 15 |
olle |
var reservedWellsJsonArr = bioplate.reservedWells; |
3573 |
05 Nov 15 |
olle |
var numUnusedWells = unusedWellsJsonArr.length; |
3573 |
05 Nov 15 |
olle |
var jsonKit = {}; |
3621 |
25 Nov 15 |
olle |
jsonKit['id'] = bioplate.kitId; |
3573 |
05 Nov 15 |
olle |
jsonKit['name'] = bioplate.kitName; |
3573 |
05 Nov 15 |
olle |
jsonKit['expirationDate'] = expirationDate; |
3573 |
05 Nov 15 |
olle |
jsonKit['numTimesUsed'] = numTimesUsed; |
3573 |
05 Nov 15 |
olle |
jsonKit['unusedWells'] = unusedWellsJsonArr; |
3573 |
05 Nov 15 |
olle |
jsonKit['effUnusedWells'] = effUnusedWellsJsonArr; |
3573 |
05 Nov 15 |
olle |
jsonKit['reservedWells'] = reservedWellsJsonArr; |
3573 |
05 Nov 15 |
olle |
jsonKit['numUnusedWells'] = numUnusedWells; |
3573 |
05 Nov 15 |
olle |
if (numUnusedWells < 48) |
3573 |
05 Nov 15 |
olle |
504 |
{ |
3610 |
20 Nov 15 |
olle |
numUsedActiveKits++; |
3610 |
20 Nov 15 |
olle |
usedActiveKitsJsonArr[usedActiveKitsJsonArr.length] = jsonKit; |
3573 |
05 Nov 15 |
olle |
507 |
} |
3573 |
05 Nov 15 |
olle |
else |
3573 |
05 Nov 15 |
olle |
509 |
{ |
3610 |
20 Nov 15 |
olle |
numUnusedActiveKits++; |
3610 |
20 Nov 15 |
olle |
unusedActiveKitsJsonArr[unusedActiveKitsJsonArr.length] = jsonKit; |
3573 |
05 Nov 15 |
olle |
512 |
} |
3573 |
05 Nov 15 |
olle |
513 |
} |
3573 |
05 Nov 15 |
olle |
// List used kits first |
3610 |
20 Nov 15 |
olle |
for (var i=0; i < usedActiveKitsJsonArr.length; i++) |
3573 |
05 Nov 15 |
olle |
516 |
{ |
3610 |
20 Nov 15 |
olle |
activeKitsJsonArr[activeKitsJsonArr.length] = usedActiveKitsJsonArr[i]; |
3573 |
05 Nov 15 |
olle |
518 |
} |
3573 |
05 Nov 15 |
olle |
// List unused kits after |
3610 |
20 Nov 15 |
olle |
for (var i=0; i < unusedActiveKitsJsonArr.length; i++) |
3573 |
05 Nov 15 |
olle |
521 |
{ |
3610 |
20 Nov 15 |
olle |
activeKitsJsonArr[activeKitsJsonArr.length] = unusedActiveKitsJsonArr[i]; |
3573 |
05 Nov 15 |
olle |
523 |
} |
3573 |
05 Nov 15 |
olle |
524 |
|
3573 |
05 Nov 15 |
olle |
// Form header |
3573 |
05 Nov 15 |
olle |
var html = ''; |
3573 |
05 Nov 15 |
olle |
html += '<b>Number of DNA items: ' + numItems + '</b><br>'; |
3582 |
06 Nov 15 |
olle |
528 |
/* |
3610 |
20 Nov 15 |
olle |
html += '<b>Unused and active kits (' + numUnusedActiveKits + ')</b><br>'; |
3610 |
20 Nov 15 |
olle |
html += '<b>Used and active kits (' + numUsedActiveKits + '):</b><br>'; |
3582 |
06 Nov 15 |
olle |
531 |
*/ |
3582 |
06 Nov 15 |
olle |
html += '<br>'; |
3573 |
05 Nov 15 |
olle |
html += 'Gray wells: Used<br>'; |
3573 |
05 Nov 15 |
olle |
html += 'Dark green wells: Unused but ignored due to placement rules<br>'; |
3573 |
05 Nov 15 |
olle |
html += 'Light green wells: Unused<br>'; |
3573 |
05 Nov 15 |
olle |
html += 'Yellow wells: Unused and reserved for selected FPA aliquots<br>'; |
3573 |
05 Nov 15 |
olle |
html += '<br>'; |
3573 |
05 Nov 15 |
olle |
538 |
|
3610 |
20 Nov 15 |
olle |
// Display data for used and active kits |
3582 |
06 Nov 15 |
olle |
var defaultKitSelected = false; |
3582 |
06 Nov 15 |
olle |
var checkedStr = ""; |
3582 |
06 Nov 15 |
olle |
kitNum = 0; |
3610 |
20 Nov 15 |
olle |
// Used and active kits |
3610 |
20 Nov 15 |
olle |
html += '<td class="prompt"><b>Used and active kits (' + numUsedActiveKits + '):</b></td>'; |
3582 |
06 Nov 15 |
olle |
html += '<br>'; |
3582 |
06 Nov 15 |
olle |
html += '<br>'; |
3573 |
05 Nov 15 |
olle |
for (var i = 0; i < platesInfo.length; i++) |
3573 |
05 Nov 15 |
olle |
548 |
{ |
3573 |
05 Nov 15 |
olle |
var plateInfo = platesInfo[i]; |
3573 |
05 Nov 15 |
olle |
var bioplate = plateInfo; |
3573 |
05 Nov 15 |
olle |
var unusedWellsJsonArr = bioplate.unusedWells; |
3573 |
05 Nov 15 |
olle |
var numUnusedWells = unusedWellsJsonArr.length; |
3573 |
05 Nov 15 |
olle |
if (numUnusedWells < 48) |
3573 |
05 Nov 15 |
olle |
554 |
{ |
3573 |
05 Nov 15 |
olle |
// Display half plate chart of unused wells for FPA aliquots |
3582 |
06 Nov 15 |
olle |
var kitName = bioplate.kitName; |
3582 |
06 Nov 15 |
olle |
var expirationDate = bioplate.expirationDate; |
3582 |
06 Nov 15 |
olle |
var timesUsed = bioplate.timesUsed; |
3582 |
06 Nov 15 |
olle |
var checkedStr = ""; |
3582 |
06 Nov 15 |
olle |
if (!defaultKitSelected) |
3582 |
06 Nov 15 |
olle |
561 |
{ |
3582 |
06 Nov 15 |
olle |
selectedKitName = kitName; |
3582 |
06 Nov 15 |
olle |
defaultKitSelected = true; |
3582 |
06 Nov 15 |
olle |
checkedStr = " checked"; |
3582 |
06 Nov 15 |
olle |
565 |
} |
3582 |
06 Nov 15 |
olle |
html += '<td style="width: 3em;"><input type="radio" name="uselibprepkit.'+kitNum+'" id="uselibprepkit.'+kitNum+'" value="'+kitName+'"'+checkedStr+'><b>Kit: ' + kitName + '</b> [Exp. ' + Strings.encodeTags(expirationDate) + '] #Times used: ' + timesUsed + '</td><br>'; |
3573 |
05 Nov 15 |
olle |
html += selectdna.buildKitInfoPlate(bioplate); |
3573 |
05 Nov 15 |
olle |
html += '<br>'; |
3582 |
06 Nov 15 |
olle |
kitNum++; |
3573 |
05 Nov 15 |
olle |
570 |
} |
3573 |
05 Nov 15 |
olle |
571 |
} |
3582 |
06 Nov 15 |
olle |
// Unused kits |
3610 |
20 Nov 15 |
olle |
html += '<td class="prompt"><b>Unused kits (' + unusedActiveKitsJsonArr.length + '):</b></td>'; |
3582 |
06 Nov 15 |
olle |
html += '<br>'; |
3610 |
20 Nov 15 |
olle |
for (var i=0; i < unusedActiveKitsJsonArr.length; i++) |
3582 |
06 Nov 15 |
olle |
576 |
{ |
3610 |
20 Nov 15 |
olle |
var jsonKit = unusedActiveKitsJsonArr[i]; |
3582 |
06 Nov 15 |
olle |
var kitName = jsonKit['name']; |
3582 |
06 Nov 15 |
olle |
var expirationDate = jsonKit['expirationDate']; |
3582 |
06 Nov 15 |
olle |
var checkedStr = ""; |
3582 |
06 Nov 15 |
olle |
if (!defaultKitSelected) |
3582 |
06 Nov 15 |
olle |
582 |
{ |
3582 |
06 Nov 15 |
olle |
selectedKitName = kitName; |
3582 |
06 Nov 15 |
olle |
defaultKitSelected = true; |
3582 |
06 Nov 15 |
olle |
checkedStr = " checked"; |
3582 |
06 Nov 15 |
olle |
586 |
} |
3582 |
06 Nov 15 |
olle |
html += '<br>'; |
3582 |
06 Nov 15 |
olle |
html += '<td style="width: 3em;"><input type="radio" name="uselibprepkit.'+kitNum+'" id="uselibprepkit.'+kitNum+'" value="'+kitName+'"'+checkedStr+'><b>Kit: ' + kitName + '</b> [Exp. ' + Strings.encodeTags(expirationDate) + ']</td>'; |
3582 |
06 Nov 15 |
olle |
kitNum++; |
3582 |
06 Nov 15 |
olle |
590 |
} |
3582 |
06 Nov 15 |
olle |
html += '<br>'; |
3610 |
20 Nov 15 |
olle |
if (activeKitsJsonArr.length == 0) |
3582 |
06 Nov 15 |
olle |
593 |
{ |
3582 |
06 Nov 15 |
olle |
Wizard.setFatalError('No library preparation kits available.'); |
3582 |
06 Nov 15 |
olle |
return; |
3582 |
06 Nov 15 |
olle |
596 |
} |
3573 |
05 Nov 15 |
olle |
Doc.element('kitplatetablecontent').innerHTML = html; |
3631 |
27 Nov 15 |
olle |
Doc.show('kitplatetablecontent'); |
3573 |
05 Nov 15 |
olle |
599 |
|
3582 |
06 Nov 15 |
olle |
for (var i=0; i < kitNum; i++) |
3582 |
06 Nov 15 |
olle |
601 |
{ |
3582 |
06 Nov 15 |
olle |
// Add event handler for radio buttons |
3582 |
06 Nov 15 |
olle |
Events.addEventHandler('uselibprepkit.'+i, 'change', selectdna.kitOnChange, { 'index': i }); |
3582 |
06 Nov 15 |
olle |
604 |
} |
3582 |
06 Nov 15 |
olle |
605 |
|
3582 |
06 Nov 15 |
olle |
// Library preparation kit selection menu (hidden, but used internally) |
3573 |
05 Nov 15 |
olle |
var libPrepKitList = frm.libPrepKit; |
3610 |
20 Nov 15 |
olle |
if (activeKitsJsonArr.length > 0) |
3573 |
05 Nov 15 |
olle |
609 |
{ |
3610 |
20 Nov 15 |
olle |
for (var i=0; i < activeKitsJsonArr.length; i++) |
3573 |
05 Nov 15 |
olle |
611 |
{ |
3610 |
20 Nov 15 |
olle |
var jsonKit = activeKitsJsonArr[i]; |
3573 |
05 Nov 15 |
olle |
var kitName = jsonKit['name']; |
3573 |
05 Nov 15 |
olle |
var expirationDate = jsonKit['expirationDate']; |
3573 |
05 Nov 15 |
olle |
var numTimesUsed = jsonKit['numTimesUsed']; |
3573 |
05 Nov 15 |
olle |
var numUnusedWells = jsonKit['numUnusedWells']; |
3573 |
05 Nov 15 |
olle |
617 |
// |
3573 |
05 Nov 15 |
olle |
var name = Strings.encodeTags(kitName); |
3573 |
05 Nov 15 |
olle |
if (numUnusedWells != null && numTimesUsed != null) |
3573 |
05 Nov 15 |
olle |
620 |
{ |
3573 |
05 Nov 15 |
olle |
name += ' -- ('; |
3573 |
05 Nov 15 |
olle |
name += '#Unused wells: ' + numUnusedWells; |
3573 |
05 Nov 15 |
olle |
name += ' #Times used: ' + numTimesUsed; |
3573 |
05 Nov 15 |
olle |
name += ')'; |
3573 |
05 Nov 15 |
olle |
625 |
} |
3573 |
05 Nov 15 |
olle |
if (expirationDate) |
3573 |
05 Nov 15 |
olle |
627 |
{ |
3573 |
05 Nov 15 |
olle |
name += ' [Exp. ' + Strings.encodeTags(expirationDate) + ']'; |
3573 |
05 Nov 15 |
olle |
629 |
} |
3573 |
05 Nov 15 |
olle |
var selected = (i == 0); |
3573 |
05 Nov 15 |
olle |
var option = new Option(name, kitName, selected, selected); |
3573 |
05 Nov 15 |
olle |
option.jsonKit = jsonKit; |
3573 |
05 Nov 15 |
olle |
libPrepKitList.options[libPrepKitList.length] = option; |
3573 |
05 Nov 15 |
olle |
634 |
} |
3573 |
05 Nov 15 |
olle |
libPrepKitList.options[0].selected = true; |
3573 |
05 Nov 15 |
olle |
636 |
} |
3573 |
05 Nov 15 |
olle |
else |
3573 |
05 Nov 15 |
olle |
638 |
{ |
3573 |
05 Nov 15 |
olle |
Wizard.setFatalError('No library preparation kits available.'); |
3573 |
05 Nov 15 |
olle |
return; |
3573 |
05 Nov 15 |
olle |
641 |
} |
3573 |
05 Nov 15 |
olle |
642 |
} |
3631 |
27 Nov 15 |
olle |
Doc.removeClass('gonext', 'disabled'); |
3631 |
27 Nov 15 |
olle |
// Enable manual select buttons after kit tables have been loaded |
3631 |
27 Nov 15 |
olle |
Doc.removeClass('btnManualSelectExtract', 'disabled'); |
3631 |
27 Nov 15 |
olle |
Doc.removeClass('btnManualSelectControl', 'disabled'); |
3631 |
27 Nov 15 |
olle |
Doc.removeClass('btnManualSelectReset', 'disabled'); |
3573 |
05 Nov 15 |
olle |
648 |
} |
3573 |
05 Nov 15 |
olle |
649 |
|
3582 |
06 Nov 15 |
olle |
selectdna.kitOnChange = function(event) |
3582 |
06 Nov 15 |
olle |
651 |
{ |
3582 |
06 Nov 15 |
olle |
var frm = document.forms['meludi']; |
3582 |
06 Nov 15 |
olle |
var target = event.currentTarget; |
3582 |
06 Nov 15 |
olle |
654 |
|
3582 |
06 Nov 15 |
olle |
var index = Data.int(target, 'index'); |
3582 |
06 Nov 15 |
olle |
656 |
|
3582 |
06 Nov 15 |
olle |
extraMaterialIsValid = true; |
3582 |
06 Nov 15 |
olle |
658 |
|
3582 |
06 Nov 15 |
olle |
selectedKitName = frm['uselibprepkit.'+index].value; |
3582 |
06 Nov 15 |
olle |
660 |
|
3582 |
06 Nov 15 |
olle |
// Reset all other radio buttons |
3582 |
06 Nov 15 |
olle |
for (var i=0; i < kitNum; i++) |
3582 |
06 Nov 15 |
olle |
663 |
{ |
3582 |
06 Nov 15 |
olle |
if (i != index) |
3582 |
06 Nov 15 |
olle |
665 |
{ |
3582 |
06 Nov 15 |
olle |
Doc.element('uselibprepkit.'+i).checked = false; |
3582 |
06 Nov 15 |
olle |
667 |
} |
3582 |
06 Nov 15 |
olle |
668 |
} |
3582 |
06 Nov 15 |
olle |
669 |
} |
3582 |
06 Nov 15 |
olle |
670 |
|
3573 |
05 Nov 15 |
olle |
selectdna.initializeStep4 = function(event) |
3449 |
28 Jul 15 |
olle |
672 |
{ |
3619 |
23 Nov 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var isNeoPrep = Data.int('page-data', 'is-neoprep'); |
3449 |
28 Jul 15 |
olle |
TOTAL_VOLUME = isNeoPrep ? 45 : 10; // µl |
3449 |
28 Jul 15 |
olle |
MINIMAL_DNA_VOLUME = 1.0; // µl |
3449 |
28 Jul 15 |
olle |
677 |
|
3573 |
05 Nov 15 |
olle |
Doc.show('step-4'); |
3449 |
28 Jul 15 |
olle |
679 |
|
3449 |
28 Jul 15 |
olle |
var url = '../Dna.servlet?ID='+App.getSessionId(); |
3449 |
28 Jul 15 |
olle |
url += '&cmd=GetStratagene'; |
3449 |
28 Jul 15 |
olle |
Wizard.asyncJsonRequest(url, selectdna.stratageneLoaded); |
3449 |
28 Jul 15 |
olle |
683 |
|
3619 |
23 Nov 15 |
olle |
Meludi.loadProtocols('LIBRARY_PROTOCOL', 'libraryPreparationProtocol'); |
3619 |
23 Nov 15 |
olle |
Doc.addClass('libraryPreparationProtocol', 'list-loading'); |
3619 |
23 Nov 15 |
olle |
frm.libraryPreparationProtocol[0] = new Option('loading...', ''); |
3619 |
23 Nov 15 |
olle |
687 |
|
3619 |
23 Nov 15 |
olle |
// Get library preparation protocol |
3619 |
23 Nov 15 |
olle |
var url = '../Protocol.servlet?ID='+App.getSessionId(); |
3619 |
23 Nov 15 |
olle |
url += '&cmd=GetProtocols&subtype=LIBRARY_PROTOCOL'; |
3619 |
23 Nov 15 |
olle |
Wizard.asyncJsonRequest(url, selectdna.protocolsLoaded); |
3619 |
23 Nov 15 |
olle |
692 |
|
3449 |
28 Jul 15 |
olle |
var url = '../Dna.servlet?ID='+App.getSessionId(); |
3449 |
28 Jul 15 |
olle |
url += '&cmd=GetNextAutoGeneratedPlateName'; |
3449 |
28 Jul 15 |
olle |
url += '&bioPlateType=' + (isNeoPrep ? 'NEOPREP' : 'DNA'); |
4200 |
01 Nov 16 |
olle |
url += '&bioPlatePrefix=' + startPlatePrefix; |
3449 |
28 Jul 15 |
olle |
Wizard.showLoadingAnimation('Loading next '+(isNeoPrep ? 'NeoPrep' : 'DNA') + ' plate'); |
3449 |
28 Jul 15 |
olle |
Wizard.asyncJsonRequest(url, selectdna.nextPlateNameLoaded); |
3449 |
28 Jul 15 |
olle |
699 |
|
3449 |
28 Jul 15 |
olle |
var url = '../LibPrep.servlet?ID='+App.getSessionId(); |
3449 |
28 Jul 15 |
olle |
url += '&cmd=GetAllBarcodeInfo'; |
3449 |
28 Jul 15 |
olle |
Wizard.asyncJsonRequest(url, selectdna.barcodesLoaded); |
3449 |
28 Jul 15 |
olle |
703 |
} |
3619 |
23 Nov 15 |
olle |
704 |
|
3619 |
23 Nov 15 |
olle |
selectdna.protocolsLoaded = function(response) |
3619 |
23 Nov 15 |
olle |
706 |
{ |
3619 |
23 Nov 15 |
olle |
var frm = document.forms['meludi']; |
3619 |
23 Nov 15 |
olle |
var protocols = response.protocols; |
3449 |
28 Jul 15 |
olle |
709 |
|
3619 |
23 Nov 15 |
olle |
Doc.removeClass('libraryPreparationProtocol', 'list-loading'); |
3619 |
23 Nov 15 |
olle |
frm.libraryPreparationProtocol.length = 0; |
3619 |
23 Nov 15 |
olle |
for (var i = 0; i < protocols.length; i++) |
3619 |
23 Nov 15 |
olle |
713 |
{ |
3619 |
23 Nov 15 |
olle |
var name = protocols[i].name; |
3619 |
23 Nov 15 |
olle |
var id = protocols[i].id; |
3619 |
23 Nov 15 |
olle |
protocolMap[id] = name; |
3619 |
23 Nov 15 |
olle |
frm.libraryPreparationProtocol[frm.libraryPreparationProtocol.length] = new Option(name, id, false, true); |
3619 |
23 Nov 15 |
olle |
718 |
} |
3619 |
23 Nov 15 |
olle |
frm.libraryPreparationProtocol[frm.libraryPreparationProtocol.length] = new Option('- none -', ''); |
3619 |
23 Nov 15 |
olle |
720 |
} |
3619 |
23 Nov 15 |
olle |
721 |
|
3449 |
28 Jul 15 |
olle |
selectdna.barcodesLoaded = function(response) |
3449 |
28 Jul 15 |
olle |
723 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var isNeoPrep = Data.int('page-data', 'is-neoprep'); |
3449 |
28 Jul 15 |
olle |
726 |
|
3449 |
28 Jul 15 |
olle |
var barcodes = response.barcodes; |
3449 |
28 Jul 15 |
olle |
var selectBarcodeHtml = ''; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < barcodes.length; i++) |
3449 |
28 Jul 15 |
olle |
730 |
{ |
3449 |
28 Jul 15 |
olle |
if (i % 8 == 0 && i > 0) |
3449 |
28 Jul 15 |
olle |
732 |
{ |
3449 |
28 Jul 15 |
olle |
selectBarcodeHtml += '<div class="menuseparator"></div>'; |
3449 |
28 Jul 15 |
olle |
734 |
} |
3449 |
28 Jul 15 |
olle |
var barcode = barcodes[i]; |
3449 |
28 Jul 15 |
olle |
barcodesByName[barcode.name] = barcode; |
3449 |
28 Jul 15 |
olle |
selectBarcodeHtml += '<div class="menuitem interactable enabled" id="bc-'+barcode.id+'" data-barcode-name="'+Strings.encodeTags(barcode.name)+'">'; |
3449 |
28 Jul 15 |
olle |
selectBarcodeHtml += Strings.encodeTags(barcode.name)+'</div>'; |
3449 |
28 Jul 15 |
olle |
739 |
} |
3449 |
28 Jul 15 |
olle |
Doc.element('select-barcode-all').innerHTML = selectBarcodeHtml; |
3461 |
30 Jul 15 |
olle |
741 |
|
3461 |
30 Jul 15 |
olle |
742 |
/* |
3449 |
28 Jul 15 |
olle |
selectdna.quantityOnChange(); |
3449 |
28 Jul 15 |
olle |
selectdna.warningLevelOnChange(); |
3449 |
28 Jul 15 |
olle |
745 |
|
3449 |
28 Jul 15 |
olle |
// Init plate, pool schema and barcode variants |
3449 |
28 Jul 15 |
olle |
graphics = new jsGraphics(Doc.element('canvas')); |
3449 |
28 Jul 15 |
olle |
pen = new jsPen(new jsColor('#2288AA'), 2); |
3449 |
28 Jul 15 |
olle |
var columns = isNeoPrep ? 2 : 12; |
3449 |
28 Jul 15 |
olle |
var rows = 8; |
3449 |
28 Jul 15 |
olle |
var schema = PoolSchema.initList(frm.pool_schema, null, isNeoPrep ? 'neoprep' : 'manual'); |
3449 |
28 Jul 15 |
olle |
Plate.init(rows, columns, schema, WellPainter); |
3449 |
28 Jul 15 |
olle |
Events.sendChangeEvent(frm.pool_schema); |
3449 |
28 Jul 15 |
olle |
// Set default for showing info for plate well |
3449 |
28 Jul 15 |
olle |
selectdna.setDefaultInfo('location'); |
3461 |
30 Jul 15 |
olle |
//selectdna.setDefaultInfo('quantity'); |
3449 |
28 Jul 15 |
olle |
selectdna.setDefaultInfo('volumes'); |
3449 |
28 Jul 15 |
olle |
selectdna.setDefaultInfo('quality-score'); |
3449 |
28 Jul 15 |
olle |
selectdna.setDefaultInfo('qubitconc'); |
3461 |
30 Jul 15 |
olle |
//selectdna.setDefaultInfo('qiacube-date'); |
3449 |
28 Jul 15 |
olle |
761 |
|
3449 |
28 Jul 15 |
olle |
// Pre-fill plate wells with selected DNA |
3449 |
28 Jul 15 |
olle |
if (names.length > 0) |
3449 |
28 Jul 15 |
olle |
764 |
{ |
3449 |
28 Jul 15 |
olle |
Dna.loadInfoByNames(names); |
3449 |
28 Jul 15 |
olle |
766 |
|
3449 |
28 Jul 15 |
olle |
var wellsArray = []; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < names.length; i++) |
3449 |
28 Jul 15 |
olle |
769 |
{ |
3449 |
28 Jul 15 |
olle |
var row = i % 8; |
3449 |
28 Jul 15 |
olle |
var column = Math.floor(i/8) |
3449 |
28 Jul 15 |
olle |
var well = Plate.getWell(row, column); |
3449 |
28 Jul 15 |
olle |
wellsArray[i] = well; |
3449 |
28 Jul 15 |
olle |
var name = names[i]; |
3449 |
28 Jul 15 |
olle |
// Create a new DNA object |
3449 |
28 Jul 15 |
olle |
var dna = Dna.createByName(name); |
3449 |
28 Jul 15 |
olle |
dna.name = name + '.fpa'; |
3449 |
28 Jul 15 |
olle |
Dna.unflag(dna); |
3449 |
28 Jul 15 |
olle |
well.setExtract(dna); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
// Place FPB sample in corresponding well on right side of plate |
3449 |
28 Jul 15 |
olle |
well = Plate.getWell(row, column + 6); |
3449 |
28 Jul 15 |
olle |
wellsArray[i+names.length] = well; |
3449 |
28 Jul 15 |
olle |
// Create a new DNA object |
3449 |
28 Jul 15 |
olle |
dna = Dna.createByName(name); |
3449 |
28 Jul 15 |
olle |
dna.name = name + '.fpb'; |
3449 |
28 Jul 15 |
olle |
Dna.unflag(dna); |
3449 |
28 Jul 15 |
olle |
well.setExtract(dna); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
790 |
} |
3449 |
28 Jul 15 |
olle |
Plate.checkReplicates(); |
3449 |
28 Jul 15 |
olle |
Plate.paint(wellsArray); |
3449 |
28 Jul 15 |
olle |
selectdna.updateNumFlaggedDna(); |
3449 |
28 Jul 15 |
olle |
names = []; |
3449 |
28 Jul 15 |
olle |
795 |
} |
3449 |
28 Jul 15 |
olle |
796 |
// |
3449 |
28 Jul 15 |
olle |
Doc.show('step-3'); |
3449 |
28 Jul 15 |
olle |
Doc.show('gocancel'); |
3449 |
28 Jul 15 |
olle |
Doc.show('goregister'); |
3590 |
11 Nov 15 |
olle |
Doc.show('gocreate'); |
3449 |
28 Jul 15 |
olle |
Wizard.setNoConfirmOnFirstStep(false); |
3449 |
28 Jul 15 |
olle |
Wizard.keepSessionAlive(); |
3461 |
30 Jul 15 |
olle |
803 |
*/ |
3449 |
28 Jul 15 |
olle |
804 |
} |
3449 |
28 Jul 15 |
olle |
805 |
|
3449 |
28 Jul 15 |
olle |
selectdna.stratageneLoaded = function(response) |
3449 |
28 Jul 15 |
olle |
807 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var stratagene = response.stratagene; |
3449 |
28 Jul 15 |
olle |
810 |
|
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < stratagene.length; i++) |
3449 |
28 Jul 15 |
olle |
812 |
{ |
3449 |
28 Jul 15 |
olle |
var s = stratagene[i]; |
3449 |
28 Jul 15 |
olle |
var name = s.name; |
3449 |
28 Jul 15 |
olle |
if (s.bioWell) |
3449 |
28 Jul 15 |
olle |
816 |
{ |
3449 |
28 Jul 15 |
olle |
name += ' -- ' + s.bioWell.bioPlate.name + ' ('+s.bioWell.location + ')'; |
3449 |
28 Jul 15 |
olle |
818 |
} |
3449 |
28 Jul 15 |
olle |
frm.stratagene[frm.stratagene.length] = new Option(name, s.name); |
3449 |
28 Jul 15 |
olle |
820 |
} |
3449 |
28 Jul 15 |
olle |
821 |
} |
3449 |
28 Jul 15 |
olle |
822 |
|
3449 |
28 Jul 15 |
olle |
selectdna.nextPlateNameLoaded = function(response) |
3449 |
28 Jul 15 |
olle |
824 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3461 |
30 Jul 15 |
olle |
var isNeoPrep = Data.int('page-data', 'is-neoprep'); |
3449 |
28 Jul 15 |
olle |
Plate.name = response.name; |
3449 |
28 Jul 15 |
olle |
828 |
/* |
3449 |
28 Jul 15 |
olle |
Doc.element('plateName').innerHTML = Strings.encodeTags(Plate.name); |
3449 |
28 Jul 15 |
olle |
830 |
*/ |
3449 |
28 Jul 15 |
olle |
frm.plateName.value = Strings.encodeTags(Plate.name); |
3449 |
28 Jul 15 |
olle |
plateNameIsValid = true; |
3449 |
28 Jul 15 |
olle |
Wizard.setInputStatus('plateName', 'valid'); |
3461 |
30 Jul 15 |
olle |
834 |
|
3573 |
05 Nov 15 |
olle |
// Get library preparation kit to use |
3573 |
05 Nov 15 |
olle |
var kitName = 'None selected'; |
3573 |
05 Nov 15 |
olle |
var jsonKit = {}; |
3573 |
05 Nov 15 |
olle |
for (var i = 0; i < frm.libPrepKit.length; i++) |
3461 |
30 Jul 15 |
olle |
839 |
{ |
3582 |
06 Nov 15 |
olle |
840 |
/* |
3573 |
05 Nov 15 |
olle |
if (frm.libPrepKit[i].selected) |
3461 |
30 Jul 15 |
olle |
842 |
{ |
3573 |
05 Nov 15 |
olle |
kitName = frm.libPrepKit[i].value; |
3573 |
05 Nov 15 |
olle |
jsonKit = frm.libPrepKit[i].jsonKit; |
3461 |
30 Jul 15 |
olle |
845 |
} |
3582 |
06 Nov 15 |
olle |
846 |
*/ |
3582 |
06 Nov 15 |
olle |
if (frm.libPrepKit[i].value == selectedKitName) |
3582 |
06 Nov 15 |
olle |
848 |
{ |
3582 |
06 Nov 15 |
olle |
kitName = frm.libPrepKit[i].value; |
3582 |
06 Nov 15 |
olle |
jsonKit = frm.libPrepKit[i].jsonKit; |
3582 |
06 Nov 15 |
olle |
851 |
} |
3461 |
30 Jul 15 |
olle |
852 |
} |
3573 |
05 Nov 15 |
olle |
var expirationDate = jsonKit['expirationDate']; |
3573 |
05 Nov 15 |
olle |
var numTimesUsed = jsonKit['numTimesUsed']; |
3573 |
05 Nov 15 |
olle |
var unusedWellsJsonArr = jsonKit['unusedWells']; |
3573 |
05 Nov 15 |
olle |
var reservedWellsJsonArr = jsonKit['reservedWells']; |
3573 |
05 Nov 15 |
olle |
var numUnusedWells = jsonKit['numUnusedWells']; |
3573 |
05 Nov 15 |
olle |
//alert("select_dna_for_start_plate.js::nextPlateNameLoaded(): numItems = " + numItems + " kitName = " + kitName + " unusedWellsJsonArr = " + JSON.stringify(unusedWellsJsonArr) + " reservedWellsJsonArr = " + JSON.stringify(reservedWellsJsonArr)); |
3573 |
05 Nov 15 |
olle |
//alert("select_dna_for_start_plate.js::nextPlateNameLoaded(): numItems = " + numItems + " kitName = " + kitName + " reservedWellsJsonArr = " + JSON.stringify(reservedWellsJsonArr)); |
3621 |
25 Nov 15 |
olle |
//alert("select_dna_for_start_plate.js::nextPlateNameLoaded(): kitName = " + kitName + " kitId = " + jsonKit['id']); |
3573 |
05 Nov 15 |
olle |
861 |
// |
3685 |
12 Jan 16 |
olle |
frm.tsLibPrepKit.value = kitName; |
3685 |
12 Jan 16 |
olle |
frm.tsLibPrepKit.disabled = true; |
3621 |
25 Nov 15 |
olle |
frm.hiddenLibPrepKitId.value = jsonKit['id']; |
3573 |
05 Nov 15 |
olle |
865 |
|
3461 |
30 Jul 15 |
olle |
// Place pre-selected DNA on plate |
3461 |
30 Jul 15 |
olle |
selectdna.quantityOnChange(); |
3461 |
30 Jul 15 |
olle |
selectdna.warningLevelOnChange(); |
3461 |
30 Jul 15 |
olle |
869 |
|
3461 |
30 Jul 15 |
olle |
// Init plate, pool schema and barcode variants |
3461 |
30 Jul 15 |
olle |
graphics = new jsGraphics(Doc.element('canvas')); |
3461 |
30 Jul 15 |
olle |
pen = new jsPen(new jsColor('#2288AA'), 2); |
3461 |
30 Jul 15 |
olle |
var columns = isNeoPrep ? 2 : 12; |
3461 |
30 Jul 15 |
olle |
var rows = 8; |
3596 |
12 Nov 15 |
olle |
// Disable pool schema menu |
3596 |
12 Nov 15 |
olle |
frm.pool_schema.disabled = true; |
3461 |
30 Jul 15 |
olle |
var schema = PoolSchema.initList(frm.pool_schema, null, isNeoPrep ? 'neoprep' : 'manual'); |
3461 |
30 Jul 15 |
olle |
Plate.init(rows, columns, schema, WellPainter); |
3461 |
30 Jul 15 |
olle |
Events.sendChangeEvent(frm.pool_schema); |
3461 |
30 Jul 15 |
olle |
// Set default for showing info for plate well |
3461 |
30 Jul 15 |
olle |
selectdna.setDefaultInfo('location'); |
3461 |
30 Jul 15 |
olle |
//selectdna.setDefaultInfo('quantity'); |
3461 |
30 Jul 15 |
olle |
selectdna.setDefaultInfo('volumes'); |
3461 |
30 Jul 15 |
olle |
selectdna.setDefaultInfo('quality-score'); |
3461 |
30 Jul 15 |
olle |
selectdna.setDefaultInfo('qubitconc'); |
3461 |
30 Jul 15 |
olle |
//selectdna.setDefaultInfo('qiacube-date'); |
3461 |
30 Jul 15 |
olle |
887 |
|
3461 |
30 Jul 15 |
olle |
// Pre-fill plate wells with selected DNA |
3461 |
30 Jul 15 |
olle |
if (names.length > 0) |
3461 |
30 Jul 15 |
olle |
890 |
{ |
3461 |
30 Jul 15 |
olle |
Dna.loadInfoByNames(names); |
3461 |
30 Jul 15 |
olle |
892 |
|
3667 |
15 Dec 15 |
olle |
var wellsArray = []; |
3667 |
15 Dec 15 |
olle |
// FPA half |
3461 |
30 Jul 15 |
olle |
for (var i = 0; i < names.length; i++) |
3461 |
30 Jul 15 |
olle |
896 |
{ |
3573 |
05 Nov 15 |
olle |
var wellStr = reservedWellsJsonArr[i]; |
3573 |
05 Nov 15 |
olle |
var row = selectdna.wellStrToRow(wellStr); |
3573 |
05 Nov 15 |
olle |
var column = selectdna.wellStrToCol(wellStr); |
3461 |
30 Jul 15 |
olle |
var well = Plate.getWell(row, column); |
3461 |
30 Jul 15 |
olle |
var name = names[i]; |
3461 |
30 Jul 15 |
olle |
// Create a new DNA object |
3667 |
15 Dec 15 |
olle |
var dna = Dna.createByParentName(name, name + '.fpa'); |
3461 |
30 Jul 15 |
olle |
Dna.unflag(dna); |
3461 |
30 Jul 15 |
olle |
well.setExtract(dna); |
3461 |
30 Jul 15 |
olle |
well.selected = false; |
3667 |
15 Dec 15 |
olle |
wellsArray[i] = well; |
3667 |
15 Dec 15 |
olle |
908 |
} |
3667 |
15 Dec 15 |
olle |
// FPB half |
3667 |
15 Dec 15 |
olle |
for (var i = 0; i < names.length; i++) |
3667 |
15 Dec 15 |
olle |
911 |
{ |
3667 |
15 Dec 15 |
olle |
var wellStr = reservedWellsJsonArr[i]; |
3667 |
15 Dec 15 |
olle |
var row = selectdna.wellStrToRow(wellStr); |
3667 |
15 Dec 15 |
olle |
var column = selectdna.wellStrToCol(wellStr); |
3461 |
30 Jul 15 |
olle |
// Place FPB sample in corresponding well on right side of plate |
3667 |
15 Dec 15 |
olle |
var well = Plate.getWell(row, column + 6); |
3667 |
15 Dec 15 |
olle |
var name = names[i]; |
3461 |
30 Jul 15 |
olle |
// Create a new DNA object |
3667 |
15 Dec 15 |
olle |
var dna = Dna.createByParentName(name, name + '.fpb'); |
3461 |
30 Jul 15 |
olle |
Dna.unflag(dna); |
3461 |
30 Jul 15 |
olle |
well.setExtract(dna); |
3461 |
30 Jul 15 |
olle |
well.selected = false; |
3667 |
15 Dec 15 |
olle |
wellsArray[i+names.length] = well; |
3667 |
15 Dec 15 |
olle |
924 |
} |
3461 |
30 Jul 15 |
olle |
Plate.checkReplicates(); |
3461 |
30 Jul 15 |
olle |
Plate.paint(wellsArray); |
3461 |
30 Jul 15 |
olle |
selectdna.updateNumFlaggedDna(); |
3461 |
30 Jul 15 |
olle |
names = []; |
3461 |
30 Jul 15 |
olle |
929 |
} |
3461 |
30 Jul 15 |
olle |
930 |
// |
3461 |
30 Jul 15 |
olle |
Doc.show('step-3'); |
3461 |
30 Jul 15 |
olle |
Doc.show('gocancel'); |
3461 |
30 Jul 15 |
olle |
Doc.show('goregister'); |
3590 |
11 Nov 15 |
olle |
Doc.show('gocreate'); |
3461 |
30 Jul 15 |
olle |
Wizard.setNoConfirmOnFirstStep(false); |
3461 |
30 Jul 15 |
olle |
Wizard.keepSessionAlive(); |
3449 |
28 Jul 15 |
olle |
937 |
} |
3573 |
05 Nov 15 |
olle |
938 |
|
3573 |
05 Nov 15 |
olle |
selectdna.wellStrToRow = function(wellStr) |
3573 |
05 Nov 15 |
olle |
940 |
{ |
3573 |
05 Nov 15 |
olle |
// Get first letter |
3573 |
05 Nov 15 |
olle |
var rowStr = wellStr.substring(0,1); |
3573 |
05 Nov 15 |
olle |
var row = jsonRowIndex[rowStr]; |
3573 |
05 Nov 15 |
olle |
return row; |
3573 |
05 Nov 15 |
olle |
945 |
} |
3573 |
05 Nov 15 |
olle |
946 |
|
3573 |
05 Nov 15 |
olle |
selectdna.wellStrToCol = function(wellStr) |
3573 |
05 Nov 15 |
olle |
948 |
{ |
3573 |
05 Nov 15 |
olle |
// Get column string; |
3573 |
05 Nov 15 |
olle |
var colStr = wellStr.substring(1,3); |
3573 |
05 Nov 15 |
olle |
var col = jsonColIndex[colStr]; |
3573 |
05 Nov 15 |
olle |
return col; |
3573 |
05 Nov 15 |
olle |
953 |
} |
3573 |
05 Nov 15 |
olle |
954 |
|
3590 |
11 Nov 15 |
olle |
selectdna.wellRowColumnToWellStr = function(row, column) |
3590 |
11 Nov 15 |
olle |
956 |
{ |
3590 |
11 Nov 15 |
olle |
// Get well string (row letter + column number, 1-based) |
3590 |
11 Nov 15 |
olle |
var wellStr = jsonRowLetter[row] + jsonColNumber[column]; |
3590 |
11 Nov 15 |
olle |
return wellStr; |
3590 |
11 Nov 15 |
olle |
960 |
} |
3590 |
11 Nov 15 |
olle |
961 |
|
3449 |
28 Jul 15 |
olle |
selectdna.plateNameOnChange = function(event) |
3449 |
28 Jul 15 |
olle |
963 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
plateNameIsValid = false; |
3449 |
28 Jul 15 |
olle |
966 |
|
3449 |
28 Jul 15 |
olle |
var name = frm.plateName.value; |
3449 |
28 Jul 15 |
olle |
if (!name || name == '') |
3449 |
28 Jul 15 |
olle |
969 |
{ |
3449 |
28 Jul 15 |
olle |
Wizard.setInputStatus('plateName', 'invalid', 'Missing name'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
972 |
} |
3449 |
28 Jul 15 |
olle |
if (name.indexOf("LP") != 0) |
3449 |
28 Jul 15 |
olle |
974 |
{ |
3449 |
28 Jul 15 |
olle |
Wizard.setInputStatus('plateName', 'invalid', 'Plate name must start with prefix "LP"'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
977 |
} |
3449 |
28 Jul 15 |
olle |
if (name.length != 7) |
3449 |
28 Jul 15 |
olle |
979 |
{ |
3449 |
28 Jul 15 |
olle |
Wizard.setInputStatus('plateName', 'invalid', 'Plate name must consist of "LP" + 5 digits'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
982 |
} |
3449 |
28 Jul 15 |
olle |
983 |
|
3449 |
28 Jul 15 |
olle |
// Check if name exists |
3449 |
28 Jul 15 |
olle |
var url = '../Extraction.servlet?ID='+App.getSessionId(); |
3449 |
28 Jul 15 |
olle |
url += '&cmd=CheckIfStartPlateNameUsed'; |
3449 |
28 Jul 15 |
olle |
url += '&startPlateName=' + encodeURIComponent(name); |
3449 |
28 Jul 15 |
olle |
988 |
|
3449 |
28 Jul 15 |
olle |
Wizard.showLoadingAnimation('Loading information about plate...'); |
3449 |
28 Jul 15 |
olle |
Wizard.asyncJsonRequest(url, selectdna.plateInfoLoaded); |
3449 |
28 Jul 15 |
olle |
991 |
} |
3449 |
28 Jul 15 |
olle |
992 |
|
3449 |
28 Jul 15 |
olle |
selectdna.plateInfoLoaded = function(response) |
3449 |
28 Jul 15 |
olle |
994 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var plateInfo = response.startplate; |
3449 |
28 Jul 15 |
olle |
if (plateInfo) |
3449 |
28 Jul 15 |
olle |
998 |
{ |
3449 |
28 Jul 15 |
olle |
var plateName = plateInfo.name; |
3449 |
28 Jul 15 |
olle |
var plateId = plateInfo.id; |
3449 |
28 Jul 15 |
olle |
1001 |
|
3449 |
28 Jul 15 |
olle |
if (plateId) |
3449 |
28 Jul 15 |
olle |
1003 |
{ |
3449 |
28 Jul 15 |
olle |
plateNameIsValid = false; |
3449 |
28 Jul 15 |
olle |
Wizard.setInputStatus('plateName', 'invalid', 'Plate already exists with name "' + plateName + '" (ID = ' + plateId + ')'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1007 |
} |
3449 |
28 Jul 15 |
olle |
1008 |
} |
3449 |
28 Jul 15 |
olle |
plateNameIsValid = true; |
3675 |
18 Dec 15 |
olle |
Plate.name = plateInfo.name; |
3449 |
28 Jul 15 |
olle |
1011 |
|
3449 |
28 Jul 15 |
olle |
Wizard.setInputStatus('plateName', 'valid'); |
3449 |
28 Jul 15 |
olle |
1013 |
} |
3449 |
28 Jul 15 |
olle |
1014 |
|
3449 |
28 Jul 15 |
olle |
selectdna.quantityOnChange = function(event) |
3449 |
28 Jul 15 |
olle |
1016 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
quantitiesAreValid = false; |
3617 |
23 Nov 15 |
olle |
1019 |
|
3617 |
23 Nov 15 |
olle |
1020 |
/* |
3449 |
28 Jul 15 |
olle |
var qRegular = parseFloat(frm.quantity_regular.value); |
3449 |
28 Jul 15 |
olle |
if (!(qRegular > 0)) |
3449 |
28 Jul 15 |
olle |
1023 |
{ |
3449 |
28 Jul 15 |
olle |
Wizard.setInputStatus('quantities', 'invalid', 'Amount must be ≥ 0.'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1026 |
} |
3617 |
23 Nov 15 |
olle |
1027 |
*/ |
3596 |
12 Nov 15 |
olle |
1028 |
/* |
3449 |
28 Jul 15 |
olle |
var qQc = parseFloat(frm.quantity_qc.value); |
3449 |
28 Jul 15 |
olle |
if (!(qQc > qRegular)) |
3449 |
28 Jul 15 |
olle |
1031 |
{ |
3449 |
28 Jul 15 |
olle |
Wizard.setInputStatus('quantities', 'invalid', 'Amount QC must be > ' + qRegular + '.'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1034 |
} |
3596 |
12 Nov 15 |
olle |
1035 |
*/ |
3449 |
28 Jul 15 |
olle |
1036 |
|
3449 |
28 Jul 15 |
olle |
quantitiesAreValid = true; |
3617 |
23 Nov 15 |
olle |
1038 |
/* |
3449 |
28 Jul 15 |
olle |
QUANTITY_REGULAR = qRegular; |
3617 |
23 Nov 15 |
olle |
1040 |
*/ |
3596 |
12 Nov 15 |
olle |
1041 |
/* |
3449 |
28 Jul 15 |
olle |
QUANTITY_QC = qQc; |
3596 |
12 Nov 15 |
olle |
1043 |
*/ |
3617 |
23 Nov 15 |
olle |
1044 |
|
3617 |
23 Nov 15 |
olle |
1045 |
/* |
3449 |
28 Jul 15 |
olle |
Wizard.setInputStatus('quantities', 'valid'); |
3617 |
23 Nov 15 |
olle |
1047 |
*/ |
3449 |
28 Jul 15 |
olle |
if (event) Plate.paint(Plate.getWells()); |
3449 |
28 Jul 15 |
olle |
1049 |
} |
3449 |
28 Jul 15 |
olle |
1050 |
|
3617 |
23 Nov 15 |
olle |
selectdna.minVolDnaOnChange = function(event) |
3617 |
23 Nov 15 |
olle |
1052 |
{ |
3617 |
23 Nov 15 |
olle |
var frm = document.forms['meludi']; |
3617 |
23 Nov 15 |
olle |
quantitiesAreValid = false; |
3617 |
23 Nov 15 |
olle |
1055 |
|
3617 |
23 Nov 15 |
olle |
var minVolDna = parseFloat(frm.min_vol_dna.value); |
3617 |
23 Nov 15 |
olle |
if (!(minVolDna > 0)) |
3617 |
23 Nov 15 |
olle |
1058 |
{ |
3617 |
23 Nov 15 |
olle |
Wizard.setInputStatus('min_vol_dna', 'invalid', 'Amount must be ≥ 0.'); |
3617 |
23 Nov 15 |
olle |
return; |
3617 |
23 Nov 15 |
olle |
1061 |
} |
3617 |
23 Nov 15 |
olle |
1062 |
|
3617 |
23 Nov 15 |
olle |
quantitiesAreValid = true; |
3617 |
23 Nov 15 |
olle |
MINIMAL_DNA_VOLUME = minVolDna; |
3617 |
23 Nov 15 |
olle |
1065 |
|
3617 |
23 Nov 15 |
olle |
Wizard.setInputStatus('min_vol_dna', 'valid'); |
3617 |
23 Nov 15 |
olle |
if (event) Plate.paint(Plate.getWells()); |
3617 |
23 Nov 15 |
olle |
1068 |
} |
3617 |
23 Nov 15 |
olle |
1069 |
|
3449 |
28 Jul 15 |
olle |
selectdna.warningLevelOnChange = function(event) |
3449 |
28 Jul 15 |
olle |
1071 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
1073 |
|
3449 |
28 Jul 15 |
olle |
1074 |
/* |
3449 |
28 Jul 15 |
olle |
var wQuantity = parseFloat(frm.warning_quantity.value); |
3449 |
28 Jul 15 |
olle |
if (!(wQuantity > 0)) |
3449 |
28 Jul 15 |
olle |
1077 |
{ |
3449 |
28 Jul 15 |
olle |
Wizard.setInputStatus('warnings', 'invalid', 'Remaining quantity must be ≥ 0.'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1080 |
} |
3449 |
28 Jul 15 |
olle |
1081 |
*/ |
3449 |
28 Jul 15 |
olle |
var wQualityScore = parseFloat(frm.warning_quality_score.value); |
3449 |
28 Jul 15 |
olle |
1083 |
|
3449 |
28 Jul 15 |
olle |
1084 |
/* |
3449 |
28 Jul 15 |
olle |
LOW_QUANTITY_WARNING_LIMIT = wQuantity; |
3449 |
28 Jul 15 |
olle |
1086 |
*/ |
3449 |
28 Jul 15 |
olle |
QUALITY_SCORE_WARNING_LIMIT = wQualityScore; |
3449 |
28 Jul 15 |
olle |
1088 |
|
3449 |
28 Jul 15 |
olle |
Wizard.setInputStatus('warnings', 'valid'); |
3449 |
28 Jul 15 |
olle |
if (event) Plate.paint(Plate.getWells()); |
3449 |
28 Jul 15 |
olle |
1091 |
} |
3449 |
28 Jul 15 |
olle |
1092 |
|
3449 |
28 Jul 15 |
olle |
selectdna.poolSchemaOnChange = function() |
3449 |
28 Jul 15 |
olle |
1094 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var schema = PoolSchema.getById(frm.pool_schema.value); |
3449 |
28 Jul 15 |
olle |
Plate.setPoolSchema(schema); |
3449 |
28 Jul 15 |
olle |
1098 |
|
3449 |
28 Jul 15 |
olle |
var isNeoPrep = Data.int('page-data', 'is-neoprep'); |
3449 |
28 Jul 15 |
olle |
if (isNeoPrep) |
3449 |
28 Jul 15 |
olle |
1101 |
{ |
3449 |
28 Jul 15 |
olle |
PoolSchema.buildPoolTableRow(schema, Plate.columns, true, '<td class="barcode-fill barcode-left"></td>', '<th></th><td class="barcode-fill barcode-right"></td>'); |
3449 |
28 Jul 15 |
olle |
PoolSchema.initVariantList(frm.barcode_variant, schema); |
3449 |
28 Jul 15 |
olle |
Events.sendChangeEvent(frm.barcode_variant); |
3449 |
28 Jul 15 |
olle |
1105 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
1107 |
{ |
3449 |
28 Jul 15 |
olle |
PoolSchema.buildPoolTableRow(schema, Plate.columns, true); |
3449 |
28 Jul 15 |
olle |
Plate.paint(Plate.getWells()); |
3449 |
28 Jul 15 |
olle |
1110 |
} |
3449 |
28 Jul 15 |
olle |
1111 |
} |
3449 |
28 Jul 15 |
olle |
1112 |
|
3449 |
28 Jul 15 |
olle |
selectdna.barcodeVariantOnChange = function() |
3449 |
28 Jul 15 |
olle |
1114 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var schema = PoolSchema.getById(frm.pool_schema.value); |
3449 |
28 Jul 15 |
olle |
var barcodeVariant = PoolSchema.getBarcodeVariantByName(schema, frm.barcode_variant.value); |
3449 |
28 Jul 15 |
olle |
1118 |
|
3449 |
28 Jul 15 |
olle |
selectdna.assignSchemaDefinedBarcodeVariant(schema, barcodeVariant); |
3449 |
28 Jul 15 |
olle |
WellPainter.barcodeVariant = barcodeVariant; |
3449 |
28 Jul 15 |
olle |
Plate.paint(Plate.getWells()); |
3449 |
28 Jul 15 |
olle |
1122 |
} |
3449 |
28 Jul 15 |
olle |
1123 |
|
3449 |
28 Jul 15 |
olle |
selectdna.assignSchemaDefinedBarcodeVariant = function(schema, barcodeVariant) |
3449 |
28 Jul 15 |
olle |
1125 |
{ |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getWells(); |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1128 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
1130 |
|
3449 |
28 Jul 15 |
olle |
var indexSet = barcodeVariant ? barcodeVariant.indexSets[well.column] : null; |
3449 |
28 Jul 15 |
olle |
var barcode = null; |
3449 |
28 Jul 15 |
olle |
if (indexSet) |
3449 |
28 Jul 15 |
olle |
1134 |
{ |
3449 |
28 Jul 15 |
olle |
var barcodeName = indexSet.barcodes[well.row]; |
3449 |
28 Jul 15 |
olle |
barcode = barcodesByName[barcodeName]; |
3449 |
28 Jul 15 |
olle |
1137 |
} |
3449 |
28 Jul 15 |
olle |
well.barcode = barcode; |
3449 |
28 Jul 15 |
olle |
well.defaultBarcode = barcode; |
3449 |
28 Jul 15 |
olle |
well.duplicate = false; |
3449 |
28 Jul 15 |
olle |
1141 |
} |
3449 |
28 Jul 15 |
olle |
1142 |
} |
3449 |
28 Jul 15 |
olle |
1143 |
|
3449 |
28 Jul 15 |
olle |
var currentWell; |
3449 |
28 Jul 15 |
olle |
var lastSelectedBarcode; |
3449 |
28 Jul 15 |
olle |
selectdna.selectBarcode = function(event) |
3449 |
28 Jul 15 |
olle |
1147 |
{ |
3449 |
28 Jul 15 |
olle |
var row = Data.int(event.currentTarget, 'row'); |
3449 |
28 Jul 15 |
olle |
var column = Data.int(event.currentTarget, 'col'); |
3449 |
28 Jul 15 |
olle |
1150 |
|
3449 |
28 Jul 15 |
olle |
// Locate the barcode selection div so that the current |
3449 |
28 Jul 15 |
olle |
// barcode is positioned next to the current mouse position |
3449 |
28 Jul 15 |
olle |
// Initially set it to the right of the mouse so that the |
3449 |
28 Jul 15 |
olle |
// center is vertically aligned |
3449 |
28 Jul 15 |
olle |
currentWell = Plate.getWell(row, column); |
3449 |
28 Jul 15 |
olle |
var scroll = 0; |
3449 |
28 Jul 15 |
olle |
1157 |
|
3449 |
28 Jul 15 |
olle |
// Reset 'current' selection |
3449 |
28 Jul 15 |
olle |
var menu = Doc.element('select-barcode'); |
3449 |
28 Jul 15 |
olle |
var selectAll = Doc.element('select-barcode-all'); |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < selectAll.childNodes.length; i++) |
3449 |
28 Jul 15 |
olle |
1162 |
{ |
3449 |
28 Jul 15 |
olle |
Doc.removeClass(selectAll.childNodes[i], 'current'); |
3449 |
28 Jul 15 |
olle |
1164 |
} |
3449 |
28 Jul 15 |
olle |
menu.style.display = 'block'; |
3449 |
28 Jul 15 |
olle |
1166 |
|
3449 |
28 Jul 15 |
olle |
var x = event.clientX+1; |
3449 |
28 Jul 15 |
olle |
var halfHeight = Math.floor(selectAll.offsetHeight/2) |
3449 |
28 Jul 15 |
olle |
var y = event.clientY-halfHeight; |
3449 |
28 Jul 15 |
olle |
var scroll = 0; |
3449 |
28 Jul 15 |
olle |
var barcodeDiv; |
3449 |
28 Jul 15 |
olle |
1172 |
|
3449 |
28 Jul 15 |
olle |
var useBarcode = currentWell.barcode || lastSelectedBarcode; |
3449 |
28 Jul 15 |
olle |
if (useBarcode) |
3449 |
28 Jul 15 |
olle |
1175 |
{ |
3449 |
28 Jul 15 |
olle |
var barcodeDiv = Doc.element('bc-'+useBarcode.id); |
3449 |
28 Jul 15 |
olle |
if (!currentWell.barcode && barcodeDiv.nextSibling) barcodeDiv = barcodeDiv.nextSibling; |
3449 |
28 Jul 15 |
olle |
// Try to scroll the current barcode so that it's baseline is at the center of the div |
3449 |
28 Jul 15 |
olle |
scroll = barcodeDiv.offsetTop + barcodeDiv.offsetHeight - halfHeight; |
3449 |
28 Jul 15 |
olle |
if (scroll < 0) |
3449 |
28 Jul 15 |
olle |
1181 |
{ |
3449 |
28 Jul 15 |
olle |
// We get a negative scroll for the first few elements, shift the |
3449 |
28 Jul 15 |
olle |
// entire selection div down instead |
3449 |
28 Jul 15 |
olle |
y -= scroll; |
3449 |
28 Jul 15 |
olle |
scroll = 0; |
3449 |
28 Jul 15 |
olle |
1186 |
} |
3449 |
28 Jul 15 |
olle |
else if (scroll > selectAll.scrollHeight - selectAll.offsetHeight) |
3449 |
28 Jul 15 |
olle |
1188 |
{ |
3449 |
28 Jul 15 |
olle |
// We get a too large scroll value for the last few elements, shift |
3449 |
28 Jul 15 |
olle |
// the entire selection div up instead |
3449 |
28 Jul 15 |
olle |
y -= scroll - (selectAll.scrollHeight - selectAll.offsetHeight); |
3449 |
28 Jul 15 |
olle |
scroll = selectAll.scrollHeight - selectAll.offsetHeight; |
3449 |
28 Jul 15 |
olle |
1193 |
} |
3449 |
28 Jul 15 |
olle |
if (currentWell.barcode) |
3449 |
28 Jul 15 |
olle |
1195 |
{ |
3449 |
28 Jul 15 |
olle |
Doc.addClass(barcodeDiv, 'current'); |
3449 |
28 Jul 15 |
olle |
1197 |
} |
3449 |
28 Jul 15 |
olle |
1198 |
} |
3449 |
28 Jul 15 |
olle |
1199 |
|
3449 |
28 Jul 15 |
olle |
// Default barcode |
3449 |
28 Jul 15 |
olle |
if (currentWell.defaultBarcode && currentWell.defaultBarcode != currentWell.barcode) |
3449 |
28 Jul 15 |
olle |
1202 |
{ |
3449 |
28 Jul 15 |
olle |
var selectDefault = Doc.element('select-barcode-default'); |
3449 |
28 Jul 15 |
olle |
Data.set(selectDefault, 'barcode-name', currentWell.defaultBarcode.name); |
3449 |
28 Jul 15 |
olle |
selectDefault.innerHTML = 'Default: ' + Strings.encodeTags(currentWell.defaultBarcode.name); |
3449 |
28 Jul 15 |
olle |
Doc.show('select-barcode-default'); |
3449 |
28 Jul 15 |
olle |
Doc.show('select-barcode-default-separator'); |
3449 |
28 Jul 15 |
olle |
1208 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
1210 |
{ |
3449 |
28 Jul 15 |
olle |
Doc.hide('select-barcode-default'); |
3449 |
28 Jul 15 |
olle |
Doc.hide('select-barcode-default-separator'); |
3449 |
28 Jul 15 |
olle |
1213 |
} |
3449 |
28 Jul 15 |
olle |
1214 |
|
3449 |
28 Jul 15 |
olle |
// Position the selection div |
3449 |
28 Jul 15 |
olle |
selectAll.scrollTop = scroll; |
3449 |
28 Jul 15 |
olle |
menu.style.left = (x)+'px'; |
3449 |
28 Jul 15 |
olle |
menu.style.top = (y)+'px'; |
3449 |
28 Jul 15 |
olle |
event.stopPropagation(); |
3449 |
28 Jul 15 |
olle |
1220 |
} |
3449 |
28 Jul 15 |
olle |
1221 |
|
3449 |
28 Jul 15 |
olle |
selectdna.barcodeSelected = function(event) |
3449 |
28 Jul 15 |
olle |
1223 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var schema = PoolSchema.getById(frm.pool_schema.value); |
3449 |
28 Jul 15 |
olle |
var target = event.target; |
3449 |
28 Jul 15 |
olle |
if (currentWell) |
3449 |
28 Jul 15 |
olle |
1228 |
{ |
3449 |
28 Jul 15 |
olle |
lastSelectedBarcode = barcodesByName[Data.get(target, 'barcode-name')]; |
3449 |
28 Jul 15 |
olle |
currentWell.barcode = lastSelectedBarcode; |
3449 |
28 Jul 15 |
olle |
var poolNum = schema.getPoolNumForColumn(currentWell.column); |
3449 |
28 Jul 15 |
olle |
selectdna.checkDuplicateBarcode(poolNum); |
3449 |
28 Jul 15 |
olle |
Plate.paint(Plate.getWells()); |
3449 |
28 Jul 15 |
olle |
1234 |
} |
3449 |
28 Jul 15 |
olle |
selectdna.hideBarcodeSelection(); |
3449 |
28 Jul 15 |
olle |
1236 |
} |
3449 |
28 Jul 15 |
olle |
1237 |
|
3449 |
28 Jul 15 |
olle |
selectdna.checkDuplicateBarcode = function(poolNum) |
3449 |
28 Jul 15 |
olle |
1239 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var schema = PoolSchema.getById(frm.pool_schema.value); |
3449 |
28 Jul 15 |
olle |
1242 |
|
3449 |
28 Jul 15 |
olle |
var wells = schema.getWellsInPool(Plate, poolNum); |
3449 |
28 Jul 15 |
olle |
var wellByBarcodeName = []; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1246 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
if (well.barcode) |
3449 |
28 Jul 15 |
olle |
1249 |
{ |
3449 |
28 Jul 15 |
olle |
if (wellByBarcodeName[well.barcode.name]) |
3449 |
28 Jul 15 |
olle |
1251 |
{ |
3449 |
28 Jul 15 |
olle |
well.duplicate = true; |
3449 |
28 Jul 15 |
olle |
wellByBarcodeName[well.barcode.name].duplicate = true; |
3449 |
28 Jul 15 |
olle |
1254 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
1256 |
{ |
3449 |
28 Jul 15 |
olle |
wellByBarcodeName[well.barcode.name] = well; |
3449 |
28 Jul 15 |
olle |
well.duplicate = false; |
3449 |
28 Jul 15 |
olle |
1259 |
} |
3449 |
28 Jul 15 |
olle |
1260 |
} |
3449 |
28 Jul 15 |
olle |
1261 |
} |
3449 |
28 Jul 15 |
olle |
1262 |
} |
3449 |
28 Jul 15 |
olle |
1263 |
|
3449 |
28 Jul 15 |
olle |
1264 |
|
3449 |
28 Jul 15 |
olle |
selectdna.hideBarcodeSelection = function() |
3449 |
28 Jul 15 |
olle |
1266 |
{ |
3449 |
28 Jul 15 |
olle |
Doc.hide('select-barcode'); |
3449 |
28 Jul 15 |
olle |
1268 |
} |
3449 |
28 Jul 15 |
olle |
1269 |
|
3449 |
28 Jul 15 |
olle |
1270 |
|
3449 |
28 Jul 15 |
olle |
1271 |
/** |
3449 |
28 Jul 15 |
olle |
Sets default display of info data for plate wells, |
3449 |
28 Jul 15 |
olle |
based on check box values. Assumes the id of the |
3449 |
28 Jul 15 |
olle |
check box in question as input. |
3449 |
28 Jul 15 |
olle |
1275 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.setDefaultInfo = function(chkbox) |
3449 |
28 Jul 15 |
olle |
1277 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var show = frm[chkbox].checked; |
3449 |
28 Jul 15 |
olle |
Doc.addOrRemoveClass('plate', 'hide-'+chkbox, !show); |
3449 |
28 Jul 15 |
olle |
1281 |
} |
3449 |
28 Jul 15 |
olle |
1282 |
|
3449 |
28 Jul 15 |
olle |
selectdna.toggleInfo = function(event) |
3449 |
28 Jul 15 |
olle |
1284 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var show = event.currentTarget.checked; |
3449 |
28 Jul 15 |
olle |
Doc.addOrRemoveClass('plate', 'hide-'+event.currentTarget.id, !show); |
3667 |
15 Dec 15 |
olle |
if (event.currentTarget.id == 'qubitconc') |
3667 |
15 Dec 15 |
olle |
1289 |
{ |
3667 |
15 Dec 15 |
olle |
Doc.addOrRemoveClass('plate', 'hide-origqubitconc', !show); |
3667 |
15 Dec 15 |
olle |
Doc.addOrRemoveClass('plate', 'hide-calcqubitconc', !show); |
3667 |
15 Dec 15 |
olle |
1292 |
} |
3615 |
20 Nov 15 |
olle |
// Re-paint well info to show/hide warnings for target class |
3615 |
20 Nov 15 |
olle |
Plate.paint(Plate.getWells()); |
3449 |
28 Jul 15 |
olle |
1295 |
} |
3449 |
28 Jul 15 |
olle |
1296 |
|
3449 |
28 Jul 15 |
olle |
1297 |
/** |
3449 |
28 Jul 15 |
olle |
Open a popup dialog for selecting a data files. |
3449 |
28 Jul 15 |
olle |
1299 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.selectFile = function() |
3449 |
28 Jul 15 |
olle |
1301 |
{ |
3449 |
28 Jul 15 |
olle |
Dialogs.openPopup('select_file.jsp?ID='+App.getSessionId(), 'SelectFile', 600, 400); |
3449 |
28 Jul 15 |
olle |
1303 |
} |
3449 |
28 Jul 15 |
olle |
1304 |
|
3449 |
28 Jul 15 |
olle |
1305 |
/** |
3449 |
28 Jul 15 |
olle |
Parse a tab-separated data file. The columns must be in the following order: |
3449 |
28 Jul 15 |
olle |
0: DNA name |
3449 |
28 Jul 15 |
olle |
1: Row letter (A-H) |
3449 |
28 Jul 15 |
olle |
2: Column number (1-12) |
3449 |
28 Jul 15 |
olle |
3: QC flag (can be empty) |
3449 |
28 Jul 15 |
olle |
1311 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.parseDnaFile = function(data) |
3449 |
28 Jul 15 |
olle |
1313 |
{ |
3449 |
28 Jul 15 |
olle |
var lines = data.split(/[\n\r]+/); |
3449 |
28 Jul 15 |
olle |
1315 |
|
3449 |
28 Jul 15 |
olle |
// Load information about all DNA items in a batch (will improve performance) |
3449 |
28 Jul 15 |
olle |
var names = []; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < lines.length; i++) |
3449 |
28 Jul 15 |
olle |
1319 |
{ |
3449 |
28 Jul 15 |
olle |
var line = lines[i]; |
3449 |
28 Jul 15 |
olle |
if (line) |
3449 |
28 Jul 15 |
olle |
1322 |
{ |
3449 |
28 Jul 15 |
olle |
var cols = lines[i].split(/\t/); |
3449 |
28 Jul 15 |
olle |
if (cols.length < 3) throw 'On line '+(i+1)+': Too few columns (' + cols.length + ')'; |
3449 |
28 Jul 15 |
olle |
names[names.length] = cols[0]; |
3449 |
28 Jul 15 |
olle |
1326 |
} |
3449 |
28 Jul 15 |
olle |
1327 |
} |
3449 |
28 Jul 15 |
olle |
Dna.loadInfoByNames(names); |
3449 |
28 Jul 15 |
olle |
1329 |
|
3449 |
28 Jul 15 |
olle |
// Place DNA on the plate |
3449 |
28 Jul 15 |
olle |
var duplicates = []; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < lines.length; i++) |
3449 |
28 Jul 15 |
olle |
1333 |
{ |
3449 |
28 Jul 15 |
olle |
var line = lines[i]; |
3449 |
28 Jul 15 |
olle |
if (line) |
3449 |
28 Jul 15 |
olle |
1336 |
{ |
3449 |
28 Jul 15 |
olle |
var cols = lines[i].split(/\t/); |
3449 |
28 Jul 15 |
olle |
1338 |
|
3459 |
30 Jul 15 |
olle |
//var dna = Dna.createByName(cols[0]); |
3449 |
28 Jul 15 |
olle |
var row = Meludi.alphaToWell(cols[1].toUpperCase()); |
3449 |
28 Jul 15 |
olle |
var col = parseInt(cols[2], 10)-1; |
3459 |
30 Jul 15 |
olle |
1342 |
|
3460 |
30 Jul 15 |
olle |
if (col < 6) |
3459 |
30 Jul 15 |
olle |
1344 |
{ |
3459 |
30 Jul 15 |
olle |
var well = Plate.getWell(row, col); |
3459 |
30 Jul 15 |
olle |
if (!well) throw 'On line '+(i+1)+': Invalid plate coordinate ['+cols[1]+','+cols[2]+']'; |
3449 |
28 Jul 15 |
olle |
1347 |
|
3459 |
30 Jul 15 |
olle |
var name = cols[0]; |
3459 |
30 Jul 15 |
olle |
// Create a new DNA object |
3459 |
30 Jul 15 |
olle |
var dna = Dna.createByName(name); |
3459 |
30 Jul 15 |
olle |
dna.name = name + '.fpa'; |
3459 |
30 Jul 15 |
olle |
dna.qc = cols.length >= 4 && (cols[3] && cols[3] != '0'); |
3459 |
30 Jul 15 |
olle |
Dna.unflag(dna); |
3449 |
28 Jul 15 |
olle |
1354 |
|
3459 |
30 Jul 15 |
olle |
// Check for duplicate DNA on same position (which is an error) |
3459 |
30 Jul 15 |
olle |
var pos = 'c'+col+'r'+row; |
3459 |
30 Jul 15 |
olle |
if (duplicates[pos]) |
3459 |
30 Jul 15 |
olle |
1358 |
{ |
3459 |
30 Jul 15 |
olle |
well.addDuplicate(dna); |
3459 |
30 Jul 15 |
olle |
1360 |
} |
3459 |
30 Jul 15 |
olle |
else |
3459 |
30 Jul 15 |
olle |
1362 |
{ |
3459 |
30 Jul 15 |
olle |
duplicates[pos] = dna.name; |
3459 |
30 Jul 15 |
olle |
well.setExtract(dna); |
3459 |
30 Jul 15 |
olle |
1365 |
} |
3459 |
30 Jul 15 |
olle |
1366 |
|
3459 |
30 Jul 15 |
olle |
// Place FPB sample in corresponding well on right side of plate |
3459 |
30 Jul 15 |
olle |
well = Plate.getWell(row, col + 6); |
3459 |
30 Jul 15 |
olle |
// Create a new DNA object |
3459 |
30 Jul 15 |
olle |
dna = Dna.createByName(name); |
3459 |
30 Jul 15 |
olle |
dna.name = name + '.fpb'; |
3459 |
30 Jul 15 |
olle |
dna.qc = cols.length >= 4 && (cols[3] && cols[3] != '0'); |
3459 |
30 Jul 15 |
olle |
Dna.unflag(dna); |
3449 |
28 Jul 15 |
olle |
well.setExtract(dna); |
3449 |
28 Jul 15 |
olle |
1375 |
} |
3449 |
28 Jul 15 |
olle |
1376 |
} |
3449 |
28 Jul 15 |
olle |
1377 |
} |
3449 |
28 Jul 15 |
olle |
1378 |
|
3449 |
28 Jul 15 |
olle |
selectdna.updateNumFlaggedDna(); |
3449 |
28 Jul 15 |
olle |
1380 |
|
3449 |
28 Jul 15 |
olle |
// Check for replicates on the whole plate and repaint it |
3449 |
28 Jul 15 |
olle |
Plate.checkReplicates(null, true); |
3449 |
28 Jul 15 |
olle |
Plate.paint(Plate.getWells()); |
3449 |
28 Jul 15 |
olle |
1384 |
} |
3449 |
28 Jul 15 |
olle |
1385 |
|
3449 |
28 Jul 15 |
olle |
1386 |
/** |
3449 |
28 Jul 15 |
olle |
Open a popup dialog for manual selection of DNA. |
3449 |
28 Jul 15 |
olle |
1388 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.manualSelect = function(event) |
3449 |
28 Jul 15 |
olle |
1390 |
{ |
3449 |
28 Jul 15 |
olle |
currentSelected = Plate.getSelected(); |
3449 |
28 Jul 15 |
olle |
if (currentSelected.length == 0) |
3449 |
28 Jul 15 |
olle |
1393 |
{ |
3449 |
28 Jul 15 |
olle |
Forms.showNotification(event.currentTarget, 'Please select one or more wells were DNA should be placed.'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1396 |
} |
3449 |
28 Jul 15 |
olle |
1397 |
|
3449 |
28 Jul 15 |
olle |
if (subtypeDna == null) subtypeDna = Meludi.getSubtypeInfo('DNA'); |
3449 |
28 Jul 15 |
olle |
1399 |
/* |
3449 |
28 Jul 15 |
olle |
if (subtypeDnaNormalized == null) subtypeDnaNormalized = Meludi.getSubtypeInfo('DNA_NORMALIZED_ALIQUOT'); |
3449 |
28 Jul 15 |
olle |
1401 |
*/ |
3449 |
28 Jul 15 |
olle |
1402 |
|
3449 |
28 Jul 15 |
olle |
var url = '&resetTemporary=1'; |
3449 |
28 Jul 15 |
olle |
1404 |
/* |
3449 |
28 Jul 15 |
olle |
url += '&tmpfilter:INT:itemSubtype='+subtypeDna.id+'|'+subtypeDnaNormalized.id; |
3449 |
28 Jul 15 |
olle |
1406 |
*/ |
3449 |
28 Jul 15 |
olle |
url += '&tmpfilter:INT:itemSubtype='+subtypeDna.id; |
3449 |
28 Jul 15 |
olle |
url += '&tmpfilter:DATE:creationEvent.eventDate='+encodeURIComponent('<>'); |
3449 |
28 Jul 15 |
olle |
url += '&tmpfilter:FLOAT:remainingQuantity='+encodeURIComponent('>=1'); |
3449 |
28 Jul 15 |
olle |
url += '&'+encodeURIComponent('tmpfilter:STRING:&childCreationEvents(event.bioMaterial.name)')+'='+encodeURIComponent('<>%.m'); |
3449 |
28 Jul 15 |
olle |
1411 |
|
3449 |
28 Jul 15 |
olle |
Dialogs.selectItem('EXTRACT', 'plate', 1, url); |
3449 |
28 Jul 15 |
olle |
1413 |
} |
3449 |
28 Jul 15 |
olle |
1414 |
|
3449 |
28 Jul 15 |
olle |
1415 |
/** |
3449 |
28 Jul 15 |
olle |
Callback method for manual selection. |
3449 |
28 Jul 15 |
olle |
1417 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.manuallySelected = function(event) |
3449 |
28 Jul 15 |
olle |
1419 |
{ |
3449 |
28 Jul 15 |
olle |
names[names.length] = event.detail.name; |
3449 |
28 Jul 15 |
olle |
1421 |
|
3449 |
28 Jul 15 |
olle |
if (event.detail.remaining == 0 && names.length > 0) |
3449 |
28 Jul 15 |
olle |
1423 |
{ |
3449 |
28 Jul 15 |
olle |
Dna.loadInfoByNames(names); |
3449 |
28 Jul 15 |
olle |
1425 |
|
3458 |
30 Jul 15 |
olle |
var wellsArray = []; |
3458 |
30 Jul 15 |
olle |
var numItemsPlaced = names.length; |
3458 |
30 Jul 15 |
olle |
if (currentSelected.length < names.length) |
3449 |
28 Jul 15 |
olle |
1429 |
{ |
3458 |
30 Jul 15 |
olle |
numItemsPlaced = currentSelected.length; |
3458 |
30 Jul 15 |
olle |
1431 |
} |
3458 |
30 Jul 15 |
olle |
for (var i = 0; i < numItemsPlaced; i++) |
3458 |
30 Jul 15 |
olle |
1433 |
{ |
3449 |
28 Jul 15 |
olle |
var well = currentSelected[i]; |
3449 |
28 Jul 15 |
olle |
wellsArray[i] = well; |
3449 |
28 Jul 15 |
olle |
var name = names[i]; |
3457 |
29 Jul 15 |
olle |
//alert("select_dna_for_start_plate.js::manuallySelected(): currentSelected.length = " + currentSelected.length + " names.legnth = " + names.length + " i = " + i + " name = \"" + name + "\" well = " + JSON.stringify(well)); |
3449 |
28 Jul 15 |
olle |
// Create a new DNA object |
3449 |
28 Jul 15 |
olle |
var dna = Dna.createByName(name); |
3449 |
28 Jul 15 |
olle |
dna.name = name + '.fpa'; |
3449 |
28 Jul 15 |
olle |
Dna.unflag(dna); |
3449 |
28 Jul 15 |
olle |
well.setExtract(dna); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
// Place FPB sample in corresponding well on right side of plate |
3457 |
29 Jul 15 |
olle |
var row = well.row; |
3457 |
29 Jul 15 |
olle |
var column = well.column; |
3449 |
28 Jul 15 |
olle |
well = Plate.getWell(row, column + 6); |
3458 |
30 Jul 15 |
olle |
wellsArray[i+numItemsPlaced] = well; |
3449 |
28 Jul 15 |
olle |
// Create a new DNA object |
3449 |
28 Jul 15 |
olle |
dna = Dna.createByName(name); |
3449 |
28 Jul 15 |
olle |
dna.name = name + '.fpb'; |
3449 |
28 Jul 15 |
olle |
Dna.unflag(dna); |
3449 |
28 Jul 15 |
olle |
well.setExtract(dna); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
1455 |
} |
3449 |
28 Jul 15 |
olle |
Plate.checkReplicates(); |
3449 |
28 Jul 15 |
olle |
1457 |
/* |
3449 |
28 Jul 15 |
olle |
Plate.paint(currentSelected); |
3449 |
28 Jul 15 |
olle |
1459 |
*/ |
3449 |
28 Jul 15 |
olle |
Plate.paint(wellsArray); |
3449 |
28 Jul 15 |
olle |
selectdna.updateNumFlaggedDna(); |
3449 |
28 Jul 15 |
olle |
names = []; |
3449 |
28 Jul 15 |
olle |
1463 |
} |
3449 |
28 Jul 15 |
olle |
1464 |
} |
3449 |
28 Jul 15 |
olle |
1465 |
|
3449 |
28 Jul 15 |
olle |
1466 |
|
3449 |
28 Jul 15 |
olle |
1467 |
/** |
3449 |
28 Jul 15 |
olle |
Let the wizard automatically select among unprocessed DNA items. |
3449 |
28 Jul 15 |
olle |
1469 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.autoSelect = function(event) |
3449 |
28 Jul 15 |
olle |
1471 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getWells(); |
3449 |
28 Jul 15 |
olle |
var selected = []; |
3449 |
28 Jul 15 |
olle |
var ignore = []; |
3449 |
28 Jul 15 |
olle |
var notEmpty = 0; |
3449 |
28 Jul 15 |
olle |
1477 |
|
3449 |
28 Jul 15 |
olle |
// Count selected and non-empty wells and keep track of DNA that is already present |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1480 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
if (well.selected) |
3449 |
28 Jul 15 |
olle |
1483 |
{ |
3449 |
28 Jul 15 |
olle |
selected[selected.length] = well; |
3449 |
28 Jul 15 |
olle |
if (well.extract && !well.hasError()) notEmpty++; |
3449 |
28 Jul 15 |
olle |
1486 |
} |
3449 |
28 Jul 15 |
olle |
if (well.extract && well.extract.id) |
3449 |
28 Jul 15 |
olle |
1488 |
{ |
3449 |
28 Jul 15 |
olle |
ignore[ignore.length] = well.extract.id; |
3449 |
28 Jul 15 |
olle |
1490 |
} |
3449 |
28 Jul 15 |
olle |
1491 |
} |
3449 |
28 Jul 15 |
olle |
// Ignore DNA already flagged |
3449 |
28 Jul 15 |
olle |
var flagged = Dna.getFlagged(); |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < flagged.length; i++) |
3449 |
28 Jul 15 |
olle |
1495 |
{ |
3449 |
28 Jul 15 |
olle |
var dna = flagged[i]; |
3449 |
28 Jul 15 |
olle |
if (dna.id) ignore[ignore.length] = dna.id; |
3449 |
28 Jul 15 |
olle |
1498 |
} |
3449 |
28 Jul 15 |
olle |
1499 |
|
3449 |
28 Jul 15 |
olle |
if (selected.length == 0) |
3449 |
28 Jul 15 |
olle |
1501 |
{ |
3449 |
28 Jul 15 |
olle |
Forms.showNotification(event.currentTarget, 'Please select one or more wells were DNA should be placed.'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1504 |
} |
3449 |
28 Jul 15 |
olle |
1505 |
|
3449 |
28 Jul 15 |
olle |
if (notEmpty > 0) |
3449 |
28 Jul 15 |
olle |
1507 |
{ |
3449 |
28 Jul 15 |
olle |
if (!confirm('Replace DNA in ' + notEmpty + ' wells?')) |
3449 |
28 Jul 15 |
olle |
1509 |
{ |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1511 |
} |
3449 |
28 Jul 15 |
olle |
1512 |
} |
3449 |
28 Jul 15 |
olle |
1513 |
|
3449 |
28 Jul 15 |
olle |
var url = 'auto_select_dna.jsp?ID='+App.getSessionId(); |
3449 |
28 Jul 15 |
olle |
url += '&numToSelect='+selected.length; |
3617 |
23 Nov 15 |
olle |
1516 |
/* |
3449 |
28 Jul 15 |
olle |
url += '&quantity='+encodeURIComponent(frm.quantity_regular.value); |
3617 |
23 Nov 15 |
olle |
1518 |
*/ |
3449 |
28 Jul 15 |
olle |
url += '&ignore='+ignore.join(','); |
3449 |
28 Jul 15 |
olle |
Dialogs.openPopup(url, 'AutoSelectDNA', 750, 500); |
3449 |
28 Jul 15 |
olle |
1521 |
} |
3449 |
28 Jul 15 |
olle |
1522 |
|
3449 |
28 Jul 15 |
olle |
1523 |
/** |
3449 |
28 Jul 15 |
olle |
Callback function for auto-select. |
3449 |
28 Jul 15 |
olle |
1525 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.dnaSelected = function(response) |
3449 |
28 Jul 15 |
olle |
1527 |
{ |
3449 |
28 Jul 15 |
olle |
// Cache DNA information |
3449 |
28 Jul 15 |
olle |
Dna.cacheInfo(response.dna); |
3449 |
28 Jul 15 |
olle |
Dna.cacheInfo(response.flagged); |
3449 |
28 Jul 15 |
olle |
1531 |
|
3449 |
28 Jul 15 |
olle |
selectdna.updateNumFlaggedDna(); |
3449 |
28 Jul 15 |
olle |
var selected = Plate.getSelected(); |
3449 |
28 Jul 15 |
olle |
1534 |
|
3449 |
28 Jul 15 |
olle |
1535 |
/* |
3449 |
28 Jul 15 |
olle |
// Get selected DNA names |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < response.dna.length; i++) |
3449 |
28 Jul 15 |
olle |
1538 |
{ |
3449 |
28 Jul 15 |
olle |
if (i < selected.length) |
3449 |
28 Jul 15 |
olle |
1540 |
{ |
3449 |
28 Jul 15 |
olle |
names[i] = response.dna[i].name; |
3449 |
28 Jul 15 |
olle |
1542 |
} |
3449 |
28 Jul 15 |
olle |
1543 |
} |
3449 |
28 Jul 15 |
olle |
if (names.length > 0) |
3449 |
28 Jul 15 |
olle |
1545 |
{ |
3449 |
28 Jul 15 |
olle |
Dna.loadInfoByNames(names); |
3449 |
28 Jul 15 |
olle |
1547 |
|
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < names.length && i < selected.length; i++) |
3449 |
28 Jul 15 |
olle |
1549 |
{ |
3449 |
28 Jul 15 |
olle |
var well = selected[i]; |
3449 |
28 Jul 15 |
olle |
var name = names[i]; |
3449 |
28 Jul 15 |
olle |
1552 |
|
3449 |
28 Jul 15 |
olle |
// Create a new DNA object |
3449 |
28 Jul 15 |
olle |
var dna = Dna.createByName(name); |
3449 |
28 Jul 15 |
olle |
Dna.unflag(dna); |
3449 |
28 Jul 15 |
olle |
well.setExtract(dna); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
1558 |
} |
3449 |
28 Jul 15 |
olle |
1559 |
|
3449 |
28 Jul 15 |
olle |
Plate.checkReplicates(); |
3449 |
28 Jul 15 |
olle |
Plate.paint(selected); |
3449 |
28 Jul 15 |
olle |
selectdna.updateNumFlaggedDna(); |
3449 |
28 Jul 15 |
olle |
names = []; |
3449 |
28 Jul 15 |
olle |
1564 |
} |
3449 |
28 Jul 15 |
olle |
1565 |
*/ |
3449 |
28 Jul 15 |
olle |
1566 |
|
3449 |
28 Jul 15 |
olle |
var wellsArray = []; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < response.dna.length; i++) |
3449 |
28 Jul 15 |
olle |
1569 |
{ |
3449 |
28 Jul 15 |
olle |
if (i < selected.length) |
3449 |
28 Jul 15 |
olle |
1571 |
{ |
3449 |
28 Jul 15 |
olle |
var well = selected[i]; |
3449 |
28 Jul 15 |
olle |
wellsArray[i] = well; |
3449 |
28 Jul 15 |
olle |
// Create a new DNA object |
3449 |
28 Jul 15 |
olle |
var name = response.dna[i].name; |
3449 |
28 Jul 15 |
olle |
var dna = Dna.createByName(name); |
3449 |
28 Jul 15 |
olle |
dna.name = name + '.fpa'; |
3449 |
28 Jul 15 |
olle |
//Dna.unflag(dna); |
3449 |
28 Jul 15 |
olle |
well.setExtract(dna); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
// Place FPB sample in corresponding well on right side of plate |
3449 |
28 Jul 15 |
olle |
var row = well.row; |
3449 |
28 Jul 15 |
olle |
var column = well.column; |
3449 |
28 Jul 15 |
olle |
well = Plate.getWell(row, column + 6); |
3449 |
28 Jul 15 |
olle |
wellsArray[i+selected.length] = well; |
3449 |
28 Jul 15 |
olle |
// Create a new DNA object |
3449 |
28 Jul 15 |
olle |
dna = Dna.createByName(name); |
3449 |
28 Jul 15 |
olle |
dna.name = name + '.fpb'; |
3449 |
28 Jul 15 |
olle |
//Dna.unflag(dna); |
3449 |
28 Jul 15 |
olle |
well.setExtract(dna); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
1592 |
} |
3449 |
28 Jul 15 |
olle |
1593 |
} |
3449 |
28 Jul 15 |
olle |
// Check for replicates on the whole plate and repaint it |
3449 |
28 Jul 15 |
olle |
Plate.checkReplicates(null, true); |
3449 |
28 Jul 15 |
olle |
Plate.paint(Plate.getWells()); |
3449 |
28 Jul 15 |
olle |
1597 |
} |
3449 |
28 Jul 15 |
olle |
1598 |
|
3449 |
28 Jul 15 |
olle |
// Update the 'Flagged DNA' information |
3449 |
28 Jul 15 |
olle |
selectdna.updateNumFlaggedDna = function() |
3449 |
28 Jul 15 |
olle |
1601 |
{ |
3449 |
28 Jul 15 |
olle |
var numFlagged = Dna.getFlagged().length; |
3449 |
28 Jul 15 |
olle |
if (numFlagged > 0) |
3449 |
28 Jul 15 |
olle |
1604 |
{ |
3449 |
28 Jul 15 |
olle |
Doc.element('flaggedDna').innerHTML = numFlagged + ' flagged DNA items.'; |
3449 |
28 Jul 15 |
olle |
Doc.show('flaggedDna'); |
3449 |
28 Jul 15 |
olle |
1607 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
1609 |
{ |
3449 |
28 Jul 15 |
olle |
Doc.hide('flaggedDna'); |
3449 |
28 Jul 15 |
olle |
1611 |
} |
3449 |
28 Jul 15 |
olle |
1612 |
} |
3449 |
28 Jul 15 |
olle |
1613 |
|
3449 |
28 Jul 15 |
olle |
1614 |
/** |
3449 |
28 Jul 15 |
olle |
Add 'Stratagene' to the selected wells. |
3449 |
28 Jul 15 |
olle |
1616 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.setToStratagene = function(event) |
3449 |
28 Jul 15 |
olle |
1618 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
selectdna.setToSpecial(event, frm.stratagene.value, true); |
3449 |
28 Jul 15 |
olle |
1621 |
} |
3449 |
28 Jul 15 |
olle |
1622 |
|
3449 |
28 Jul 15 |
olle |
1623 |
|
3449 |
28 Jul 15 |
olle |
1624 |
/** |
3449 |
28 Jul 15 |
olle |
Add 'External DNA' to the selected wells. |
3449 |
28 Jul 15 |
olle |
1626 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.setToExternal = function(event) |
3449 |
28 Jul 15 |
olle |
1628 |
{ |
3449 |
28 Jul 15 |
olle |
selectdna.setToSpecial(event, EXTERNAL_DNA_NAME, false); |
3449 |
28 Jul 15 |
olle |
1630 |
} |
3449 |
28 Jul 15 |
olle |
1631 |
|
3449 |
28 Jul 15 |
olle |
1632 |
/** |
3449 |
28 Jul 15 |
olle |
Add special DNA to the selected wells. |
3449 |
28 Jul 15 |
olle |
1634 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.setToSpecial = function(event, specialName, qc) |
3449 |
28 Jul 15 |
olle |
1636 |
{ |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getSelected(); |
3449 |
28 Jul 15 |
olle |
1638 |
|
3449 |
28 Jul 15 |
olle |
if (wells.length == 0) |
3449 |
28 Jul 15 |
olle |
1640 |
{ |
3449 |
28 Jul 15 |
olle |
Forms.showNotification(event.currentTarget, 'No wells have been selected'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1643 |
} |
3449 |
28 Jul 15 |
olle |
1644 |
|
3449 |
28 Jul 15 |
olle |
// Count non-empty wells |
3449 |
28 Jul 15 |
olle |
var count = 0; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1648 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
if (well.extract && !well.hasError()) count++; |
3449 |
28 Jul 15 |
olle |
1651 |
} |
3449 |
28 Jul 15 |
olle |
1652 |
|
3449 |
28 Jul 15 |
olle |
if (count > 0) |
3449 |
28 Jul 15 |
olle |
1654 |
{ |
3449 |
28 Jul 15 |
olle |
if (!confirm('Replace DNA in ' + count + ' wells with '+specialName+'?')) |
3449 |
28 Jul 15 |
olle |
1656 |
{ |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1658 |
} |
3449 |
28 Jul 15 |
olle |
1659 |
} |
3449 |
28 Jul 15 |
olle |
1660 |
|
3449 |
28 Jul 15 |
olle |
var info = Dna.infoByName(specialName); |
3449 |
28 Jul 15 |
olle |
if (!info.id) |
3449 |
28 Jul 15 |
olle |
1663 |
{ |
3449 |
28 Jul 15 |
olle |
alert('Could not find any DNA with name=\''+specialName+'\'. Please check that it exists on the server.'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1666 |
} |
3449 |
28 Jul 15 |
olle |
1667 |
|
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1669 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
var dna = Dna.createByInfo(info); |
3449 |
28 Jul 15 |
olle |
dna.qc = qc; |
3449 |
28 Jul 15 |
olle |
well.setExtract(dna); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
1675 |
} |
3449 |
28 Jul 15 |
olle |
1676 |
|
3449 |
28 Jul 15 |
olle |
Plate.paint(wells); |
3449 |
28 Jul 15 |
olle |
1678 |
|
3449 |
28 Jul 15 |
olle |
// Check for replicated DNA if some have been replaced with Stratagene |
3449 |
28 Jul 15 |
olle |
if (count > 0) Plate.checkReplicates(); |
3449 |
28 Jul 15 |
olle |
1681 |
} |
3449 |
28 Jul 15 |
olle |
1682 |
|
3449 |
28 Jul 15 |
olle |
1683 |
/** |
3449 |
28 Jul 15 |
olle |
Toggle the QC flag for the selected wells. The first non-empty |
3449 |
28 Jul 15 |
olle |
well is toggled and the rest of the wells will use the same new QC |
3449 |
28 Jul 15 |
olle |
value. |
3449 |
28 Jul 15 |
olle |
1687 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.toggleQc = function(event) |
3449 |
28 Jul 15 |
olle |
1689 |
{ |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getSelected(); |
3449 |
28 Jul 15 |
olle |
1691 |
|
3449 |
28 Jul 15 |
olle |
if (wells.length == 0) |
3449 |
28 Jul 15 |
olle |
1693 |
{ |
3449 |
28 Jul 15 |
olle |
Forms.showNotification(event.currentTarget, 'No wells have been selected'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1696 |
} |
3449 |
28 Jul 15 |
olle |
1697 |
|
3449 |
28 Jul 15 |
olle |
var gotQc = false; |
3449 |
28 Jul 15 |
olle |
var newQc; |
3449 |
28 Jul 15 |
olle |
var count = 0; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1702 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
if (well.extract) |
3449 |
28 Jul 15 |
olle |
1705 |
{ |
3449 |
28 Jul 15 |
olle |
// Toggle QC flag for the first well with DNA, then use the same flag for the rest |
3449 |
28 Jul 15 |
olle |
if (!gotQc) |
3449 |
28 Jul 15 |
olle |
1708 |
{ |
3449 |
28 Jul 15 |
olle |
gotQc = true; |
3449 |
28 Jul 15 |
olle |
newQc = !well.extract.qc; |
3449 |
28 Jul 15 |
olle |
1711 |
} |
3449 |
28 Jul 15 |
olle |
well.extract.qc = newQc; |
3449 |
28 Jul 15 |
olle |
count++; |
3449 |
28 Jul 15 |
olle |
1714 |
} |
3449 |
28 Jul 15 |
olle |
1715 |
} |
3449 |
28 Jul 15 |
olle |
1716 |
|
3449 |
28 Jul 15 |
olle |
if (count == 0) |
3449 |
28 Jul 15 |
olle |
1718 |
{ |
3449 |
28 Jul 15 |
olle |
Forms.showNotification(event.currentTarget, 'None of the selected wells contain any DNA'); |
3449 |
28 Jul 15 |
olle |
1720 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
1722 |
{ |
3449 |
28 Jul 15 |
olle |
Plate.paint(wells); |
3449 |
28 Jul 15 |
olle |
1724 |
} |
3449 |
28 Jul 15 |
olle |
1725 |
} |
3449 |
28 Jul 15 |
olle |
1726 |
|
3449 |
28 Jul 15 |
olle |
// Set a comment on the selected wells |
3449 |
28 Jul 15 |
olle |
selectdna.commentSelected = function(event) |
3449 |
28 Jul 15 |
olle |
1729 |
{ |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getSelected(); |
3449 |
28 Jul 15 |
olle |
1731 |
|
3449 |
28 Jul 15 |
olle |
if (wells.length == 0) |
3449 |
28 Jul 15 |
olle |
1733 |
{ |
3449 |
28 Jul 15 |
olle |
Forms.showNotification(event.currentTarget, 'No wells have been selected'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1736 |
} |
3449 |
28 Jul 15 |
olle |
1737 |
|
3449 |
28 Jul 15 |
olle |
var count = 0; |
3449 |
28 Jul 15 |
olle |
var comment = ''; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1741 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
if (well.extract) |
3449 |
28 Jul 15 |
olle |
1744 |
{ |
3449 |
28 Jul 15 |
olle |
count++; |
3449 |
28 Jul 15 |
olle |
if (well.extract.comment) comment = well.extract.comment; |
3449 |
28 Jul 15 |
olle |
1747 |
} |
3449 |
28 Jul 15 |
olle |
1748 |
} |
3449 |
28 Jul 15 |
olle |
1749 |
|
3449 |
28 Jul 15 |
olle |
if (count == 0) |
3449 |
28 Jul 15 |
olle |
1751 |
{ |
3449 |
28 Jul 15 |
olle |
Forms.showNotification(event.currentTarget, 'None of the selected wells contain any DNA'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1754 |
} |
3449 |
28 Jul 15 |
olle |
1755 |
|
3449 |
28 Jul 15 |
olle |
comment = prompt('Comment', comment || ''); |
3449 |
28 Jul 15 |
olle |
if (comment == null) return; |
3449 |
28 Jul 15 |
olle |
1758 |
|
3449 |
28 Jul 15 |
olle |
if (comment == '') comment = null; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1761 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
if (well.extract) well.extract.comment = comment; |
3449 |
28 Jul 15 |
olle |
1764 |
} |
3449 |
28 Jul 15 |
olle |
Plate.paint(wells); |
3449 |
28 Jul 15 |
olle |
1766 |
} |
3449 |
28 Jul 15 |
olle |
1767 |
|
3449 |
28 Jul 15 |
olle |
1768 |
/** |
3449 |
28 Jul 15 |
olle |
Empty the selected wells from DNA. They can later be pasted again. |
3449 |
28 Jul 15 |
olle |
1770 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.cutSelected = function(event) |
3449 |
28 Jul 15 |
olle |
1772 |
{ |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getSelected(); |
3449 |
28 Jul 15 |
olle |
1774 |
|
3449 |
28 Jul 15 |
olle |
if (wells.length == 0) |
3449 |
28 Jul 15 |
olle |
1776 |
{ |
3449 |
28 Jul 15 |
olle |
Forms.showNotification(event.currentTarget, 'No wells have been selected'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1779 |
} |
3449 |
28 Jul 15 |
olle |
1780 |
|
3449 |
28 Jul 15 |
olle |
var count = 0; |
3449 |
28 Jul 15 |
olle |
var valid = 0; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1784 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
if (well.extract) |
3449 |
28 Jul 15 |
olle |
1787 |
{ |
3449 |
28 Jul 15 |
olle |
count++; |
3449 |
28 Jul 15 |
olle |
if (!well.hasError()) valid++; |
3449 |
28 Jul 15 |
olle |
1790 |
} |
3449 |
28 Jul 15 |
olle |
1791 |
} |
3449 |
28 Jul 15 |
olle |
1792 |
|
3449 |
28 Jul 15 |
olle |
if (count == 0) |
3449 |
28 Jul 15 |
olle |
1794 |
{ |
3449 |
28 Jul 15 |
olle |
Forms.showNotification(event.currentTarget, 'None of the selected wells contain any DNA'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1797 |
} |
3449 |
28 Jul 15 |
olle |
1798 |
|
3449 |
28 Jul 15 |
olle |
// Ask for confirmation before deleting from valid wells |
3449 |
28 Jul 15 |
olle |
if (valid > 0) |
3449 |
28 Jul 15 |
olle |
1801 |
{ |
3449 |
28 Jul 15 |
olle |
if (!confirm('Clear DNA from ' + count + ' of ' + wells.length + ' selected wells?')) |
3449 |
28 Jul 15 |
olle |
1803 |
{ |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1805 |
} |
3449 |
28 Jul 15 |
olle |
1806 |
} |
3449 |
28 Jul 15 |
olle |
1807 |
|
3449 |
28 Jul 15 |
olle |
selectdna.copySelected(); |
3449 |
28 Jul 15 |
olle |
1809 |
/* |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1811 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
well.setExtract(null); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
1815 |
} |
3449 |
28 Jul 15 |
olle |
Plate.paint(wells); |
3449 |
28 Jul 15 |
olle |
1817 |
*/ |
3449 |
28 Jul 15 |
olle |
var wellsArray = []; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1820 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
well.setExtract(null); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
wellsArray[i] = well; |
3449 |
28 Jul 15 |
olle |
// Clear FPB sample in corresponding well on right side of plate |
3449 |
28 Jul 15 |
olle |
var row = well.row; |
3449 |
28 Jul 15 |
olle |
var column = well.column; |
3449 |
28 Jul 15 |
olle |
well = Plate.getWell(row, column + 6); |
3449 |
28 Jul 15 |
olle |
well.setExtract(null); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
wellsArray[i+wells.length] = well; |
3449 |
28 Jul 15 |
olle |
1832 |
} |
3449 |
28 Jul 15 |
olle |
Plate.paint(wellsArray); |
3449 |
28 Jul 15 |
olle |
Plate.checkReplicates(); |
3449 |
28 Jul 15 |
olle |
1835 |
} |
3449 |
28 Jul 15 |
olle |
1836 |
|
3449 |
28 Jul 15 |
olle |
var copy; |
3449 |
28 Jul 15 |
olle |
1838 |
/** |
3449 |
28 Jul 15 |
olle |
Copy information about the selected wells. |
3449 |
28 Jul 15 |
olle |
1840 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.copySelected = function(event) |
3449 |
28 Jul 15 |
olle |
1842 |
{ |
3449 |
28 Jul 15 |
olle |
// Clear existing wells in the copy |
3449 |
28 Jul 15 |
olle |
var repaint = []; |
3449 |
28 Jul 15 |
olle |
if (copy && copy.length > 0) |
3449 |
28 Jul 15 |
olle |
1846 |
{ |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < copy.length; i++) |
3449 |
28 Jul 15 |
olle |
1848 |
{ |
3449 |
28 Jul 15 |
olle |
var cp = copy[i]; |
3449 |
28 Jul 15 |
olle |
cp.well.doneWithCopy(); |
3449 |
28 Jul 15 |
olle |
repaint[repaint.length] = cp.well; |
3449 |
28 Jul 15 |
olle |
1852 |
} |
3449 |
28 Jul 15 |
olle |
1853 |
} |
3449 |
28 Jul 15 |
olle |
Plate.paint(repaint); |
3449 |
28 Jul 15 |
olle |
1855 |
|
3449 |
28 Jul 15 |
olle |
// Place selected wells in the copy |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getSelected(); |
3449 |
28 Jul 15 |
olle |
copy = []; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1860 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
copy[copy.length] = well.makeCopy(); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
1864 |
} |
3449 |
28 Jul 15 |
olle |
Plate.paint(wells); |
3449 |
28 Jul 15 |
olle |
1866 |
} |
3449 |
28 Jul 15 |
olle |
1867 |
|
3449 |
28 Jul 15 |
olle |
1868 |
/** |
3449 |
28 Jul 15 |
olle |
Paste information into the selected wells. |
3449 |
28 Jul 15 |
olle |
1870 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.pasteToSelected = function(event) |
3449 |
28 Jul 15 |
olle |
1872 |
{ |
3449 |
28 Jul 15 |
olle |
if (!copy || copy.length == 0) |
3449 |
28 Jul 15 |
olle |
1874 |
{ |
3449 |
28 Jul 15 |
olle |
Forms.showNotification(event.currentTarget, 'Nothing to paste. Please cut or copy wells first.'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1877 |
} |
3449 |
28 Jul 15 |
olle |
1878 |
|
3449 |
28 Jul 15 |
olle |
var wells = Plate.getSelected(); |
3449 |
28 Jul 15 |
olle |
// Count non-empty and valid wells |
3449 |
28 Jul 15 |
olle |
var count = 0; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
1883 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
if (well.extract && !well.hasError()) count++; |
3449 |
28 Jul 15 |
olle |
1886 |
} |
3449 |
28 Jul 15 |
olle |
1887 |
|
3449 |
28 Jul 15 |
olle |
if (count > 0) |
3449 |
28 Jul 15 |
olle |
1889 |
{ |
3449 |
28 Jul 15 |
olle |
if (!confirm('Replace DNA in ' + count + ' wells with copy?')) |
3449 |
28 Jul 15 |
olle |
1891 |
{ |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1893 |
} |
3449 |
28 Jul 15 |
olle |
1894 |
} |
3449 |
28 Jul 15 |
olle |
1895 |
|
3449 |
28 Jul 15 |
olle |
var wi = 0; |
3449 |
28 Jul 15 |
olle |
var ci = 0; |
3449 |
28 Jul 15 |
olle |
var copyEmpty; |
3449 |
28 Jul 15 |
olle |
var askIfEmpty = true; |
3449 |
28 Jul 15 |
olle |
var repaint = []; |
3449 |
28 Jul 15 |
olle |
1901 |
|
3449 |
28 Jul 15 |
olle |
while (wi < wells.length && ci < copy.length) |
3449 |
28 Jul 15 |
olle |
1903 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[wi]; |
3449 |
28 Jul 15 |
olle |
var cp = copy[ci]; |
3449 |
28 Jul 15 |
olle |
var dna = null; |
3449 |
28 Jul 15 |
olle |
var name = null; |
3449 |
28 Jul 15 |
olle |
cp.well.doneWithCopy(); |
3449 |
28 Jul 15 |
olle |
repaint[repaint.length] = cp.well; |
3449 |
28 Jul 15 |
olle |
if (cp.name) |
3449 |
28 Jul 15 |
olle |
1911 |
{ |
3449 |
28 Jul 15 |
olle |
name = cp.name; |
3449 |
28 Jul 15 |
olle |
var suffixIndex = name.indexOf('.fpa'); |
3449 |
28 Jul 15 |
olle |
if (suffixIndex >= 0) |
3449 |
28 Jul 15 |
olle |
1915 |
{ |
3449 |
28 Jul 15 |
olle |
name = name.substring(0, suffixIndex); |
3449 |
28 Jul 15 |
olle |
1917 |
} |
3449 |
28 Jul 15 |
olle |
1918 |
/* |
3449 |
28 Jul 15 |
olle |
dna = Dna.createByName(cp.name); |
3449 |
28 Jul 15 |
olle |
1920 |
*/ |
3449 |
28 Jul 15 |
olle |
dna = Dna.createByName(name); |
3449 |
28 Jul 15 |
olle |
dna.comment = cp.comment; |
3449 |
28 Jul 15 |
olle |
1923 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
1925 |
{ |
3449 |
28 Jul 15 |
olle |
// The copy is from an empty well |
3449 |
28 Jul 15 |
olle |
if (askIfEmpty) |
3449 |
28 Jul 15 |
olle |
1928 |
{ |
3449 |
28 Jul 15 |
olle |
askIfEmpty = false; |
3449 |
28 Jul 15 |
olle |
copyEmpty = confirm('Do you want to copy empty wells? If not, only non-empty well are copied.'); |
3449 |
28 Jul 15 |
olle |
1931 |
} |
3449 |
28 Jul 15 |
olle |
1932 |
} |
3449 |
28 Jul 15 |
olle |
if (dna != null || copyEmpty) |
3449 |
28 Jul 15 |
olle |
1934 |
{ |
3449 |
28 Jul 15 |
olle |
// FPA |
3449 |
28 Jul 15 |
olle |
if (dna != null) |
3449 |
28 Jul 15 |
olle |
1937 |
{ |
3449 |
28 Jul 15 |
olle |
dna.name += '.fpa'; |
3449 |
28 Jul 15 |
olle |
1939 |
} |
3449 |
28 Jul 15 |
olle |
well.setExtract(dna); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
repaint[repaint.length] = well; |
3449 |
28 Jul 15 |
olle |
wi++; |
3449 |
28 Jul 15 |
olle |
// FPB sample in corresponding well on right side of plate |
3449 |
28 Jul 15 |
olle |
var row = well.row; |
3449 |
28 Jul 15 |
olle |
var column = well.column; |
3449 |
28 Jul 15 |
olle |
well = Plate.getWell(row, column + 6); |
3449 |
28 Jul 15 |
olle |
dna = null; |
3449 |
28 Jul 15 |
olle |
if (name) |
3449 |
28 Jul 15 |
olle |
1950 |
{ |
3449 |
28 Jul 15 |
olle |
dna = Dna.createByName(name); |
3449 |
28 Jul 15 |
olle |
dna.comment = cp.comment; |
3449 |
28 Jul 15 |
olle |
1953 |
} |
3449 |
28 Jul 15 |
olle |
if (dna != null) |
3449 |
28 Jul 15 |
olle |
1955 |
{ |
3449 |
28 Jul 15 |
olle |
dna.name += '.fpb'; |
3449 |
28 Jul 15 |
olle |
1957 |
} |
3449 |
28 Jul 15 |
olle |
well.setExtract(dna); |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
repaint[repaint.length] = well; |
3449 |
28 Jul 15 |
olle |
1961 |
} |
3449 |
28 Jul 15 |
olle |
ci++; |
3449 |
28 Jul 15 |
olle |
1963 |
} |
3449 |
28 Jul 15 |
olle |
Plate.paint(repaint); |
3449 |
28 Jul 15 |
olle |
copy.splice(0, ci); |
3449 |
28 Jul 15 |
olle |
Plate.checkReplicates(); |
3449 |
28 Jul 15 |
olle |
1967 |
} |
3449 |
28 Jul 15 |
olle |
1968 |
|
3449 |
28 Jul 15 |
olle |
1969 |
/* |
3449 |
28 Jul 15 |
olle |
If exactly two wells have been selected, switch the DNA in them. |
3449 |
28 Jul 15 |
olle |
1971 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.switchSelected = function(event) |
3449 |
28 Jul 15 |
olle |
1973 |
{ |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getSelected(); |
3449 |
28 Jul 15 |
olle |
1975 |
|
3449 |
28 Jul 15 |
olle |
if (wells.length != 2) |
3449 |
28 Jul 15 |
olle |
1977 |
{ |
3449 |
28 Jul 15 |
olle |
Forms.showNotification(event.currentTarget, 'Exactly 2 wells must be selected.'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
1980 |
} |
3449 |
28 Jul 15 |
olle |
1981 |
|
3449 |
28 Jul 15 |
olle |
1982 |
/* |
3449 |
28 Jul 15 |
olle |
var dna0 = wells[0].extract; |
3449 |
28 Jul 15 |
olle |
var dna1 = wells[1].extract; |
3449 |
28 Jul 15 |
olle |
1985 |
|
3449 |
28 Jul 15 |
olle |
wells[0].setExtract(dna1); |
3449 |
28 Jul 15 |
olle |
wells[1].setExtract(dna0); |
3449 |
28 Jul 15 |
olle |
Plate.paint(wells); |
3449 |
28 Jul 15 |
olle |
1989 |
*/ |
3449 |
28 Jul 15 |
olle |
var wellsArray = []; |
3449 |
28 Jul 15 |
olle |
// FPA |
3449 |
28 Jul 15 |
olle |
wellsArray[0] = wells[0]; |
3449 |
28 Jul 15 |
olle |
wellsArray[1] = wells[1]; |
3449 |
28 Jul 15 |
olle |
1994 |
|
3449 |
28 Jul 15 |
olle |
var dna0 = wells[0].extract; |
3449 |
28 Jul 15 |
olle |
var dna1 = wells[1].extract; |
3449 |
28 Jul 15 |
olle |
1997 |
|
3449 |
28 Jul 15 |
olle |
wells[0].setExtract(dna1); |
3449 |
28 Jul 15 |
olle |
wells[1].setExtract(dna0); |
3449 |
28 Jul 15 |
olle |
// FPB samples in corresponding wells on right side of plate |
3449 |
28 Jul 15 |
olle |
var wellsFpb = []; |
3449 |
28 Jul 15 |
olle |
for (var i=0; i<2; i++) |
3449 |
28 Jul 15 |
olle |
2003 |
{ |
3449 |
28 Jul 15 |
olle |
var row = wells[i].row; |
3449 |
28 Jul 15 |
olle |
var column = wells[i].column; |
3449 |
28 Jul 15 |
olle |
wellsFpb[i] = Plate.getWell(row, column + 6); |
3449 |
28 Jul 15 |
olle |
2007 |
} |
3449 |
28 Jul 15 |
olle |
wellsArray[2] = wellsFpb[0]; |
3449 |
28 Jul 15 |
olle |
wellsArray[3] = wellsFpb[1]; |
3449 |
28 Jul 15 |
olle |
2010 |
|
3449 |
28 Jul 15 |
olle |
dna0 = wellsFpb[0].extract; |
3449 |
28 Jul 15 |
olle |
dna1 = wellsFpb[1].extract; |
3449 |
28 Jul 15 |
olle |
2013 |
|
3449 |
28 Jul 15 |
olle |
wellsFpb[0].setExtract(dna1); |
3449 |
28 Jul 15 |
olle |
wellsFpb[1].setExtract(dna0); |
3449 |
28 Jul 15 |
olle |
2016 |
// |
3449 |
28 Jul 15 |
olle |
Plate.paint(wellsArray); |
3449 |
28 Jul 15 |
olle |
2018 |
} |
3449 |
28 Jul 15 |
olle |
2019 |
|
3449 |
28 Jul 15 |
olle |
// Toggle the 'special select' menu on and off |
3449 |
28 Jul 15 |
olle |
selectdna.toggleSpecialSelect = function(event) |
3449 |
28 Jul 15 |
olle |
2022 |
{ |
3449 |
28 Jul 15 |
olle |
var pos = Doc.getElementPosition('iconSpecialSelect'); |
3449 |
28 Jul 15 |
olle |
Menu.toggleTopMenu('menuSpecialSelect', pos.left+pos.width/4, pos.top+pos.height); |
3449 |
28 Jul 15 |
olle |
event.stopPropagation(); |
3449 |
28 Jul 15 |
olle |
2026 |
} |
3449 |
28 Jul 15 |
olle |
2027 |
|
3631 |
27 Nov 15 |
olle |
2028 |
/** |
3631 |
27 Nov 15 |
olle |
Open a pop-up dialog for manual selection of extracts. |
3631 |
27 Nov 15 |
olle |
2030 |
*/ |
3631 |
27 Nov 15 |
olle |
selectdna.manualSelectExtract = function(event) |
3631 |
27 Nov 15 |
olle |
2032 |
{ |
3631 |
27 Nov 15 |
olle |
if (subtypeDna == null) subtypeDna = Meludi.getSubtypeInfo('DNA'); |
3631 |
27 Nov 15 |
olle |
2034 |
|
3631 |
27 Nov 15 |
olle |
var url = '&resetTemporary=1'; |
3631 |
27 Nov 15 |
olle |
url += '&tmpfilter:INT:itemSubtype='+subtypeDna.id; |
3631 |
27 Nov 15 |
olle |
url += '&tmpfilter:STRING:name='+encodeURIComponent('%.d'); |
3631 |
27 Nov 15 |
olle |
url += '&tmpfilter:DATE:creationEvent.eventDate='+encodeURIComponent(''); |
3631 |
27 Nov 15 |
olle |
url += '&tmpfilter:FLOAT:remainingQuantity='+encodeURIComponent('>0'); |
3631 |
27 Nov 15 |
olle |
url += '&'+encodeURIComponent('tmpfilter:STRING:&childCreationEvents(event.bioMaterial.name)')+'='+encodeURIComponent(''); |
3631 |
27 Nov 15 |
olle |
2041 |
|
3631 |
27 Nov 15 |
olle |
Dialogs.selectItem('EXTRACT', 'plate', 1, url); |
3631 |
27 Nov 15 |
olle |
2043 |
} |
3631 |
27 Nov 15 |
olle |
2044 |
|
3631 |
27 Nov 15 |
olle |
2045 |
/** |
3631 |
27 Nov 15 |
olle |
Open a pop-up dialog for manual selection of controls. |
3631 |
27 Nov 15 |
olle |
2047 |
*/ |
3631 |
27 Nov 15 |
olle |
selectdna.manualSelectControl = function(event) |
3631 |
27 Nov 15 |
olle |
2049 |
{ |
3631 |
27 Nov 15 |
olle |
if (subtypeDna == null) subtypeDna = Meludi.getSubtypeInfo('DNA'); |
3631 |
27 Nov 15 |
olle |
2051 |
|
3631 |
27 Nov 15 |
olle |
var url = '&resetTemporary=1'; |
3631 |
27 Nov 15 |
olle |
url += '&tmpfilter:INT:itemSubtype='+subtypeDna.id; |
3631 |
27 Nov 15 |
olle |
url += '&tmpfilter:STRING:name='+encodeURIComponent('Horizon%.d'); |
3631 |
27 Nov 15 |
olle |
url += '&tmpfilter:DATE:creationEvent.eventDate='+encodeURIComponent(''); |
3631 |
27 Nov 15 |
olle |
url += '&tmpfilter:FLOAT:remainingQuantity='+encodeURIComponent('>0'); |
3631 |
27 Nov 15 |
olle |
url += '&'+encodeURIComponent('tmpfilter:STRING:&childCreationEvents(event.bioMaterial.name)')+'='+encodeURIComponent(''); |
3631 |
27 Nov 15 |
olle |
2058 |
|
3631 |
27 Nov 15 |
olle |
Dialogs.selectItem('EXTRACT', 'plate', 1, url); |
3631 |
27 Nov 15 |
olle |
2060 |
} |
3631 |
27 Nov 15 |
olle |
2061 |
|
3631 |
27 Nov 15 |
olle |
2062 |
/** |
3631 |
27 Nov 15 |
olle |
Callback method for re-setting manual extract selection. |
3631 |
27 Nov 15 |
olle |
2064 |
*/ |
3631 |
27 Nov 15 |
olle |
selectdna.manuallySelectedExtract = function(event) |
3631 |
27 Nov 15 |
olle |
2066 |
{ |
3631 |
27 Nov 15 |
olle |
names[names.length] = event.detail.name; |
3631 |
27 Nov 15 |
olle |
//alert("select_dna_for_start_plate.js::manuallySelectedExtract(): names.length = " + names.length + " names = " + JSON.stringify(names)); |
3631 |
27 Nov 15 |
olle |
2069 |
|
3631 |
27 Nov 15 |
olle |
selectdna.initializeStep3(event); |
3631 |
27 Nov 15 |
olle |
2071 |
} |
3631 |
27 Nov 15 |
olle |
2072 |
|
3631 |
27 Nov 15 |
olle |
selectdna.manualSelectReset = function() |
3631 |
27 Nov 15 |
olle |
2074 |
{ |
3631 |
27 Nov 15 |
olle |
// Reset JSONArray for names to original |
3631 |
27 Nov 15 |
olle |
names = []; |
3631 |
27 Nov 15 |
olle |
for (var i = 0; i < originalNames.length; i++) |
3631 |
27 Nov 15 |
olle |
2078 |
{ |
3631 |
27 Nov 15 |
olle |
var name = originalNames[i]; |
3631 |
27 Nov 15 |
olle |
names[names.length] = name; |
3631 |
27 Nov 15 |
olle |
2081 |
} |
3631 |
27 Nov 15 |
olle |
selectdna.initializeStep3(); |
3631 |
27 Nov 15 |
olle |
2083 |
} |
3631 |
27 Nov 15 |
olle |
2084 |
|
3449 |
28 Jul 15 |
olle |
var contextDNA = null; |
3449 |
28 Jul 15 |
olle |
var contextX; |
3449 |
28 Jul 15 |
olle |
var contextY; |
3449 |
28 Jul 15 |
olle |
2088 |
/** |
3449 |
28 Jul 15 |
olle |
Reacts to 'mouseup' and 'contextmenu' events for the bioplate. |
3449 |
28 Jul 15 |
olle |
This should bring up the cut/copy/paste context menu depending on which |
3449 |
28 Jul 15 |
olle |
mouse button that was clicked. |
3449 |
28 Jul 15 |
olle |
2092 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.contextEvent = function(event) |
3449 |
28 Jul 15 |
olle |
2094 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
// Context menu on 'right' mouse button |
3449 |
28 Jul 15 |
olle |
// Can't just check the button since two events are sent ('mouseup' and 'contextmenu') |
3449 |
28 Jul 15 |
olle |
var showContext = event.type == 'contextmenu' && event.button == 2; |
3449 |
28 Jul 15 |
olle |
2099 |
|
3449 |
28 Jul 15 |
olle |
if (showContext) |
3449 |
28 Jul 15 |
olle |
2101 |
{ |
3449 |
28 Jul 15 |
olle |
event.preventDefault(); // Prevents the default right-click menu from appearing |
3449 |
28 Jul 15 |
olle |
2103 |
|
3449 |
28 Jul 15 |
olle |
// Get the well that is right-clicked and the DNA that is in it |
3449 |
28 Jul 15 |
olle |
contextDNA = null; |
3449 |
28 Jul 15 |
olle |
var well = event.target; |
3449 |
28 Jul 15 |
olle |
while (well && (!well.id || well.id.indexOf('well') != 0)) |
3449 |
28 Jul 15 |
olle |
2108 |
{ |
3449 |
28 Jul 15 |
olle |
well = well.parentNode; |
3449 |
28 Jul 15 |
olle |
2110 |
} |
3449 |
28 Jul 15 |
olle |
if (well) |
3449 |
28 Jul 15 |
olle |
2112 |
{ |
3449 |
28 Jul 15 |
olle |
var c = well.id.split(/\./); |
3449 |
28 Jul 15 |
olle |
contextDNA = Plate.getWell(parseInt(c[1]), parseInt(c[2])).extract; |
3449 |
28 Jul 15 |
olle |
2115 |
} |
3449 |
28 Jul 15 |
olle |
// Update the context meny |
3449 |
28 Jul 15 |
olle |
var caseSummaryMenu = Doc.element('mnuCaseSummary'); |
3449 |
28 Jul 15 |
olle |
if (contextDNA) |
3449 |
28 Jul 15 |
olle |
2119 |
{ |
3449 |
28 Jul 15 |
olle |
caseSummaryMenu.title = 'Show case summary for ' + Strings.encodeTags(contextDNA.name); |
3449 |
28 Jul 15 |
olle |
Doc.show('sepCaseSummary'); |
3449 |
28 Jul 15 |
olle |
Doc.show('mnuCaseSummary'); |
3449 |
28 Jul 15 |
olle |
2123 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
2125 |
{ |
3449 |
28 Jul 15 |
olle |
Doc.hide('sepCaseSummary'); |
3449 |
28 Jul 15 |
olle |
Doc.hide('mnuCaseSummary'); |
3449 |
28 Jul 15 |
olle |
2128 |
} |
3449 |
28 Jul 15 |
olle |
2129 |
|
3449 |
28 Jul 15 |
olle |
var menu = Doc.element('menuContext'); |
3449 |
28 Jul 15 |
olle |
// 1 pixel offset to avoid losing well focus outline |
3449 |
28 Jul 15 |
olle |
contextX = event.clientX+1; |
3449 |
28 Jul 15 |
olle |
contextY = event.clientY+1; |
3449 |
28 Jul 15 |
olle |
// Need short delay since 'mouseup' are also sent as 'click' events |
3449 |
28 Jul 15 |
olle |
// to the 'document' object which BASE already have a Menu.hideAll() |
3449 |
28 Jul 15 |
olle |
// call which would hide the menu immediately |
3449 |
28 Jul 15 |
olle |
setTimeout(selectdna.showContextMenu, 100); |
3449 |
28 Jul 15 |
olle |
2138 |
} |
3449 |
28 Jul 15 |
olle |
2139 |
} |
3449 |
28 Jul 15 |
olle |
2140 |
|
3449 |
28 Jul 15 |
olle |
selectdna.showContextMenu = function() |
3449 |
28 Jul 15 |
olle |
2142 |
{ |
3449 |
28 Jul 15 |
olle |
Menu.showTopMenu('menuContext', contextX, contextY); |
3449 |
28 Jul 15 |
olle |
2144 |
} |
3449 |
28 Jul 15 |
olle |
2145 |
|
3449 |
28 Jul 15 |
olle |
selectdna.showCaseSummary = function() |
3449 |
28 Jul 15 |
olle |
2147 |
{ |
3449 |
28 Jul 15 |
olle |
if (!contextDNA) return; |
3449 |
28 Jul 15 |
olle |
var caseName = contextDNA.name; |
3449 |
28 Jul 15 |
olle |
// Remove suffix starting with dot "." |
3449 |
28 Jul 15 |
olle |
var firstDotIndex = caseName.indexOf("."); |
3449 |
28 Jul 15 |
olle |
if (firstDotIndex >= 0) |
3449 |
28 Jul 15 |
olle |
2153 |
{ |
3449 |
28 Jul 15 |
olle |
caseName = caseName.substring(0, firstDotIndex); |
3449 |
28 Jul 15 |
olle |
2155 |
} |
3449 |
28 Jul 15 |
olle |
var url = '../reports/case_summary.jsp?ID='+App.getSessionId(); |
3449 |
28 Jul 15 |
olle |
url += '&caseName='+encodeURIComponent(caseName); |
3449 |
28 Jul 15 |
olle |
url += '&pageType=popup'; |
3449 |
28 Jul 15 |
olle |
Dialogs.openPopup(url, 'CaseSummary'+caseName, 1000, 700); |
3449 |
28 Jul 15 |
olle |
2160 |
} |
3449 |
28 Jul 15 |
olle |
2161 |
|
3449 |
28 Jul 15 |
olle |
selectdna.showFlaggedDna = function() |
3449 |
28 Jul 15 |
olle |
2163 |
{ |
3449 |
28 Jul 15 |
olle |
currentSelected = Plate.getSelected(); |
3449 |
28 Jul 15 |
olle |
currentIndex = 0; |
3449 |
28 Jul 15 |
olle |
2166 |
|
3449 |
28 Jul 15 |
olle |
var flagged = Dna.getFlagged(); |
3449 |
28 Jul 15 |
olle |
var url = 'show_flagged_dna.jsp?ID='+App.getSessionId(); |
3449 |
28 Jul 15 |
olle |
url += '&numFlagged='+flagged.length; |
3449 |
28 Jul 15 |
olle |
url += '&numSelected='+currentSelected.length; |
3449 |
28 Jul 15 |
olle |
Dialogs.openPopup(url, 'FlaggedDna', 800, 500); |
3449 |
28 Jul 15 |
olle |
2172 |
} |
3449 |
28 Jul 15 |
olle |
2173 |
|
3449 |
28 Jul 15 |
olle |
2174 |
|
3449 |
28 Jul 15 |
olle |
//Flag the selected DNA |
3449 |
28 Jul 15 |
olle |
selectdna.flagSelected = function(event) |
3449 |
28 Jul 15 |
olle |
2177 |
{ |
3449 |
28 Jul 15 |
olle |
var flag = Data.get(event.currentTarget, 'flag'); |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getSelected(); |
3449 |
28 Jul 15 |
olle |
2180 |
|
3449 |
28 Jul 15 |
olle |
if (wells.length == 0) |
3449 |
28 Jul 15 |
olle |
2182 |
{ |
3449 |
28 Jul 15 |
olle |
Forms.showNotification(event.currentTarget, 'No wells have been selected.'); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
2185 |
} |
3449 |
28 Jul 15 |
olle |
2186 |
|
3449 |
28 Jul 15 |
olle |
var comment = null; |
3449 |
28 Jul 15 |
olle |
if (flag == 'ManualFlag') |
3449 |
28 Jul 15 |
olle |
2189 |
{ |
3449 |
28 Jul 15 |
olle |
// Check if a comment has been set on any of the DNA |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
2192 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
if (well.extract && well.extract.info) |
3449 |
28 Jul 15 |
olle |
2195 |
{ |
3449 |
28 Jul 15 |
olle |
if (well.extract.info.comment) comment = well.extract.info.comment; |
3449 |
28 Jul 15 |
olle |
2197 |
} |
3449 |
28 Jul 15 |
olle |
2198 |
} |
3449 |
28 Jul 15 |
olle |
comment = prompt('Comment', comment || ''); |
3449 |
28 Jul 15 |
olle |
if (!comment) return; |
3449 |
28 Jul 15 |
olle |
2201 |
} |
3449 |
28 Jul 15 |
olle |
2202 |
|
3449 |
28 Jul 15 |
olle |
var count = 0; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
2205 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
var dna = well.extract; |
3449 |
28 Jul 15 |
olle |
if (dna && !dna.stratagene && !dna.external) |
3449 |
28 Jul 15 |
olle |
2209 |
{ |
3449 |
28 Jul 15 |
olle |
Dna.flag(dna, flag); |
3449 |
28 Jul 15 |
olle |
dna.info.comment = comment; |
3449 |
28 Jul 15 |
olle |
well.setExtract(null); |
3449 |
28 Jul 15 |
olle |
count++; |
3449 |
28 Jul 15 |
olle |
2214 |
} |
3449 |
28 Jul 15 |
olle |
well.selected = false; |
3449 |
28 Jul 15 |
olle |
2216 |
} |
3449 |
28 Jul 15 |
olle |
2217 |
|
3449 |
28 Jul 15 |
olle |
selectdna.updateNumFlaggedDna(); |
3449 |
28 Jul 15 |
olle |
Plate.paint(wells); |
3449 |
28 Jul 15 |
olle |
2220 |
} |
3449 |
28 Jul 15 |
olle |
2221 |
|
3573 |
05 Nov 15 |
olle |
selectdna.validateStep4 = function(event) |
3449 |
28 Jul 15 |
olle |
2223 |
{ |
3449 |
28 Jul 15 |
olle |
if (!quantitiesAreValid) |
3449 |
28 Jul 15 |
olle |
2225 |
{ |
3449 |
28 Jul 15 |
olle |
event.preventDefault(); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
2228 |
} |
3449 |
28 Jul 15 |
olle |
2229 |
|
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var numErrors = 0; |
3449 |
28 Jul 15 |
olle |
var numWarnings = 0; |
3449 |
28 Jul 15 |
olle |
var numDna = 0; |
3449 |
28 Jul 15 |
olle |
var numStratagene = 0; |
3449 |
28 Jul 15 |
olle |
var numExternal = 0; |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getWells(); |
3449 |
28 Jul 15 |
olle |
var schema = PoolSchema.getById(frm.pool_schema.value); |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
2239 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
var dna = well.extract; |
3449 |
28 Jul 15 |
olle |
if (well.hasWarning()) |
3449 |
28 Jul 15 |
olle |
2243 |
{ |
3449 |
28 Jul 15 |
olle |
numWarnings++; |
3449 |
28 Jul 15 |
olle |
2245 |
} |
3449 |
28 Jul 15 |
olle |
if (well.hasError()) |
3449 |
28 Jul 15 |
olle |
2247 |
{ |
3449 |
28 Jul 15 |
olle |
numErrors++; |
3449 |
28 Jul 15 |
olle |
2249 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
2251 |
{ |
3449 |
28 Jul 15 |
olle |
if (dna && dna.id) |
3449 |
28 Jul 15 |
olle |
2253 |
{ |
3449 |
28 Jul 15 |
olle |
numDna++; |
3449 |
28 Jul 15 |
olle |
if (dna.stratagene) numStratagene++; |
3449 |
28 Jul 15 |
olle |
if (dna.external) numExternal++; |
3449 |
28 Jul 15 |
olle |
2257 |
} |
3449 |
28 Jul 15 |
olle |
2258 |
} |
3449 |
28 Jul 15 |
olle |
2259 |
} |
3449 |
28 Jul 15 |
olle |
2260 |
|
3449 |
28 Jul 15 |
olle |
if (numErrors > 0) |
3449 |
28 Jul 15 |
olle |
2262 |
{ |
3449 |
28 Jul 15 |
olle |
event.preventDefault(); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
2265 |
} |
3449 |
28 Jul 15 |
olle |
2266 |
|
3449 |
28 Jul 15 |
olle |
if (numDna == 0) |
3449 |
28 Jul 15 |
olle |
2268 |
{ |
3449 |
28 Jul 15 |
olle |
alert('There is no DNA in any wells'); |
3449 |
28 Jul 15 |
olle |
event.preventDefault(); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
2272 |
} |
3449 |
28 Jul 15 |
olle |
2273 |
|
3449 |
28 Jul 15 |
olle |
if (numWarnings > 0) |
3449 |
28 Jul 15 |
olle |
2275 |
{ |
3449 |
28 Jul 15 |
olle |
if (!confirm('There are ' + numWarnings + ' wells with a warning. Continue anyway?')) |
3449 |
28 Jul 15 |
olle |
2277 |
{ |
3449 |
28 Jul 15 |
olle |
event.preventDefault(); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
2280 |
} |
3449 |
28 Jul 15 |
olle |
2281 |
} |
3449 |
28 Jul 15 |
olle |
2282 |
|
3449 |
28 Jul 15 |
olle |
if (schema) |
3449 |
28 Jul 15 |
olle |
2284 |
{ |
3449 |
28 Jul 15 |
olle |
var numPrimary = schema.numPools * schema.numWellsPerPool; |
3449 |
28 Jul 15 |
olle |
if (numDna < numPrimary) |
3449 |
28 Jul 15 |
olle |
2287 |
{ |
3449 |
28 Jul 15 |
olle |
if (!confirm((numPrimary-numDna)+ ' primary wells are missing DNA. Continue anyway?')) |
3449 |
28 Jul 15 |
olle |
2289 |
{ |
3449 |
28 Jul 15 |
olle |
event.preventDefault(); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
2292 |
} |
3449 |
28 Jul 15 |
olle |
2293 |
} |
3449 |
28 Jul 15 |
olle |
2294 |
} |
3449 |
28 Jul 15 |
olle |
2295 |
|
3449 |
28 Jul 15 |
olle |
if (numDna == numStratagene+numExternal) |
3449 |
28 Jul 15 |
olle |
2297 |
{ |
3449 |
28 Jul 15 |
olle |
if (!confirm('There are only wells with Stratagene or external DNA on this plate. Continue anyway?')) |
3449 |
28 Jul 15 |
olle |
2299 |
{ |
3449 |
28 Jul 15 |
olle |
event.preventDefault(); |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
2302 |
} |
3449 |
28 Jul 15 |
olle |
2303 |
} |
3449 |
28 Jul 15 |
olle |
2304 |
|
3449 |
28 Jul 15 |
olle |
2305 |
} |
3449 |
28 Jul 15 |
olle |
2306 |
|
3624 |
25 Nov 15 |
olle |
selectdna.downloadLibPrepFile = function() |
3624 |
25 Nov 15 |
olle |
2308 |
{ |
3624 |
25 Nov 15 |
olle |
var frm = document.forms['meludi']; |
3624 |
25 Nov 15 |
olle |
var isNeoPrep = Data.int('page-data', 'is-neoprep'); |
3624 |
25 Nov 15 |
olle |
2311 |
|
3624 |
25 Nov 15 |
olle |
var submitInfo = {}; |
3624 |
25 Nov 15 |
olle |
2313 |
|
3624 |
25 Nov 15 |
olle |
var libraryPreparationProtocolName = ''; |
3624 |
25 Nov 15 |
olle |
var libraryPreparationProtocol = frm.libraryPreparationProtocol.value; |
3624 |
25 Nov 15 |
olle |
if (libraryPreparationProtocol) |
3624 |
25 Nov 15 |
olle |
2317 |
{ |
3624 |
25 Nov 15 |
olle |
libraryPreparationProtocolName = protocolMap[libraryPreparationProtocol]; |
3624 |
25 Nov 15 |
olle |
2319 |
} |
3624 |
25 Nov 15 |
olle |
submitInfo.libraryPreparationProtocol = parseInt(libraryPreparationProtocol, 10); |
3624 |
25 Nov 15 |
olle |
submitInfo.libraryPreparationProtocolName = libraryPreparationProtocolName; |
3685 |
12 Jan 16 |
olle |
submitInfo.bioplate = selectdna.fetchBioplateData(); |
3685 |
12 Jan 16 |
olle |
2323 |
|
3685 |
12 Jan 16 |
olle |
var url = '../LibPrep.servlet?ID='+App.getSessionId(); |
3685 |
12 Jan 16 |
olle |
url += '&cmd=PrepareDownloadLibPrepFile'; |
3685 |
12 Jan 16 |
olle |
url += '&referenceName='+encodeURIComponent(frm.plateName.value); |
3685 |
12 Jan 16 |
olle |
2327 |
|
3685 |
12 Jan 16 |
olle |
// POST |
3685 |
12 Jan 16 |
olle |
Wizard.showLoadingAnimation('Performing registration...'); |
3685 |
12 Jan 16 |
olle |
Wizard.asyncJsonRequest(url, selectdna.downloadLibPrepFileResults, 'POST', JSON.stringify(submitInfo)); |
3685 |
12 Jan 16 |
olle |
2331 |
} |
3685 |
12 Jan 16 |
olle |
2332 |
|
3685 |
12 Jan 16 |
olle |
selectdna.fetchBioplateData = function() |
3685 |
12 Jan 16 |
olle |
2334 |
{ |
3685 |
12 Jan 16 |
olle |
var frm = document.forms['meludi']; |
3685 |
12 Jan 16 |
olle |
var isNeoPrep = Data.int('page-data', 'is-neoprep'); |
3624 |
25 Nov 15 |
olle |
var schema = PoolSchema.getById(frm.pool_schema.value); |
3685 |
12 Jan 16 |
olle |
2338 |
|
3685 |
12 Jan 16 |
olle |
var plateInfo = {}; |
3685 |
12 Jan 16 |
olle |
plateInfo.id = Plate.id; |
3624 |
25 Nov 15 |
olle |
plateInfo.name = Plate.name; |
3624 |
25 Nov 15 |
olle |
plateInfo.comments = frm.comments.value; |
3685 |
12 Jan 16 |
olle |
plateInfo.kitName = frm.tsLibPrepKit.value; |
3624 |
25 Nov 15 |
olle |
plateInfo.kitId = frm.hiddenLibPrepKitId.value; |
3624 |
25 Nov 15 |
olle |
plateInfo.plateType = isNeoPrep ? 'NEOPREP' : 'DNA'; |
3624 |
25 Nov 15 |
olle |
plateInfo.poolSchema = schema ? schema.id : null; |
3624 |
25 Nov 15 |
olle |
if (isNeoPrep) |
3624 |
25 Nov 15 |
olle |
2348 |
{ |
3624 |
25 Nov 15 |
olle |
plateInfo.barcodeVariant = frm.barcode_variant.value; |
3624 |
25 Nov 15 |
olle |
2350 |
} |
3624 |
25 Nov 15 |
olle |
plateInfo.wells = []; |
3624 |
25 Nov 15 |
olle |
2352 |
|
3624 |
25 Nov 15 |
olle |
var wells = Plate.getWells(); |
3624 |
25 Nov 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3624 |
25 Nov 15 |
olle |
2355 |
{ |
3624 |
25 Nov 15 |
olle |
var well = wells[i]; |
3624 |
25 Nov 15 |
olle |
var dna = well.extract; |
3667 |
15 Dec 15 |
olle |
if (dna && dna.info.origId) |
3624 |
25 Nov 15 |
olle |
2359 |
{ |
3624 |
25 Nov 15 |
olle |
var tmp = {}; |
3624 |
25 Nov 15 |
olle |
tmp.row = well.row; |
3624 |
25 Nov 15 |
olle |
tmp.column = well.column; |
3624 |
25 Nov 15 |
olle |
tmp.dna = {}; |
3667 |
15 Dec 15 |
olle |
tmp.dna.id = dna.info.origId; |
3624 |
25 Nov 15 |
olle |
tmp.dna.usedQuantity = dna.usedQuantity; |
3624 |
25 Nov 15 |
olle |
tmp.dna.dilutionConc = dna.dilutionConc; |
3624 |
25 Nov 15 |
olle |
tmp.dna.qc = dna.qc; |
3624 |
25 Nov 15 |
olle |
tmp.dna.comment = dna.comment; |
3624 |
25 Nov 15 |
olle |
if (well.barcode) |
3624 |
25 Nov 15 |
olle |
2370 |
{ |
3624 |
25 Nov 15 |
olle |
tmp.dna.barcode = well.barcode; |
3624 |
25 Nov 15 |
olle |
2372 |
} |
3624 |
25 Nov 15 |
olle |
plateInfo.wells[plateInfo.wells.length] = tmp; |
3624 |
25 Nov 15 |
olle |
2374 |
} |
3624 |
25 Nov 15 |
olle |
2375 |
} |
3685 |
12 Jan 16 |
olle |
2376 |
|
3685 |
12 Jan 16 |
olle |
return plateInfo; |
3624 |
25 Nov 15 |
olle |
2378 |
} |
3624 |
25 Nov 15 |
olle |
2379 |
|
3624 |
25 Nov 15 |
olle |
selectdna.downloadLibPrepFileResults = function(response) |
3624 |
25 Nov 15 |
olle |
2381 |
{ |
3624 |
25 Nov 15 |
olle |
var tmpFilePath = response; |
3624 |
25 Nov 15 |
olle |
var frm = document.forms['meludi']; |
3624 |
25 Nov 15 |
olle |
var url = '../LibPrep.servlet?ID='+App.getSessionId(); |
3624 |
25 Nov 15 |
olle |
url += '&cmd=DownloadLibPrepFile'; |
3624 |
25 Nov 15 |
olle |
url += '&referenceName='+encodeURIComponent(frm.plateName.value); |
3624 |
25 Nov 15 |
olle |
url += '&tmpFilePath='+encodeURIComponent(tmpFilePath); |
3624 |
25 Nov 15 |
olle |
window.open(url); |
3624 |
25 Nov 15 |
olle |
2389 |
} |
3624 |
25 Nov 15 |
olle |
2390 |
|
3449 |
28 Jul 15 |
olle |
selectdna.submit = function() |
3449 |
28 Jul 15 |
olle |
2392 |
{ |
3449 |
28 Jul 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var isNeoPrep = Data.int('page-data', 'is-neoprep'); |
3449 |
28 Jul 15 |
olle |
2395 |
|
3449 |
28 Jul 15 |
olle |
var submitInfo = {}; |
3449 |
28 Jul 15 |
olle |
var plateInfo = {}; |
3449 |
28 Jul 15 |
olle |
var flaggedDnaInfo = []; |
3449 |
28 Jul 15 |
olle |
2399 |
|
3619 |
23 Nov 15 |
olle |
var libraryPreparationProtocolName = ''; |
3619 |
23 Nov 15 |
olle |
var libraryPreparationProtocol = frm.libraryPreparationProtocol.value; |
3619 |
23 Nov 15 |
olle |
if (libraryPreparationProtocol) |
3619 |
23 Nov 15 |
olle |
2403 |
{ |
3619 |
23 Nov 15 |
olle |
libraryPreparationProtocolName = protocolMap[libraryPreparationProtocol]; |
3619 |
23 Nov 15 |
olle |
2405 |
} |
3619 |
23 Nov 15 |
olle |
submitInfo.libraryPreparationProtocol = parseInt(libraryPreparationProtocol, 10); |
3619 |
23 Nov 15 |
olle |
submitInfo.libraryPreparationProtocolName = libraryPreparationProtocolName; |
3449 |
28 Jul 15 |
olle |
submitInfo.bioplate = plateInfo; |
3449 |
28 Jul 15 |
olle |
submitInfo.flagged = flaggedDnaInfo; |
3449 |
28 Jul 15 |
olle |
var schema = PoolSchema.getById(frm.pool_schema.value); |
3675 |
18 Dec 15 |
olle |
2411 |
|
3449 |
28 Jul 15 |
olle |
plateInfo.name = Plate.name; |
3449 |
28 Jul 15 |
olle |
plateInfo.comments = frm.comments.value; |
3685 |
12 Jan 16 |
olle |
plateInfo.kitName = frm.tsLibPrepKit.value; |
3621 |
25 Nov 15 |
olle |
plateInfo.kitId = frm.hiddenLibPrepKitId.value; |
3449 |
28 Jul 15 |
olle |
plateInfo.plateType = isNeoPrep ? 'NEOPREP' : 'DNA'; |
3449 |
28 Jul 15 |
olle |
plateInfo.poolSchema = schema ? schema.id : null; |
3449 |
28 Jul 15 |
olle |
if (isNeoPrep) |
3449 |
28 Jul 15 |
olle |
2419 |
{ |
3449 |
28 Jul 15 |
olle |
plateInfo.barcodeVariant = frm.barcode_variant.value; |
3449 |
28 Jul 15 |
olle |
2421 |
} |
3449 |
28 Jul 15 |
olle |
plateInfo.wells = []; |
3449 |
28 Jul 15 |
olle |
2423 |
|
3449 |
28 Jul 15 |
olle |
var wells = Plate.getWells(); |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3449 |
28 Jul 15 |
olle |
2426 |
{ |
3449 |
28 Jul 15 |
olle |
var well = wells[i]; |
3449 |
28 Jul 15 |
olle |
var dna = well.extract; |
3671 |
17 Dec 15 |
olle |
if (dna && dna.info.origId) |
3449 |
28 Jul 15 |
olle |
2430 |
{ |
3449 |
28 Jul 15 |
olle |
var tmp = {}; |
3449 |
28 Jul 15 |
olle |
tmp.row = well.row; |
3449 |
28 Jul 15 |
olle |
tmp.column = well.column; |
3449 |
28 Jul 15 |
olle |
tmp.dna = {}; |
3671 |
17 Dec 15 |
olle |
tmp.dna.id = dna.info.origId; |
3449 |
28 Jul 15 |
olle |
tmp.dna.usedQuantity = dna.usedQuantity; |
3449 |
28 Jul 15 |
olle |
tmp.dna.dilutionConc = dna.dilutionConc; |
3449 |
28 Jul 15 |
olle |
tmp.dna.qc = dna.qc; |
3449 |
28 Jul 15 |
olle |
tmp.dna.comment = dna.comment; |
3449 |
28 Jul 15 |
olle |
if (well.barcode) |
3449 |
28 Jul 15 |
olle |
2441 |
{ |
3449 |
28 Jul 15 |
olle |
tmp.dna.barcode = well.barcode; |
3449 |
28 Jul 15 |
olle |
2443 |
} |
3449 |
28 Jul 15 |
olle |
plateInfo.wells[plateInfo.wells.length] = tmp; |
3449 |
28 Jul 15 |
olle |
2445 |
} |
3449 |
28 Jul 15 |
olle |
2446 |
} |
3449 |
28 Jul 15 |
olle |
2447 |
|
3449 |
28 Jul 15 |
olle |
var flagged = Dna.getFlagged(); |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < flagged.length; i++) |
3449 |
28 Jul 15 |
olle |
2450 |
{ |
3449 |
28 Jul 15 |
olle |
var dna = flagged[i]; |
3449 |
28 Jul 15 |
olle |
var tmp = {}; |
3449 |
28 Jul 15 |
olle |
tmp.id = dna.id; |
3449 |
28 Jul 15 |
olle |
tmp.flag = dna.flag; |
3449 |
28 Jul 15 |
olle |
tmp.comment = dna.comment; |
3449 |
28 Jul 15 |
olle |
flaggedDnaInfo[flaggedDnaInfo.length] = tmp; |
3449 |
28 Jul 15 |
olle |
2457 |
} |
3449 |
28 Jul 15 |
olle |
2458 |
|
3449 |
28 Jul 15 |
olle |
var url = '../Dna.servlet?ID='+App.getSessionId(); |
3449 |
28 Jul 15 |
olle |
url += '&cmd=CreateDnaOrLibPlate'; |
3619 |
23 Nov 15 |
olle |
url += '&libraryPreparationProtocol=' + parseInt(frm.libraryPreparationProtocol.value, 10); |
3619 |
23 Nov 15 |
olle |
url += '&libraryPreparationProtocolName=' + libraryPreparationProtocolName; |
3449 |
28 Jul 15 |
olle |
Wizard.showLoadingAnimation('Performing registration...'); |
3449 |
28 Jul 15 |
olle |
Wizard.asyncJsonRequest(url, selectdna.submissionResults, 'POST', JSON.stringify(submitInfo)); |
3449 |
28 Jul 15 |
olle |
2465 |
} |
3449 |
28 Jul 15 |
olle |
2466 |
|
3449 |
28 Jul 15 |
olle |
selectdna.submissionResults = function(response) |
3449 |
28 Jul 15 |
olle |
2468 |
{ |
3626 |
26 Nov 15 |
olle |
var frm = document.forms['meludi']; |
3626 |
26 Nov 15 |
olle |
var isNeoPrep = Data.int('page-data', 'is-neoprep'); |
3626 |
26 Nov 15 |
olle |
var schema = PoolSchema.getById(frm.pool_schema.value); |
3626 |
26 Nov 15 |
olle |
2472 |
|
3626 |
26 Nov 15 |
olle |
//Wizard.showFinalMessage(response.messages); |
3626 |
26 Nov 15 |
olle |
2474 |
|
3626 |
26 Nov 15 |
olle |
// Update data for used kit regarding used wells for new plate |
3626 |
26 Nov 15 |
olle |
var submitInfo = {}; |
3626 |
26 Nov 15 |
olle |
// Add transferred messages |
3626 |
26 Nov 15 |
olle |
submitInfo.transferredMessages = response.messages; |
3626 |
26 Nov 15 |
olle |
2479 |
|
3626 |
26 Nov 15 |
olle |
var plateInfo = {}; |
3626 |
26 Nov 15 |
olle |
submitInfo.bioplate = plateInfo; |
3626 |
26 Nov 15 |
olle |
plateInfo.name = Plate.name; |
3626 |
26 Nov 15 |
olle |
plateInfo.comments = frm.comments.value; |
3685 |
12 Jan 16 |
olle |
plateInfo.kitName = frm.tsLibPrepKit.value; |
3626 |
26 Nov 15 |
olle |
plateInfo.kitId = frm.hiddenLibPrepKitId.value; |
3626 |
26 Nov 15 |
olle |
plateInfo.plateType = isNeoPrep ? 'NEOPREP' : 'DNA'; |
3626 |
26 Nov 15 |
olle |
plateInfo.poolSchema = schema ? schema.id : null; |
3626 |
26 Nov 15 |
olle |
plateInfo.wells = []; |
3626 |
26 Nov 15 |
olle |
2489 |
|
3626 |
26 Nov 15 |
olle |
var wells = Plate.getWells(); |
3626 |
26 Nov 15 |
olle |
for (var i = 0; i < wells.length; i++) |
3626 |
26 Nov 15 |
olle |
2492 |
{ |
3626 |
26 Nov 15 |
olle |
var well = wells[i]; |
3626 |
26 Nov 15 |
olle |
var dna = well.extract; |
3671 |
17 Dec 15 |
olle |
if (dna && dna.info.origId) |
3626 |
26 Nov 15 |
olle |
2496 |
{ |
3626 |
26 Nov 15 |
olle |
var tmp = {}; |
3626 |
26 Nov 15 |
olle |
tmp.row = well.row; |
3626 |
26 Nov 15 |
olle |
tmp.column = well.column; |
3626 |
26 Nov 15 |
olle |
tmp.dna = {}; |
3671 |
17 Dec 15 |
olle |
tmp.dna.id = dna.info.origId; |
3626 |
26 Nov 15 |
olle |
tmp.dna.usedQuantity = dna.usedQuantity; |
3626 |
26 Nov 15 |
olle |
tmp.dna.dilutionConc = dna.dilutionConc; |
3626 |
26 Nov 15 |
olle |
tmp.dna.qc = dna.qc; |
3626 |
26 Nov 15 |
olle |
tmp.dna.comment = dna.comment; |
3626 |
26 Nov 15 |
olle |
if (well.barcode) |
3626 |
26 Nov 15 |
olle |
2507 |
{ |
3626 |
26 Nov 15 |
olle |
tmp.dna.barcode = well.barcode; |
3626 |
26 Nov 15 |
olle |
2509 |
} |
3626 |
26 Nov 15 |
olle |
plateInfo.wells[plateInfo.wells.length] = tmp; |
3626 |
26 Nov 15 |
olle |
2511 |
} |
3626 |
26 Nov 15 |
olle |
2512 |
} |
3626 |
26 Nov 15 |
olle |
var url = '../LibPrep.servlet?ID='+App.getSessionId(); |
3627 |
26 Nov 15 |
olle |
url += '&cmd=RegisterKits'; |
3685 |
12 Jan 16 |
olle |
url += '&referenceName='+encodeURIComponent(frm.tsLibPrepKit.value); |
3626 |
26 Nov 15 |
olle |
url += '&overwrite=true'; |
3626 |
26 Nov 15 |
olle |
url += '&update=true'; |
3626 |
26 Nov 15 |
olle |
Wizard.showLoadingAnimation('Performing registration...'); |
3626 |
26 Nov 15 |
olle |
Wizard.asyncJsonRequest(url, selectdna.updateKitDataResults, 'POST', JSON.stringify(submitInfo)); |
3626 |
26 Nov 15 |
olle |
2520 |
|
3626 |
26 Nov 15 |
olle |
Doc.show('gorestart'); |
3626 |
26 Nov 15 |
olle |
2522 |
} |
3626 |
26 Nov 15 |
olle |
2523 |
|
3626 |
26 Nov 15 |
olle |
selectdna.updateKitDataResults = function(response) |
3626 |
26 Nov 15 |
olle |
2525 |
{ |
3449 |
28 Jul 15 |
olle |
Wizard.showFinalMessage(response.messages); |
3449 |
28 Jul 15 |
olle |
Doc.show('gorestart'); |
3449 |
28 Jul 15 |
olle |
2528 |
} |
3590 |
11 Nov 15 |
olle |
2529 |
|
3685 |
12 Jan 16 |
olle |
selectdna.viewProtocol = function(event) |
3685 |
12 Jan 16 |
olle |
2531 |
{ |
3685 |
12 Jan 16 |
olle |
var frm = document.forms['meludi2']; |
3685 |
12 Jan 16 |
olle |
var bioplateData = selectdna.fetchBioplateData(); |
3685 |
12 Jan 16 |
olle |
var submitInfo = selectdna.fetchSubmitInfo(); |
3685 |
12 Jan 16 |
olle |
2535 |
|
3685 |
12 Jan 16 |
olle |
// Save values in hidden input fields for retrieval after HTML request |
3685 |
12 Jan 16 |
olle |
var submitInfoJsonStr = JSON.stringify(submitInfo, selectdna.circular_reference_remover); |
3685 |
12 Jan 16 |
olle |
// Enable garbage collection |
3685 |
12 Jan 16 |
olle |
circular_reference_cache = null; |
3685 |
12 Jan 16 |
olle |
frm.hiddenSubmitInfo.value = submitInfoJsonStr; |
3685 |
12 Jan 16 |
olle |
frm.hiddenNumItems.value = submitInfo.items.length; |
3685 |
12 Jan 16 |
olle |
frm.view.value = Data.get(event.currentTarget, 'protocol-type'); |
3685 |
12 Jan 16 |
olle |
frm.bioplateName.value = bioplateData.name; |
3685 |
12 Jan 16 |
olle |
frm.bioplateDescription.value = bioplateData.comments; |
3685 |
12 Jan 16 |
olle |
frm.bioplateKitName.value = bioplateData.kitName; |
3685 |
12 Jan 16 |
olle |
2546 |
|
3685 |
12 Jan 16 |
olle |
// Calling frm.submit() will change jsp file to libprep_plate_protocol2.jsp |
3685 |
12 Jan 16 |
olle |
frm.submit(); |
3685 |
12 Jan 16 |
olle |
2549 |
} |
3685 |
12 Jan 16 |
olle |
2550 |
|
3590 |
11 Nov 15 |
olle |
selectdna.createProtocol = function() |
3590 |
11 Nov 15 |
olle |
2552 |
{ |
3590 |
11 Nov 15 |
olle |
var frm = document.forms['meludi']; |
3685 |
12 Jan 16 |
olle |
var submitInfo = selectdna.fetchSubmitInfo(); |
3685 |
12 Jan 16 |
olle |
2555 |
|
3685 |
12 Jan 16 |
olle |
// Save values in hidden input fields for retrieval after HTML request |
3685 |
12 Jan 16 |
olle |
var submitInfoJsonStr = JSON.stringify(submitInfo, selectdna.circular_reference_remover); |
3685 |
12 Jan 16 |
olle |
// Enable garbage collection |
3685 |
12 Jan 16 |
olle |
circular_reference_cache = null; |
3685 |
12 Jan 16 |
olle |
frm.hiddenSubmitInfo.value = submitInfoJsonStr; |
3685 |
12 Jan 16 |
olle |
frm.hiddenNumItems.value = submitInfo.items.length; |
3685 |
12 Jan 16 |
olle |
2562 |
|
3685 |
12 Jan 16 |
olle |
// Calling frm.submit() will change jsp file to libprep_dilution_protocol2.jsp |
3685 |
12 Jan 16 |
olle |
frm.submit(); |
3685 |
12 Jan 16 |
olle |
2565 |
} |
3685 |
12 Jan 16 |
olle |
2566 |
|
3685 |
12 Jan 16 |
olle |
selectdna.fetchSubmitInfo = function() |
3685 |
12 Jan 16 |
olle |
2568 |
{ |
3685 |
12 Jan 16 |
olle |
var frm = document.forms['meludi']; |
3590 |
11 Nov 15 |
olle |
var submitInfo = {}; |
3590 |
11 Nov 15 |
olle |
submitInfo.items = []; |
3590 |
11 Nov 15 |
olle |
2572 |
|
3652 |
08 Dec 15 |
olle |
submitInfo.docMode = 'protocol'; |
3590 |
11 Nov 15 |
olle |
// Get list of selected extract source items |
3590 |
11 Nov 15 |
olle |
var selItemsList = []; |
3590 |
11 Nov 15 |
olle |
for (var column = 0; column < 6; column++) |
3590 |
11 Nov 15 |
olle |
2577 |
{ |
3590 |
11 Nov 15 |
olle |
for (var row = 0; row < 8; row++) |
3590 |
11 Nov 15 |
olle |
2579 |
{ |
3590 |
11 Nov 15 |
olle |
var well = Plate.getWell(row, column); |
3590 |
11 Nov 15 |
olle |
var dna = well.extract; |
3590 |
11 Nov 15 |
olle |
if (dna != null) |
3590 |
11 Nov 15 |
olle |
2583 |
{ |
3685 |
12 Jan 16 |
olle |
dna.bioWell = well; |
3590 |
11 Nov 15 |
olle |
dna.fpaPos = selectdna.wellRowColumnToWellStr(row, column); |
3590 |
11 Nov 15 |
olle |
dna.fpbPos = selectdna.wellRowColumnToWellStr(row, column + 6); |
3590 |
11 Nov 15 |
olle |
selItemsList[selItemsList.length] = dna; |
3590 |
11 Nov 15 |
olle |
2588 |
} |
3590 |
11 Nov 15 |
olle |
2589 |
} |
3590 |
11 Nov 15 |
olle |
2590 |
} |
3590 |
11 Nov 15 |
olle |
var numItems = selItemsList.length; |
3590 |
11 Nov 15 |
olle |
var totNumItems = numItems; |
3590 |
11 Nov 15 |
olle |
for (var i = 0; i < totNumItems; i++) |
3590 |
11 Nov 15 |
olle |
2594 |
{ |
3590 |
11 Nov 15 |
olle |
var item = null; |
3590 |
11 Nov 15 |
olle |
item = selItemsList[i]; |
3590 |
11 Nov 15 |
olle |
submitInfo.items[submitInfo.items.length] = item; |
3590 |
11 Nov 15 |
olle |
2598 |
} |
3590 |
11 Nov 15 |
olle |
2599 |
|
3590 |
11 Nov 15 |
olle |
// Library preparation dilution |
3619 |
23 Nov 15 |
olle |
var libraryPreparationProtocolName = ''; |
3619 |
23 Nov 15 |
olle |
var libraryPreparationProtocol = frm.libraryPreparationProtocol.value; |
3619 |
23 Nov 15 |
olle |
if (libraryPreparationProtocol) |
3619 |
23 Nov 15 |
olle |
2604 |
{ |
3619 |
23 Nov 15 |
olle |
libraryPreparationProtocolName = protocolMap[libraryPreparationProtocol]; |
3619 |
23 Nov 15 |
olle |
2606 |
} |
3619 |
23 Nov 15 |
olle |
submitInfo.libraryPreparationProtocol = parseInt(libraryPreparationProtocol, 10); |
3619 |
23 Nov 15 |
olle |
submitInfo.libraryPreparationProtocolName = libraryPreparationProtocolName; |
3590 |
11 Nov 15 |
olle |
submitInfo.startPlateName = frm.plateName.value; |
3590 |
11 Nov 15 |
olle |
var now = new Date(); |
3590 |
11 Nov 15 |
olle |
var dilutionProtocolDate = selectdna.formatDate(now); |
3590 |
11 Nov 15 |
olle |
submitInfo.dilutionProtocolDate = dilutionProtocolDate; |
3590 |
11 Nov 15 |
olle |
2613 |
|
3685 |
12 Jan 16 |
olle |
return submitInfo; |
3685 |
12 Jan 16 |
olle |
2615 |
} |
3685 |
12 Jan 16 |
olle |
2616 |
|
3685 |
12 Jan 16 |
olle |
var circular_reference_cache = []; |
3590 |
11 Nov 15 |
olle |
2618 |
|
3685 |
12 Jan 16 |
olle |
selectdna.circular_reference_remover = function(key, value) |
3685 |
12 Jan 16 |
olle |
2620 |
{ |
3685 |
12 Jan 16 |
olle |
if (typeof value === 'object' && value !== null) |
3685 |
12 Jan 16 |
olle |
2622 |
{ |
3685 |
12 Jan 16 |
olle |
if (circular_reference_cache == null) |
3685 |
12 Jan 16 |
olle |
2624 |
{ |
3685 |
12 Jan 16 |
olle |
circular_reference_cache = []; |
3685 |
12 Jan 16 |
olle |
2626 |
} |
3685 |
12 Jan 16 |
olle |
if (circular_reference_cache.indexOf(value) !== -1) |
3685 |
12 Jan 16 |
olle |
2628 |
{ |
3685 |
12 Jan 16 |
olle |
// Circular reference found, discard key |
3685 |
12 Jan 16 |
olle |
return; |
3685 |
12 Jan 16 |
olle |
2631 |
} |
3685 |
12 Jan 16 |
olle |
// Store value in collection |
3685 |
12 Jan 16 |
olle |
circular_reference_cache.push(value); |
3685 |
12 Jan 16 |
olle |
2634 |
} |
3685 |
12 Jan 16 |
olle |
return value; |
3590 |
11 Nov 15 |
olle |
2636 |
} |
3685 |
12 Jan 16 |
olle |
2637 |
|
3449 |
28 Jul 15 |
olle |
selectdna.initElements = function(element, autoInit) |
3449 |
28 Jul 15 |
olle |
2639 |
{ |
3449 |
28 Jul 15 |
olle |
if (autoInit == 'plate-col') |
3449 |
28 Jul 15 |
olle |
2641 |
{ |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler(element, 'click', selectdna.toggleColumn); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler(element, 'mouseover', selectdna.highlightColumn); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler(element, 'mouseout', selectdna.highlightColumn); |
3449 |
28 Jul 15 |
olle |
2645 |
} |
3449 |
28 Jul 15 |
olle |
else if (autoInit == 'plate-row') |
3449 |
28 Jul 15 |
olle |
2647 |
{ |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler(element, 'click', selectdna.toggleRow); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler(element, 'mouseover', selectdna.highlightRow); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler(element, 'mouseout', selectdna.highlightRow); |
3449 |
28 Jul 15 |
olle |
2651 |
} |
3449 |
28 Jul 15 |
olle |
else if (autoInit == 'plate-well') |
3449 |
28 Jul 15 |
olle |
2653 |
{ |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler(element, 'click', selectdna.toggleWell); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler(element, 'mouseover', selectdna.highlightReplicated); |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler(element, 'mouseout', selectdna.highlightReplicated); |
3449 |
28 Jul 15 |
olle |
2657 |
} |
3449 |
28 Jul 15 |
olle |
else if (autoInit == 'special-select') |
3449 |
28 Jul 15 |
olle |
2659 |
{ |
3449 |
28 Jul 15 |
olle |
Events.addEventHandler(element, 'click', selectdna.specialToggle) |
3449 |
28 Jul 15 |
olle |
2661 |
} |
3449 |
28 Jul 15 |
olle |
2662 |
} |
3449 |
28 Jul 15 |
olle |
2663 |
|
3449 |
28 Jul 15 |
olle |
// Restrict wells to left side of plate |
3449 |
28 Jul 15 |
olle |
selectdna.restrictWells = function(wellsInput) |
3449 |
28 Jul 15 |
olle |
2666 |
{ |
3449 |
28 Jul 15 |
olle |
var wells = []; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < wellsInput.length; i++) |
3449 |
28 Jul 15 |
olle |
2669 |
{ |
3449 |
28 Jul 15 |
olle |
well = wellsInput[i]; |
3449 |
28 Jul 15 |
olle |
if (well.column < 6) |
3449 |
28 Jul 15 |
olle |
2672 |
{ |
3449 |
28 Jul 15 |
olle |
wells[wells.length] = well; |
3449 |
28 Jul 15 |
olle |
2674 |
} |
3449 |
28 Jul 15 |
olle |
2675 |
} |
3449 |
28 Jul 15 |
olle |
return wells; |
3449 |
28 Jul 15 |
olle |
2677 |
} |
3449 |
28 Jul 15 |
olle |
2678 |
|
3449 |
28 Jul 15 |
olle |
// Toggle the selected status of a single well |
3449 |
28 Jul 15 |
olle |
selectdna.toggleWell = function(event) |
3449 |
28 Jul 15 |
olle |
2681 |
{ |
3449 |
28 Jul 15 |
olle |
var row = Data.int(event.currentTarget, 'row'); |
3449 |
28 Jul 15 |
olle |
var column = Data.int(event.currentTarget, 'col'); |
3449 |
28 Jul 15 |
olle |
if (column >= 6) |
3449 |
28 Jul 15 |
olle |
2685 |
{ |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
2687 |
} |
3449 |
28 Jul 15 |
olle |
var well = Plate.getWell(row, column); |
3449 |
28 Jul 15 |
olle |
Plate.toggleSelected([well]); |
3449 |
28 Jul 15 |
olle |
2690 |
} |
3449 |
28 Jul 15 |
olle |
2691 |
|
3449 |
28 Jul 15 |
olle |
// Toggle the selected status of a complete row |
3449 |
28 Jul 15 |
olle |
selectdna.toggleRow = function(event) |
3449 |
28 Jul 15 |
olle |
2694 |
{ |
3449 |
28 Jul 15 |
olle |
var row = Data.int(event.currentTarget, 'row'); |
3449 |
28 Jul 15 |
olle |
2696 |
/* |
3449 |
28 Jul 15 |
olle |
Plate.toggleSelected(Plate.getRow(row)); |
3449 |
28 Jul 15 |
olle |
2698 |
*/ |
3449 |
28 Jul 15 |
olle |
var wells = selectdna.restrictWells(Plate.getRow(row)); |
3449 |
28 Jul 15 |
olle |
Plate.toggleSelected(wells); |
3449 |
28 Jul 15 |
olle |
2701 |
} |
3449 |
28 Jul 15 |
olle |
2702 |
|
3449 |
28 Jul 15 |
olle |
// Toggle the selected status of a complete column |
3449 |
28 Jul 15 |
olle |
selectdna.toggleColumn = function(event) |
3449 |
28 Jul 15 |
olle |
2705 |
{ |
3449 |
28 Jul 15 |
olle |
var column = Data.int(event.currentTarget, 'col'); |
3449 |
28 Jul 15 |
olle |
if (column >= 6) |
3449 |
28 Jul 15 |
olle |
2708 |
{ |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
2710 |
} |
3449 |
28 Jul 15 |
olle |
Plate.toggleSelected(Plate.getColumn(column)); |
3449 |
28 Jul 15 |
olle |
2712 |
} |
3449 |
28 Jul 15 |
olle |
2713 |
|
3449 |
28 Jul 15 |
olle |
// Toggle the selected status of a pool |
3449 |
28 Jul 15 |
olle |
selectdna.togglePool = function(event) |
3449 |
28 Jul 15 |
olle |
2716 |
{ |
3449 |
28 Jul 15 |
olle |
var pool = Data.int(event.target, 'pool-num'); |
3449 |
28 Jul 15 |
olle |
2718 |
/* |
3449 |
28 Jul 15 |
olle |
if (!isNaN(pool)) Plate.toggleSelected(Plate.getPool(pool)); |
3449 |
28 Jul 15 |
olle |
2720 |
*/ |
3449 |
28 Jul 15 |
olle |
if (!isNaN(pool) && pool < 1) |
3449 |
28 Jul 15 |
olle |
2722 |
{ |
3449 |
28 Jul 15 |
olle |
Plate.toggleSelected(Plate.getPool(pool)); |
3449 |
28 Jul 15 |
olle |
2724 |
} |
3449 |
28 Jul 15 |
olle |
2725 |
} |
3449 |
28 Jul 15 |
olle |
2726 |
|
3449 |
28 Jul 15 |
olle |
// Highlight enable/disable all wells in a column |
3449 |
28 Jul 15 |
olle |
selectdna.highlightColumn = function(event) |
3449 |
28 Jul 15 |
olle |
2729 |
{ |
3449 |
28 Jul 15 |
olle |
var column = Data.int(event.currentTarget, 'col'); |
3449 |
28 Jul 15 |
olle |
if (column >= 6) |
3449 |
28 Jul 15 |
olle |
2732 |
{ |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
2734 |
} |
3449 |
28 Jul 15 |
olle |
var on = event.type == 'mouseover'; |
3449 |
28 Jul 15 |
olle |
2736 |
|
3449 |
28 Jul 15 |
olle |
Doc.addOrRemoveClass(event.currentTarget, 'highlight-column', on); |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getColumn(column); |
3449 |
28 Jul 15 |
olle |
Plate.setHighlight(wells, 'highlight-column', on); |
3449 |
28 Jul 15 |
olle |
2740 |
} |
3449 |
28 Jul 15 |
olle |
2741 |
|
3449 |
28 Jul 15 |
olle |
// Highlight enable/disable all wells in a row |
3449 |
28 Jul 15 |
olle |
selectdna.highlightRow = function(event) |
3449 |
28 Jul 15 |
olle |
2744 |
{ |
3449 |
28 Jul 15 |
olle |
var row = Data.int(event.currentTarget, 'row'); |
3449 |
28 Jul 15 |
olle |
var on = event.type == 'mouseover'; |
3449 |
28 Jul 15 |
olle |
2747 |
|
3449 |
28 Jul 15 |
olle |
Doc.addOrRemoveClass(event.currentTarget, 'highlight-row', on); |
3449 |
28 Jul 15 |
olle |
2749 |
/* |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getRow(row); |
3449 |
28 Jul 15 |
olle |
2751 |
*/ |
3449 |
28 Jul 15 |
olle |
var wells = selectdna.restrictWells(Plate.getRow(row)); |
3449 |
28 Jul 15 |
olle |
Plate.setHighlight(wells, 'highlight-row', on); |
3449 |
28 Jul 15 |
olle |
2754 |
} |
3449 |
28 Jul 15 |
olle |
2755 |
|
3449 |
28 Jul 15 |
olle |
// Highligt enable/disable all wells in a pool |
3449 |
28 Jul 15 |
olle |
selectdna.highlightPool = function(event) |
3449 |
28 Jul 15 |
olle |
2758 |
{ |
3449 |
28 Jul 15 |
olle |
var pool = Data.int(event.target, 'pool-num'); |
3449 |
28 Jul 15 |
olle |
var on = event.type == 'mouseover'; |
3449 |
28 Jul 15 |
olle |
2761 |
/* |
3449 |
28 Jul 15 |
olle |
if (!isNaN(pool)) |
3449 |
28 Jul 15 |
olle |
2763 |
*/ |
3449 |
28 Jul 15 |
olle |
if (!isNaN(pool) && pool < 1) |
3449 |
28 Jul 15 |
olle |
2765 |
{ |
3449 |
28 Jul 15 |
olle |
Doc.addOrRemoveClass(event.target, 'highlight-pool', on); |
3449 |
28 Jul 15 |
olle |
var wells = Plate.getPool(pool); |
3449 |
28 Jul 15 |
olle |
Plate.setHighlight(wells, 'highlight-pool', on); |
3449 |
28 Jul 15 |
olle |
2769 |
} |
3449 |
28 Jul 15 |
olle |
2770 |
} |
3449 |
28 Jul 15 |
olle |
2771 |
|
3449 |
28 Jul 15 |
olle |
2772 |
/** |
3449 |
28 Jul 15 |
olle |
Highlight all replicated wells with the same DNA as the given well. |
3449 |
28 Jul 15 |
olle |
2774 |
*/ |
3449 |
28 Jul 15 |
olle |
selectdna.highlightReplicated = function(event) |
3449 |
28 Jul 15 |
olle |
2776 |
{ |
3449 |
28 Jul 15 |
olle |
var column = Data.int(event.currentTarget, 'col'); |
3449 |
28 Jul 15 |
olle |
if (column >= 6) |
3449 |
28 Jul 15 |
olle |
2779 |
{ |
3449 |
28 Jul 15 |
olle |
return; |
3449 |
28 Jul 15 |
olle |
2781 |
} |
3449 |
28 Jul 15 |
olle |
var row = Data.int(event.currentTarget, 'row'); |
3449 |
28 Jul 15 |
olle |
var on = event.type == 'mouseover'; |
3449 |
28 Jul 15 |
olle |
2784 |
|
3449 |
28 Jul 15 |
olle |
var well = Plate.getWell(row, column); |
3449 |
28 Jul 15 |
olle |
if (well.extract && well.replicate) |
3449 |
28 Jul 15 |
olle |
2787 |
{ |
3449 |
28 Jul 15 |
olle |
// Get center coordinates for the current well |
3449 |
28 Jul 15 |
olle |
var pos = Doc.getElementPosition(well.tag); |
3449 |
28 Jul 15 |
olle |
var jsPos = new jsPoint(pos.left+pos.width/2, pos.top+pos.height/2); |
3449 |
28 Jul 15 |
olle |
2791 |
|
3449 |
28 Jul 15 |
olle |
var replicated = Plate.getWellsByName(well.extract.name); |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < replicated.length; i++) |
3449 |
28 Jul 15 |
olle |
2794 |
{ |
3449 |
28 Jul 15 |
olle |
var rep = replicated[i]; |
3449 |
28 Jul 15 |
olle |
if (rep != well) |
3449 |
28 Jul 15 |
olle |
2797 |
{ |
3449 |
28 Jul 15 |
olle |
Doc.addOrRemoveClass(rep.tag, 'highlight-replicated', on); |
3449 |
28 Jul 15 |
olle |
if (rep.line) |
3449 |
28 Jul 15 |
olle |
2800 |
{ |
3449 |
28 Jul 15 |
olle |
// Clear any recent lines |
3449 |
28 Jul 15 |
olle |
graphics.clearDrawing(rep.line); |
3449 |
28 Jul 15 |
olle |
rep.line = null; |
3449 |
28 Jul 15 |
olle |
2804 |
} |
3449 |
28 Jul 15 |
olle |
if (on) |
3449 |
28 Jul 15 |
olle |
2806 |
{ |
3449 |
28 Jul 15 |
olle |
// We draw a line between the current and replicated well |
3449 |
28 Jul 15 |
olle |
var rPos = Doc.getElementPosition(rep.tag); |
3449 |
28 Jul 15 |
olle |
rep.line = graphics.drawLine(pen, jsPos, new jsPoint(rPos.left+rPos.width/2, rPos.top+rPos.height/2)); |
3449 |
28 Jul 15 |
olle |
2810 |
} |
3449 |
28 Jul 15 |
olle |
2811 |
} |
3449 |
28 Jul 15 |
olle |
2812 |
} |
3449 |
28 Jul 15 |
olle |
2813 |
} |
3449 |
28 Jul 15 |
olle |
2814 |
} |
3449 |
28 Jul 15 |
olle |
2815 |
|
3449 |
28 Jul 15 |
olle |
// Some special toogle operations |
3449 |
28 Jul 15 |
olle |
selectdna.specialToggle = function(event) |
3449 |
28 Jul 15 |
olle |
2818 |
{ |
3449 |
28 Jul 15 |
olle |
var what = Data.get(event.currentTarget, 'special'); |
3449 |
28 Jul 15 |
olle |
var wells = []; |
3449 |
28 Jul 15 |
olle |
if (what == 'all' || what == 'empty' || what == 'none') |
3449 |
28 Jul 15 |
olle |
2822 |
{ |
3449 |
28 Jul 15 |
olle |
// All wells or all empty (will be filtered later) |
3449 |
28 Jul 15 |
olle |
wells = Plate.getWells(); |
3449 |
28 Jul 15 |
olle |
2825 |
} |
3449 |
28 Jul 15 |
olle |
else if (what == 'pools' || what == 'empty-pools') |
3449 |
28 Jul 15 |
olle |
2827 |
{ |
3449 |
28 Jul 15 |
olle |
// All primary pools or all empty in the primary pools (will be filtered later) |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < Plate.poolSchema.numPools; i++) |
3449 |
28 Jul 15 |
olle |
2830 |
{ |
3449 |
28 Jul 15 |
olle |
wells = wells.concat(Plate.getPool(i)); |
3449 |
28 Jul 15 |
olle |
2832 |
} |
3449 |
28 Jul 15 |
olle |
2833 |
} |
3449 |
28 Jul 15 |
olle |
else if (what == 'stratagene') |
3449 |
28 Jul 15 |
olle |
2835 |
{ |
3449 |
28 Jul 15 |
olle |
// All wells with 'Stratagene' |
3449 |
28 Jul 15 |
olle |
var tmp = Plate.getWells(); |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < tmp.length; i++) |
3449 |
28 Jul 15 |
olle |
2839 |
{ |
3449 |
28 Jul 15 |
olle |
var well = tmp[i]; |
3449 |
28 Jul 15 |
olle |
if (well.extract && well.extract.stratagene) wells[wells.length] = well; |
3449 |
28 Jul 15 |
olle |
2842 |
} |
3449 |
28 Jul 15 |
olle |
2843 |
} |
3449 |
28 Jul 15 |
olle |
else if (what == 'external') |
3449 |
28 Jul 15 |
olle |
2845 |
{ |
3449 |
28 Jul 15 |
olle |
// All wells with 'External DNA' |
3449 |
28 Jul 15 |
olle |
var tmp = Plate.getWells(); |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < tmp.length; i++) |
3449 |
28 Jul 15 |
olle |
2849 |
{ |
3449 |
28 Jul 15 |
olle |
var well = tmp[i]; |
3449 |
28 Jul 15 |
olle |
if (well.extract && well.extract.external) wells[wells.length] = well; |
3449 |
28 Jul 15 |
olle |
2852 |
} |
3449 |
28 Jul 15 |
olle |
2853 |
} |
3449 |
28 Jul 15 |
olle |
else if (what == 'replicates') |
3449 |
28 Jul 15 |
olle |
2855 |
{ |
3449 |
28 Jul 15 |
olle |
// All wells with replicated DNA |
3449 |
28 Jul 15 |
olle |
var tmp = Plate.getWells(); |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < tmp.length; i++) |
3449 |
28 Jul 15 |
olle |
2859 |
{ |
3449 |
28 Jul 15 |
olle |
var well = tmp[i]; |
3449 |
28 Jul 15 |
olle |
if (well.extract && well.replicate) wells[wells.length] = well; |
3449 |
28 Jul 15 |
olle |
2862 |
} |
3449 |
28 Jul 15 |
olle |
2863 |
} |
3449 |
28 Jul 15 |
olle |
else if (what == 'error') |
3449 |
28 Jul 15 |
olle |
2865 |
{ |
3449 |
28 Jul 15 |
olle |
// All wells with an error |
3449 |
28 Jul 15 |
olle |
var tmp = Plate.getWells(); |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < tmp.length; i++) |
3449 |
28 Jul 15 |
olle |
2869 |
{ |
3449 |
28 Jul 15 |
olle |
var well = tmp[i]; |
3449 |
28 Jul 15 |
olle |
if (well.hasError()) wells[wells.length] = well; |
3449 |
28 Jul 15 |
olle |
2872 |
} |
3449 |
28 Jul 15 |
olle |
2873 |
} |
3449 |
28 Jul 15 |
olle |
else if (what == 'warning') |
3449 |
28 Jul 15 |
olle |
2875 |
{ |
3449 |
28 Jul 15 |
olle |
// All wells with a warning |
3449 |
28 Jul 15 |
olle |
var tmp = Plate.getWells(); |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < tmp.length; i++) |
3449 |
28 Jul 15 |
olle |
2879 |
{ |
3449 |
28 Jul 15 |
olle |
var well = tmp[i]; |
3449 |
28 Jul 15 |
olle |
if (well.warning) wells[wells.length] = well; |
3449 |
28 Jul 15 |
olle |
2882 |
} |
3449 |
28 Jul 15 |
olle |
2883 |
} |
3449 |
28 Jul 15 |
olle |
2884 |
|
3449 |
28 Jul 15 |
olle |
// Extra filter for empty wells only |
3449 |
28 Jul 15 |
olle |
if (what.indexOf('empty') != -1) |
3449 |
28 Jul 15 |
olle |
2887 |
{ |
3449 |
28 Jul 15 |
olle |
var tmp = wells; |
3449 |
28 Jul 15 |
olle |
wells = []; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < tmp.length; i++) |
3449 |
28 Jul 15 |
olle |
2891 |
{ |
3449 |
28 Jul 15 |
olle |
if (!tmp[i].extract) wells[wells.length] = tmp[i]; |
3449 |
28 Jul 15 |
olle |
2893 |
} |
3449 |
28 Jul 15 |
olle |
2894 |
} |
3449 |
28 Jul 15 |
olle |
2895 |
|
3449 |
28 Jul 15 |
olle |
if (what == 'none') |
3449 |
28 Jul 15 |
olle |
2897 |
{ |
3449 |
28 Jul 15 |
olle |
Plate.setSelected(wells, false); |
3449 |
28 Jul 15 |
olle |
2899 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
2901 |
{ |
3449 |
28 Jul 15 |
olle |
Plate.toggleSelected(wells); |
3449 |
28 Jul 15 |
olle |
2903 |
} |
3449 |
28 Jul 15 |
olle |
2904 |
} |
3449 |
28 Jul 15 |
olle |
2905 |
|
3449 |
28 Jul 15 |
olle |
// Format value as a date in format yyyy-mm-dd |
3449 |
28 Jul 15 |
olle |
selectdna.asDate = function(value) |
3449 |
28 Jul 15 |
olle |
2908 |
{ |
3449 |
28 Jul 15 |
olle |
if (!value) return ''; |
3449 |
28 Jul 15 |
olle |
if (value.length == 8) |
3449 |
28 Jul 15 |
olle |
2911 |
{ |
3449 |
28 Jul 15 |
olle |
value = value.substr(0, 4) + '-' + value.substr(4, 2) + '-' + value.substr(6, 2); |
3449 |
28 Jul 15 |
olle |
2913 |
} |
3449 |
28 Jul 15 |
olle |
return value; |
3449 |
28 Jul 15 |
olle |
2915 |
} |
3449 |
28 Jul 15 |
olle |
2916 |
|
3590 |
11 Nov 15 |
olle |
// Format date value in format yyyy-mm-dd |
3590 |
11 Nov 15 |
olle |
selectdna.formatDate = function(date) |
3590 |
11 Nov 15 |
olle |
2919 |
{ |
3590 |
11 Nov 15 |
olle |
if (!date) return ''; |
3590 |
11 Nov 15 |
olle |
var year = date.getFullYear(); |
3590 |
11 Nov 15 |
olle |
var month = (date.getMonth() + 1); |
3590 |
11 Nov 15 |
olle |
var day = date.getDate(); |
3648 |
04 Dec 15 |
olle |
var monthStr = '' + month; |
3648 |
04 Dec 15 |
olle |
if (month < 10) |
3648 |
04 Dec 15 |
olle |
2926 |
{ |
3648 |
04 Dec 15 |
olle |
monthStr = '0' + month; |
3648 |
04 Dec 15 |
olle |
2928 |
} |
3648 |
04 Dec 15 |
olle |
var dayStr = '' + day; |
3648 |
04 Dec 15 |
olle |
if (day < 10) |
3648 |
04 Dec 15 |
olle |
2931 |
{ |
3648 |
04 Dec 15 |
olle |
dayStr = '0' + day; |
3648 |
04 Dec 15 |
olle |
2933 |
} |
3648 |
04 Dec 15 |
olle |
var dateStr = '' + year + '-' + monthStr + '-' + dayStr; |
3590 |
11 Nov 15 |
olle |
return dateStr; |
3590 |
11 Nov 15 |
olle |
2936 |
} |
3590 |
11 Nov 15 |
olle |
2937 |
|
3573 |
05 Nov 15 |
olle |
selectdna.buildKitInfoPlate = function(plate) |
3573 |
05 Nov 15 |
olle |
2939 |
{ |
3573 |
05 Nov 15 |
olle |
var html = ''; |
3573 |
05 Nov 15 |
olle |
// Table row with kit data |
3573 |
05 Nov 15 |
olle |
html += '<tr class="align-top">'; |
3573 |
05 Nov 15 |
olle |
// Added data for kit |
3573 |
05 Nov 15 |
olle |
var kitName = plate.kitName; |
3573 |
05 Nov 15 |
olle |
var expirationDate = plate.expirationDate; |
3573 |
05 Nov 15 |
olle |
var timesUsed = plate.timesUsed; |
3573 |
05 Nov 15 |
olle |
2947 |
// |
3573 |
05 Nov 15 |
olle |
var unusedWellsJsonArr = plate.unusedWells; |
3573 |
05 Nov 15 |
olle |
var effUnusedWellsJsonArr = plate.effUnusedWells; |
3573 |
05 Nov 15 |
olle |
var reservedWellsJsonArr = plate.reservedWells; |
3582 |
06 Nov 15 |
olle |
2951 |
|
3582 |
06 Nov 15 |
olle |
2952 |
/* |
3573 |
05 Nov 15 |
olle |
html += '<td class="prompt"><b>Kit name: ' + kitName + '</b></td><br>'; |
3573 |
05 Nov 15 |
olle |
html += '<td class="prompt"><b>Expiration date: ' + expirationDate + '</b></td><br>'; |
3573 |
05 Nov 15 |
olle |
html += '<td class="prompt"><b>#Times used: ' + timesUsed + '</b></td><br>'; |
3573 |
05 Nov 15 |
olle |
html += '<td class="prompt"><b>#Available wells: ' + unusedWellsJsonArr.length + '</b></td><br>'; |
3573 |
05 Nov 15 |
olle |
html += '<td class="prompt"><b>#Eff. available wells: ' + effUnusedWellsJsonArr.length + '</b></td><br>'; |
3582 |
06 Nov 15 |
olle |
2958 |
*/ |
3573 |
05 Nov 15 |
olle |
// Kit as plate |
3573 |
05 Nov 15 |
olle |
// Only show FPA columns, i.e. columns 0-5 |
3573 |
05 Nov 15 |
olle |
var colNoEnd = 5; |
3573 |
05 Nov 15 |
olle |
if (plate.geometry.columns < colNoEnd) |
3573 |
05 Nov 15 |
olle |
2963 |
{ |
3573 |
05 Nov 15 |
olle |
colNoEnd = plate.geometry.columns; |
3573 |
05 Nov 15 |
olle |
2965 |
} |
3573 |
05 Nov 15 |
olle |
html += '<td>'; |
3573 |
05 Nov 15 |
olle |
html += '<table class="plate">'; |
3573 |
05 Nov 15 |
olle |
html += '<tr class="header"><th></th>'; |
3573 |
05 Nov 15 |
olle |
for (var colNo = 0; colNo <= colNoEnd; colNo++) |
3573 |
05 Nov 15 |
olle |
2970 |
{ |
3573 |
05 Nov 15 |
olle |
html += '<th>'+(colNo+1)+'</th>'; |
3573 |
05 Nov 15 |
olle |
2972 |
} |
3573 |
05 Nov 15 |
olle |
html += '</tr>'; |
3573 |
05 Nov 15 |
olle |
var wells = plate.bioWells; |
3573 |
05 Nov 15 |
olle |
var wellNo = 0; |
3573 |
05 Nov 15 |
olle |
for (var rowNo = 0; rowNo < plate.geometry.rows; rowNo++) |
3573 |
05 Nov 15 |
olle |
2977 |
{ |
3573 |
05 Nov 15 |
olle |
html += '<tr class="row-'+rowNo+'">'; |
3573 |
05 Nov 15 |
olle |
html += '<th>'+Meludi.wellToAlpha(rowNo)+'</th>'; |
3573 |
05 Nov 15 |
olle |
for (var colNo = 0; colNo <= colNoEnd; colNo++) |
3573 |
05 Nov 15 |
olle |
2981 |
{ |
3573 |
05 Nov 15 |
olle |
var well = wells[wellNo]; |
3573 |
05 Nov 15 |
olle |
well.extraVolume = 0; |
3573 |
05 Nov 15 |
olle |
well.comment = ''; |
3573 |
05 Nov 15 |
olle |
2985 |
|
3573 |
05 Nov 15 |
olle |
if (well.bioMaterial) |
3573 |
05 Nov 15 |
olle |
2987 |
{ |
3573 |
05 Nov 15 |
olle |
html += '<td id="well-'+well.id+'"'; |
3573 |
05 Nov 15 |
olle |
html += ' class="well selectable col-'+colNo+'"'; |
3573 |
05 Nov 15 |
olle |
html += ' title="'+Strings.encodeTags(well.bioMaterial.name)+'" data-well-id="'+well.id+'"'; |
3573 |
05 Nov 15 |
olle |
html += '>0'+THIN_SPACE+'µl</td>'; |
3573 |
05 Nov 15 |
olle |
2992 |
} |
3573 |
05 Nov 15 |
olle |
else |
3573 |
05 Nov 15 |
olle |
2994 |
{ |
3573 |
05 Nov 15 |
olle |
var wellName = Meludi.wellToAlpha(rowNo) + (colNo+1); |
3573 |
05 Nov 15 |
olle |
// Check if kit is used for current well |
3573 |
05 Nov 15 |
olle |
var usedWell = true; |
3573 |
05 Nov 15 |
olle |
for (var i = 0; i < unusedWellsJsonArr.length; i++) |
3573 |
05 Nov 15 |
olle |
2999 |
{ |
3573 |
05 Nov 15 |
olle |
var nameOfUnusedWell = unusedWellsJsonArr[i]; |
3573 |
05 Nov 15 |
olle |
if (wellName == nameOfUnusedWell) |
3573 |
05 Nov 15 |
olle |
3002 |
{ |
3573 |
05 Nov 15 |
olle |
usedWell = false; |
3573 |
05 Nov 15 |
olle |
3004 |
} |
3573 |
05 Nov 15 |
olle |
3005 |
} |
3573 |
05 Nov 15 |
olle |
var effUsedWell = true; |
3573 |
05 Nov 15 |
olle |
for (var i = 0; i < effUnusedWellsJsonArr.length; i++) |
3573 |
05 Nov 15 |
olle |
3008 |
{ |
3573 |
05 Nov 15 |
olle |
var nameOfUnusedWell = effUnusedWellsJsonArr[i]; |
3573 |
05 Nov 15 |
olle |
if (wellName == nameOfUnusedWell) |
3573 |
05 Nov 15 |
olle |
3011 |
{ |
3573 |
05 Nov 15 |
olle |
effUsedWell = false; |
3573 |
05 Nov 15 |
olle |
3013 |
} |
3573 |
05 Nov 15 |
olle |
3014 |
} |
3573 |
05 Nov 15 |
olle |
var reservedWell = false; |
3573 |
05 Nov 15 |
olle |
for (var i = 0; i < reservedWellsJsonArr.length; i++) |
3573 |
05 Nov 15 |
olle |
3017 |
{ |
3573 |
05 Nov 15 |
olle |
var nameOfReservedWell = reservedWellsJsonArr[i]; |
3573 |
05 Nov 15 |
olle |
if (wellName == nameOfReservedWell) |
3573 |
05 Nov 15 |
olle |
3020 |
{ |
3573 |
05 Nov 15 |
olle |
reservedWell = true; |
3573 |
05 Nov 15 |
olle |
3022 |
} |
3573 |
05 Nov 15 |
olle |
3023 |
} |
3573 |
05 Nov 15 |
olle |
if (usedWell) |
3573 |
05 Nov 15 |
olle |
3025 |
{ |
3573 |
05 Nov 15 |
olle |
// Empty cell |
3573 |
05 Nov 15 |
olle |
html += '<td class="kitwell empty col-'+colNo+'">'; |
3573 |
05 Nov 15 |
olle |
3028 |
} |
3573 |
05 Nov 15 |
olle |
else |
3573 |
05 Nov 15 |
olle |
3030 |
{ |
3573 |
05 Nov 15 |
olle |
// Unused cell |
3573 |
05 Nov 15 |
olle |
//html += '<td class="kitwell unused col-'+colNo+'">'; |
3573 |
05 Nov 15 |
olle |
var new_html = ''; |
3573 |
05 Nov 15 |
olle |
if (effUsedWell) |
3573 |
05 Nov 15 |
olle |
3035 |
{ |
3573 |
05 Nov 15 |
olle |
new_html = '<td class="kitwell unused col-'+colNo+'">'; |
3573 |
05 Nov 15 |
olle |
3037 |
} |
3573 |
05 Nov 15 |
olle |
else |
3573 |
05 Nov 15 |
olle |
3039 |
{ |
3573 |
05 Nov 15 |
olle |
new_html = '<td class="kitwell effunused col-'+colNo+'">'; |
3573 |
05 Nov 15 |
olle |
if (reservedWell) |
3573 |
05 Nov 15 |
olle |
3042 |
{ |
3573 |
05 Nov 15 |
olle |
new_html = '<td class="kitwell reserved col-'+colNo+'">'; |
3573 |
05 Nov 15 |
olle |
3044 |
} |
3573 |
05 Nov 15 |
olle |
3045 |
} |
3573 |
05 Nov 15 |
olle |
html += new_html; |
3573 |
05 Nov 15 |
olle |
3047 |
} |
3573 |
05 Nov 15 |
olle |
html += '<div class="name">' + wellName + '</div>'; |
3573 |
05 Nov 15 |
olle |
html += '</td>'; |
3573 |
05 Nov 15 |
olle |
3050 |
} |
3573 |
05 Nov 15 |
olle |
wellNo++; |
3573 |
05 Nov 15 |
olle |
3052 |
} |
3573 |
05 Nov 15 |
olle |
html += '</tr>'; |
3573 |
05 Nov 15 |
olle |
3054 |
} |
3573 |
05 Nov 15 |
olle |
html += '</table>'; |
3573 |
05 Nov 15 |
olle |
html += '</td>'; |
3573 |
05 Nov 15 |
olle |
// Kit status |
3573 |
05 Nov 15 |
olle |
html += '<td class="status" id="libPrepKitAsPlate.status"></td>'; |
3573 |
05 Nov 15 |
olle |
// Kit message |
3573 |
05 Nov 15 |
olle |
//var kitMessage = 'Highlighted cells are unused.'; |
3573 |
05 Nov 15 |
olle |
var kitMessage = ''; |
3573 |
05 Nov 15 |
olle |
html += '<td class="help">'; |
3573 |
05 Nov 15 |
olle |
html += '<span id="libPrepKitAsPlate.message" class="message" ></span>'; |
3573 |
05 Nov 15 |
olle |
html += kitMessage; |
3573 |
05 Nov 15 |
olle |
html += '</td>'; |
3573 |
05 Nov 15 |
olle |
// End of table row with kit data |
3573 |
05 Nov 15 |
olle |
html += '</tr>'; |
3573 |
05 Nov 15 |
olle |
3068 |
|
3573 |
05 Nov 15 |
olle |
return html; |
3573 |
05 Nov 15 |
olle |
3070 |
} |
3573 |
05 Nov 15 |
olle |
3071 |
|
3449 |
28 Jul 15 |
olle |
return selectdna; |
3449 |
28 Jul 15 |
olle |
3073 |
}(); |
3449 |
28 Jul 15 |
olle |
3074 |
|
3449 |
28 Jul 15 |
olle |
Doc.onLoad(SelectDna.initPage); |
3449 |
28 Jul 15 |
olle |
Doc.addElementInitializer(SelectDna.initElements); |
3449 |
28 Jul 15 |
olle |
3077 |
|
3449 |
28 Jul 15 |
olle |
3078 |
|
3449 |
28 Jul 15 |
olle |
var Dna = function() |
3449 |
28 Jul 15 |
olle |
3080 |
{ |
3449 |
28 Jul 15 |
olle |
var dna = {}; |
3449 |
28 Jul 15 |
olle |
var flagged = []; |
3449 |
28 Jul 15 |
olle |
var info = []; |
3449 |
28 Jul 15 |
olle |
3084 |
|
3449 |
28 Jul 15 |
olle |
3085 |
/** |
3449 |
28 Jul 15 |
olle |
Create a new DNA object by name. More information |
3449 |
28 Jul 15 |
olle |
about the DNA is automatically loaded from the database. |
3449 |
28 Jul 15 |
olle |
3088 |
*/ |
3449 |
28 Jul 15 |
olle |
dna.createByName = function(name) |
3449 |
28 Jul 15 |
olle |
3090 |
{ |
3449 |
28 Jul 15 |
olle |
var tmp = {}; |
3449 |
28 Jul 15 |
olle |
tmp.name = name; |
3449 |
28 Jul 15 |
olle |
tmp.stratagene = Meludi.isStratagene(name) |
3449 |
28 Jul 15 |
olle |
tmp.external = Meludi.isExternal(name); |
3449 |
28 Jul 15 |
olle |
tmp.info = dna.infoByName(name); |
3667 |
15 Dec 15 |
olle |
//alert("select_dna_for_start_plate.js::dna.createByName(name): name = " + name + " info = " + JSON.stringify(tmp.info)); |
3449 |
28 Jul 15 |
olle |
tmp.id = tmp.info.id; |
3449 |
28 Jul 15 |
olle |
return tmp; |
3449 |
28 Jul 15 |
olle |
3099 |
} |
3449 |
28 Jul 15 |
olle |
3100 |
|
3449 |
28 Jul 15 |
olle |
3101 |
/** |
3667 |
15 Dec 15 |
olle |
Create a new DNA object by parent name. More information |
3667 |
15 Dec 15 |
olle |
about the DNA is automatically loaded from the database. |
3667 |
15 Dec 15 |
olle |
3104 |
*/ |
3667 |
15 Dec 15 |
olle |
dna.createByParentName = function(parentName, name) |
3667 |
15 Dec 15 |
olle |
3106 |
{ |
3667 |
15 Dec 15 |
olle |
var tmp = {}; |
3667 |
15 Dec 15 |
olle |
tmp.name = name; |
3667 |
15 Dec 15 |
olle |
tmp.stratagene = Meludi.isStratagene(parentName) |
3667 |
15 Dec 15 |
olle |
tmp.external = Meludi.isExternal(parentName); |
3667 |
15 Dec 15 |
olle |
var parentDna = dna.infoByName(parentName); |
3667 |
15 Dec 15 |
olle |
// Copy some info to original info |
3667 |
15 Dec 15 |
olle |
var info = {}; |
3667 |
15 Dec 15 |
olle |
info.origBioWell = parentDna.bioWell; |
3667 |
15 Dec 15 |
olle |
info.origQubitConc = parentDna.QubitConc; |
3667 |
15 Dec 15 |
olle |
info.origDeltaCt = parentDna.deltaCt; |
3667 |
15 Dec 15 |
olle |
info.origId = parentDna.id; |
3667 |
15 Dec 15 |
olle |
info.origName = parentDna.name; |
3679 |
18 Dec 15 |
olle |
info.origDescription = parentDna.comment; |
3667 |
15 Dec 15 |
olle |
// Reset info for created item |
3667 |
15 Dec 15 |
olle |
info.bioWell = null; |
3667 |
15 Dec 15 |
olle |
info.QubitConc = null; |
3667 |
15 Dec 15 |
olle |
info.deltaCt = null; |
3667 |
15 Dec 15 |
olle |
info.id = null; |
3667 |
15 Dec 15 |
olle |
// Set tmp.info to new JSONObject info |
3667 |
15 Dec 15 |
olle |
tmp.info = info; |
3667 |
15 Dec 15 |
olle |
tmp.id = null; |
3667 |
15 Dec 15 |
olle |
return tmp; |
3667 |
15 Dec 15 |
olle |
3129 |
} |
3667 |
15 Dec 15 |
olle |
3130 |
|
3667 |
15 Dec 15 |
olle |
3131 |
/** |
3449 |
28 Jul 15 |
olle |
Create a new DNA object by info object. |
3449 |
28 Jul 15 |
olle |
3133 |
*/ |
3449 |
28 Jul 15 |
olle |
dna.createByInfo = function(info) |
3449 |
28 Jul 15 |
olle |
3135 |
{ |
3449 |
28 Jul 15 |
olle |
var tmp = {}; |
3449 |
28 Jul 15 |
olle |
tmp.name = info.name; |
3449 |
28 Jul 15 |
olle |
tmp.stratagene = Meludi.isStratagene(tmp.name); |
3449 |
28 Jul 15 |
olle |
tmp.external = Meludi.isExternal(tmp.name); |
3449 |
28 Jul 15 |
olle |
tmp.id = info.id; |
3449 |
28 Jul 15 |
olle |
tmp.info = info; |
3449 |
28 Jul 15 |
olle |
return tmp; |
3449 |
28 Jul 15 |
olle |
3143 |
} |
3449 |
28 Jul 15 |
olle |
3144 |
|
3449 |
28 Jul 15 |
olle |
3145 |
/** |
3449 |
28 Jul 15 |
olle |
Get information about a DNA item with a given name. |
3449 |
28 Jul 15 |
olle |
3147 |
*/ |
3449 |
28 Jul 15 |
olle |
dna.infoByName = function(name) |
3449 |
28 Jul 15 |
olle |
3149 |
{ |
3449 |
28 Jul 15 |
olle |
var key = 'N'+name; |
3449 |
28 Jul 15 |
olle |
if (!info[key]) |
3449 |
28 Jul 15 |
olle |
3152 |
{ |
3449 |
28 Jul 15 |
olle |
dna.loadInfoByNames([name]); |
3449 |
28 Jul 15 |
olle |
if (!info[key]) info[key] = {}; |
3449 |
28 Jul 15 |
olle |
3155 |
} |
3449 |
28 Jul 15 |
olle |
return info[key]; |
3449 |
28 Jul 15 |
olle |
3157 |
} |
3449 |
28 Jul 15 |
olle |
3158 |
|
3449 |
28 Jul 15 |
olle |
3159 |
/** |
3449 |
28 Jul 15 |
olle |
Load and cache DNA information for all DNA items with a name in the |
3449 |
28 Jul 15 |
olle |
given list. |
3449 |
28 Jul 15 |
olle |
3162 |
*/ |
3449 |
28 Jul 15 |
olle |
dna.loadInfoByNames = function(names) |
3449 |
28 Jul 15 |
olle |
3164 |
{ |
3449 |
28 Jul 15 |
olle |
var newNames = []; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < names.length; i++) |
3449 |
28 Jul 15 |
olle |
3167 |
{ |
3449 |
28 Jul 15 |
olle |
if (!info['N'+names[i]]) newNames[newNames.length] = names[i]; |
3449 |
28 Jul 15 |
olle |
3169 |
} |
3449 |
28 Jul 15 |
olle |
3170 |
|
3449 |
28 Jul 15 |
olle |
var submitInfo = {}; |
3449 |
28 Jul 15 |
olle |
submitInfo.names = newNames; |
3449 |
28 Jul 15 |
olle |
3173 |
|
3449 |
28 Jul 15 |
olle |
if (newNames.length > 0) |
3449 |
28 Jul 15 |
olle |
3175 |
{ |
3449 |
28 Jul 15 |
olle |
var url = '../Dna.servlet?ID='+App.getSessionId(); |
3449 |
28 Jul 15 |
olle |
url += '&cmd=GetDnaInfoFromNames'; |
3449 |
28 Jul 15 |
olle |
var response = Wizard.syncJsonRequest(url, 'POST', JSON.stringify(submitInfo)); |
3449 |
28 Jul 15 |
olle |
dna.cacheInfo(response.dna); |
3449 |
28 Jul 15 |
olle |
3180 |
} |
3449 |
28 Jul 15 |
olle |
3181 |
} |
3449 |
28 Jul 15 |
olle |
3182 |
|
3449 |
28 Jul 15 |
olle |
dna.cacheInfo = function(dnaList) |
3449 |
28 Jul 15 |
olle |
3184 |
{ |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < dnaList.length; i++) |
3449 |
28 Jul 15 |
olle |
3186 |
{ |
3449 |
28 Jul 15 |
olle |
var r = dnaList[i]; |
3449 |
28 Jul 15 |
olle |
info['N'+r.name] = r; |
3449 |
28 Jul 15 |
olle |
info['I'+r.id] = r; |
3449 |
28 Jul 15 |
olle |
if (r.flag) flagged[flagged.length] = r; |
3449 |
28 Jul 15 |
olle |
3191 |
} |
3449 |
28 Jul 15 |
olle |
3192 |
} |
3449 |
28 Jul 15 |
olle |
3193 |
|
3449 |
28 Jul 15 |
olle |
dna.unflag = function(r) |
3449 |
28 Jul 15 |
olle |
3195 |
{ |
3449 |
28 Jul 15 |
olle |
if (!r.info || !r.info.flag) return false; |
3449 |
28 Jul 15 |
olle |
3197 |
|
3449 |
28 Jul 15 |
olle |
r.info.flag = null; |
3449 |
28 Jul 15 |
olle |
for (var i = 0; i < flagged.length; i++) |
3449 |
28 Jul 15 |
olle |
3200 |
{ |
3449 |
28 Jul 15 |
olle |
if (r.id == flagged[i].id) |
3449 |
28 Jul 15 |
olle |
3202 |
{ |
3449 |
28 Jul 15 |
olle |
flagged.splice(i, 1); |
3449 |
28 Jul 15 |
olle |
break; |
3449 |
28 Jul 15 |
olle |
3205 |
} |
3449 |
28 Jul 15 |
olle |
3206 |
} |
3449 |
28 Jul 15 |
olle |
return true; |
3449 |
28 Jul 15 |
olle |
3208 |
} |
3449 |
28 Jul 15 |
olle |
3209 |
|
3449 |
28 Jul 15 |
olle |
dna.flag = function(r, flag) |
3449 |
28 Jul 15 |
olle |
3211 |
{ |
3449 |
28 Jul 15 |
olle |
if (!r.info || r.info.flag) return false; |
3449 |
28 Jul 15 |
olle |
r.info.flag = flag; |
3449 |
28 Jul 15 |
olle |
flagged[flagged.length] = r.info; |
3449 |
28 Jul 15 |
olle |
3215 |
} |
3449 |
28 Jul 15 |
olle |
3216 |
|
3449 |
28 Jul 15 |
olle |
dna.getFlagged = function() |
3449 |
28 Jul 15 |
olle |
3218 |
{ |
3449 |
28 Jul 15 |
olle |
return flagged; |
3449 |
28 Jul 15 |
olle |
3220 |
} |
3449 |
28 Jul 15 |
olle |
3221 |
|
3449 |
28 Jul 15 |
olle |
return dna; |
3449 |
28 Jul 15 |
olle |
3223 |
}(); |
3449 |
28 Jul 15 |
olle |
3224 |
|
3449 |
28 Jul 15 |
olle |
3225 |
|
3449 |
28 Jul 15 |
olle |
3226 |
|
3449 |
28 Jul 15 |
olle |
var WellPainter = function() |
3449 |
28 Jul 15 |
olle |
3228 |
{ |
3449 |
28 Jul 15 |
olle |
var painter = {}; |
3449 |
28 Jul 15 |
olle |
3230 |
|
3449 |
28 Jul 15 |
olle |
// Add class indicators for replicates and QC assigned wells |
3449 |
28 Jul 15 |
olle |
painter.getClassNameForWell = function(well) |
3449 |
28 Jul 15 |
olle |
3233 |
{ |
3449 |
28 Jul 15 |
olle |
var cls = ''; |
3449 |
28 Jul 15 |
olle |
if (well.extract) |
3449 |
28 Jul 15 |
olle |
3236 |
{ |
3449 |
28 Jul 15 |
olle |
if (well.replicate) cls += ' replicate'; |
3449 |
28 Jul 15 |
olle |
if (well.extract.qc) cls += ' qc'; |
3449 |
28 Jul 15 |
olle |
3239 |
} |
3449 |
28 Jul 15 |
olle |
if (well.column == Plate.columns-1) cls += ' last-child'; |
3449 |
28 Jul 15 |
olle |
3241 |
|
3449 |
28 Jul 15 |
olle |
return cls; |
3449 |
28 Jul 15 |
olle |
3243 |
} |
3449 |
28 Jul 15 |
olle |
3244 |
|
3449 |
28 Jul 15 |
olle |
painter.getWellText = function(well) |
3449 |
28 Jul 15 |
olle |
3246 |
{ |
3617 |
23 Nov 15 |
olle |
var frm = document.forms['meludi']; |
3449 |
28 Jul 15 |
olle |
var text = ''; |
3449 |
28 Jul 15 |
olle |
if (well.duplicates) |
3449 |
28 Jul 15 |
olle |
3250 |
{ |
3449 |
28 Jul 15 |
olle |
well.setError('Duplicate DNA in this location'); |
3449 |
28 Jul 15 |
olle |
text += '<div class="name">'+Strings.encodeTags(well.duplicates.join(', '))+'</div>'; |
3449 |
28 Jul 15 |
olle |
3253 |
} |
3449 |
28 Jul 15 |
olle |
else if (well.extract) |
3449 |
28 Jul 15 |
olle |
3255 |
{ |
3449 |
28 Jul 15 |
olle |
// The well contains DNA |
3449 |
28 Jul 15 |
olle |
var dna = well.extract; |
3449 |
28 Jul 15 |
olle |
var info = dna.info; |
3449 |
28 Jul 15 |
olle |
// --- DNA aliquot name |
3449 |
28 Jul 15 |
olle |
text += '<div class="name">'+Strings.encodeTags(dna.name)+'</div>'; |
3667 |
15 Dec 15 |
olle |
//alert("select_dna_for_start_plate.js::getWellText(): dna.name = " + dna.name + " info = " + JSON.stringify(info)); |
3449 |
28 Jul 15 |
olle |
3262 |
|
3449 |
28 Jul 15 |
olle |
var warningMsg = []; |
3449 |
28 Jul 15 |
olle |
// --- Bioplate location |
3667 |
15 Dec 15 |
olle |
if (info.origBioWell) |
3449 |
28 Jul 15 |
olle |
3266 |
{ |
3667 |
15 Dec 15 |
olle |
var origDnaWell = info.origBioWell; |
3667 |
15 Dec 15 |
olle |
text += '<div class="location">'+Strings.encodeTags(origDnaWell.bioPlate.name+'['+origDnaWell.location)+']</div>'; |
3449 |
28 Jul 15 |
olle |
3269 |
} |
3449 |
28 Jul 15 |
olle |
else if (info.preNormalized) |
3449 |
28 Jul 15 |
olle |
3271 |
{ |
3449 |
28 Jul 15 |
olle |
text += '<div class="location">PreNormalized</div>'; |
3449 |
28 Jul 15 |
olle |
3273 |
} |
3449 |
28 Jul 15 |
olle |
else if (!dna.stratagene && !dna.external) |
3449 |
28 Jul 15 |
olle |
3275 |
{ |
3615 |
20 Nov 15 |
olle |
if (!painter.hasClass('plate', 'hide-location')) |
3615 |
20 Nov 15 |
olle |
3277 |
{ |
3615 |
20 Nov 15 |
olle |
warningMsg[warningMsg.length] = 'No location'; |
3615 |
20 Nov 15 |
olle |
3279 |
} |
3449 |
28 Jul 15 |
olle |
3280 |
} |
3449 |
28 Jul 15 |
olle |
3281 |
|
3667 |
15 Dec 15 |
olle |
if (info && info.origId && !dna.stratagene && !dna.external) |
3449 |
28 Jul 15 |
olle |
3283 |
{ |
3449 |
28 Jul 15 |
olle |
// Calculations for each aliquot |
3667 |
15 Dec 15 |
olle |
var origDeltaCt = info.origDeltaCt; |
3667 |
15 Dec 15 |
olle |
var dilutionFactor = painter.fetchDilutionFactor(origDeltaCt); |
3590 |
11 Nov 15 |
olle |
var VOL_ALIQUOT = 10.0; // µl |
3449 |
28 Jul 15 |
olle |
var volDNA = VOL_ALIQUOT/dilutionFactor; |
3449 |
28 Jul 15 |
olle |
var water = VOL_ALIQUOT - volDNA; |
3592 |
12 Nov 15 |
olle |
// Prepare for future modification of solution volume depending on other parameters |
3592 |
12 Nov 15 |
olle |
var volAliquotSolution = VOL_ALIQUOT; |
3590 |
11 Nov 15 |
olle |
var volDnaInSolution = volAliquotSolution/dilutionFactor; |
3590 |
11 Nov 15 |
olle |
var waterInSolution = volAliquotSolution - volDnaInSolution; |
3590 |
11 Nov 15 |
olle |
var removedVolume = 2 * volDnaInSolution; // µl |
3667 |
15 Dec 15 |
olle |
var origConc = info.origQubitConc; // ng/µl |
3667 |
15 Dec 15 |
olle |
var calcConc = origConc/dilutionFactor; |
3449 |
28 Jul 15 |
olle |
//var usedQuantityPerAliquout = Math.ceil(VOL_ALIQUOT*origConc/dilutionFactor/1000); // µg |
3449 |
28 Jul 15 |
olle |
//var usedQuantityPerAliquout = VOL_ALIQUOT*origConc/dilutionFactor/1000; // µg |
3592 |
12 Nov 15 |
olle |
//var usedQuantity = volDNA*origConc; // ng |
3590 |
11 Nov 15 |
olle |
var usedQuantity = volDnaInSolution*origConc; // ng |
3449 |
28 Jul 15 |
olle |
dna.usedQuantity = dna.qc ? QUANTITY_QC : usedQuantity/1000; // µg |
3449 |
28 Jul 15 |
olle |
//alert("select_dna.js::painter.getWellText(): name = " + dna.name + " removedVolume = " + removedVolume + " deltaCt = " + deltaCt + " dilutionFactor = " + dilutionFactor + " origConc = " + origConc + " usedQuantity = " + usedQuantity + " ng"); |
3449 |
28 Jul 15 |
olle |
3303 |
|
3449 |
28 Jul 15 |
olle |
3304 |
/* |
3449 |
28 Jul 15 |
olle |
dna.usedQuantity = dna.qc ? QUANTITY_QC : QUANTITY_REGULAR; // µg |
3449 |
28 Jul 15 |
olle |
dna.dilutionConc = 1000 * dna.usedQuantity / TOTAL_VOLUME; // ng/µl |
3449 |
28 Jul 15 |
olle |
3307 |
|
3667 |
15 Dec 15 |
olle |
var volDNA = Math.ceil(10000*dna.usedQuantity/info.origQubitConc) / 10; // µl, rounded to 1 decimal |
3449 |
28 Jul 15 |
olle |
var water = TOTAL_VOLUME - volDNA; |
3449 |
28 Jul 15 |
olle |
3310 |
*/ |
3449 |
28 Jul 15 |
olle |
3311 |
|
3617 |
23 Nov 15 |
olle |
var MINIMAL_DNA_VOLUME = frm.min_vol_dna.value; |
3682 |
04 Jan 16 |
olle |
if (volDnaInSolution < MINIMAL_DNA_VOLUME) |
3449 |
28 Jul 15 |
olle |
3314 |
{ |
3449 |
28 Jul 15 |
olle |
3315 |
/* |
3449 |
28 Jul 15 |
olle |
// Large mix since we do not want to take less than 1µl |
3449 |
28 Jul 15 |
olle |
volDNA = MINIMAL_DNA_VOLUME; |
3667 |
15 Dec 15 |
olle |
dna.usedQuantity = volDNA * info.origQubitConc / 1000; // µg |
3449 |
28 Jul 15 |
olle |
var totalVolume = 1000 * dna.usedQuantity / dna.dilutionConc; // µl |
3449 |
28 Jul 15 |
olle |
water = totalVolume - volDNA; |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = 'Large mix'; |
3449 |
28 Jul 15 |
olle |
3322 |
*/ |
3682 |
04 Jan 16 |
olle |
warningMsg[warningMsg.length] = 'DNA vol ' + Numbers.formatNumber(volDnaInSolution, 2) + 'µl < ' + MINIMAL_DNA_VOLUME + 'µl'; |
3449 |
28 Jul 15 |
olle |
3324 |
} |
3449 |
28 Jul 15 |
olle |
3325 |
|
3590 |
11 Nov 15 |
olle |
// Store dilution data |
3590 |
11 Nov 15 |
olle |
info.dilutionFactor = dilutionFactor; |
3590 |
11 Nov 15 |
olle |
info.volAliquotSolution = volAliquotSolution; |
3590 |
11 Nov 15 |
olle |
info.volDnaInSolution = volDnaInSolution; |
3590 |
11 Nov 15 |
olle |
info.waterInSolution = waterInSolution; |
3449 |
28 Jul 15 |
olle |
3331 |
/* |
3449 |
28 Jul 15 |
olle |
if (info.remainingQuantity != null) |
3449 |
28 Jul 15 |
olle |
3333 |
{ |
3449 |
28 Jul 15 |
olle |
//text += '<div class="quantity">'+Numbers.formatNumber(info.remainingQuantity, 2) + 'µg</div>'; |
3449 |
28 Jul 15 |
olle |
var quantityLeft = 1000.0*info.remainingQuantity - 2*usedQuantity; // ng |
3449 |
28 Jul 15 |
olle |
//alert("select_dna.js::painter.getWellText(): name = " + dna.name + " info.remainingQuantity = " + info.remainingQuantity + " µg usedQuantity = " + usedQuantity + " ng quantityLeft = " + quantityLeft + " ng"); |
3449 |
28 Jul 15 |
olle |
//text += '<div class="quantity">'+Numbers.formatNumber(quantityLeft, 2) + 'µg '+Numbers.formatNumber(volDNA, 1)+'µl</div>'; |
3449 |
28 Jul 15 |
olle |
text += '<div class="quantity">'+Numbers.formatNumber(usedQuantity, 2) + 'ng '+Numbers.formatNumber(volDNA, 1)+'µl</div>'; |
3449 |
28 Jul 15 |
olle |
3339 |
|
3449 |
28 Jul 15 |
olle |
// Must have at least 1.1µg or 1.22µg (if default values are used) |
3449 |
28 Jul 15 |
olle |
var remainLimit = dna.qc ? QUANTITY_QC : QUANTITY_REGULAR; |
3449 |
28 Jul 15 |
olle |
3342 |
*/ |
3449 |
28 Jul 15 |
olle |
3343 |
/* |
3449 |
28 Jul 15 |
olle |
if (info.remainingQuantity < remainLimit) |
3449 |
28 Jul 15 |
olle |
3345 |
{ |
3449 |
28 Jul 15 |
olle |
well.setError('Not enough DNA'); |
3449 |
28 Jul 15 |
olle |
3347 |
} |
3449 |
28 Jul 15 |
olle |
// Warning if near the limit |
3449 |
28 Jul 15 |
olle |
if (info.remainingQuantity < LOW_QUANTITY_WARNING_LIMIT && !info.preNormalized) |
3449 |
28 Jul 15 |
olle |
3350 |
{ |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = 'Low quantity'; |
3449 |
28 Jul 15 |
olle |
3352 |
} |
3449 |
28 Jul 15 |
olle |
3353 |
*/ |
3449 |
28 Jul 15 |
olle |
3354 |
/* |
3449 |
28 Jul 15 |
olle |
if (quantityLeft < 1000.0*remainLimit) |
3449 |
28 Jul 15 |
olle |
3356 |
{ |
3449 |
28 Jul 15 |
olle |
well.setError('Not enough DNA'); |
3449 |
28 Jul 15 |
olle |
3358 |
} |
3449 |
28 Jul 15 |
olle |
// Warning if near the limit |
3449 |
28 Jul 15 |
olle |
if (quantityLeft < 1000.0*LOW_QUANTITY_WARNING_LIMIT && !info.preNormalized) |
3449 |
28 Jul 15 |
olle |
3361 |
{ |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = 'Low quantity'; |
3449 |
28 Jul 15 |
olle |
3363 |
} |
3449 |
28 Jul 15 |
olle |
3364 |
*/ |
3449 |
28 Jul 15 |
olle |
3365 |
/* |
3449 |
28 Jul 15 |
olle |
3366 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
3368 |
{ |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = 'No quantity'; |
3449 |
28 Jul 15 |
olle |
3370 |
} |
3449 |
28 Jul 15 |
olle |
3371 |
*/ |
3449 |
28 Jul 15 |
olle |
// --- Used volume+water |
3667 |
15 Dec 15 |
olle |
if (info.origQubitConc != null) |
3449 |
28 Jul 15 |
olle |
3374 |
{ |
3519 |
01 Oct 15 |
olle |
text += '<div class="volumes"><span class="volume">'+Numbers.formatNumber(volDNA, 2)+'</span> + <span class="water">'+Numbers.formatNumber(water, 2)+'µl</span></div>'; |
3449 |
28 Jul 15 |
olle |
3376 |
} |
3449 |
28 Jul 15 |
olle |
// --- ΔCt |
3667 |
15 Dec 15 |
olle |
if (info.origDeltaCt != null) |
3449 |
28 Jul 15 |
olle |
3379 |
{ |
3667 |
15 Dec 15 |
olle |
text += '<div class="quality-score">ΔCt='+Numbers.formatNumber(info.origDeltaCt, 2) + '</div>'; |
3667 |
15 Dec 15 |
olle |
if (info.origDeltaCt > QUALITY_SCORE_WARNING_LIMIT) |
3615 |
20 Nov 15 |
olle |
3382 |
{ |
3615 |
20 Nov 15 |
olle |
if (!painter.hasClass('plate', 'hide-quality-score')) |
3615 |
20 Nov 15 |
olle |
3384 |
{ |
3615 |
20 Nov 15 |
olle |
warningMsg[warningMsg.length] = 'High ΔCt value'; |
3615 |
20 Nov 15 |
olle |
3386 |
} |
3615 |
20 Nov 15 |
olle |
3387 |
} |
3449 |
28 Jul 15 |
olle |
3388 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
3390 |
{ |
3615 |
20 Nov 15 |
olle |
if (!painter.hasClass('plate', 'hide-quality-score')) |
3615 |
20 Nov 15 |
olle |
3392 |
{ |
3615 |
20 Nov 15 |
olle |
warningMsg[warningMsg.length] = 'No ΔCt value'; |
3615 |
20 Nov 15 |
olle |
3394 |
} |
3449 |
28 Jul 15 |
olle |
3395 |
} |
3449 |
28 Jul 15 |
olle |
// --- QubitConc |
3667 |
15 Dec 15 |
olle |
if (info.origQubitConc) |
3449 |
28 Jul 15 |
olle |
3398 |
{ |
3667 |
15 Dec 15 |
olle |
text += '<div class="origqubitconc">'+Numbers.formatNumber(info.origQubitConc, 2) + 'ng/µl (orig.)</div>'; |
3667 |
15 Dec 15 |
olle |
text += '<div class="calcqubitconc">'+Numbers.formatNumber(calcConc, 2) + 'ng/µl (calc.)</div>'; |
3449 |
28 Jul 15 |
olle |
3401 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
3403 |
{ |
3667 |
15 Dec 15 |
olle |
if (!painter.hasClass('plate', 'hide-origqubitconc')) |
3615 |
20 Nov 15 |
olle |
3405 |
{ |
3615 |
20 Nov 15 |
olle |
warningMsg[warningMsg.length] = 'No QubitConc value'; |
3615 |
20 Nov 15 |
olle |
3407 |
} |
3449 |
28 Jul 15 |
olle |
3408 |
} |
3449 |
28 Jul 15 |
olle |
3409 |
/* |
3449 |
28 Jul 15 |
olle |
if (info.QiacubeDate) |
3449 |
28 Jul 15 |
olle |
3411 |
{ |
3449 |
28 Jul 15 |
olle |
text += '<div class="qiacube-date">'+info.QiacubeDate+'</div>'; |
3449 |
28 Jul 15 |
olle |
3413 |
} |
3449 |
28 Jul 15 |
olle |
else if (info.DilutionDate) |
3449 |
28 Jul 15 |
olle |
3415 |
{ |
3449 |
28 Jul 15 |
olle |
text += '<div class="dilution-date">'+info.DilutionDate+'</div>'; |
3449 |
28 Jul 15 |
olle |
3417 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
3419 |
{ |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = info.preNormalized ? 'No DilutionDate value' : 'No QiacubeDate value'; |
3449 |
28 Jul 15 |
olle |
3421 |
} |
3449 |
28 Jul 15 |
olle |
3422 |
*/ |
3449 |
28 Jul 15 |
olle |
if (info.AutoProcessing) |
3449 |
28 Jul 15 |
olle |
3424 |
{ |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = info.AutoProcessing; |
3449 |
28 Jul 15 |
olle |
3426 |
} |
3449 |
28 Jul 15 |
olle |
3427 |
/* |
3449 |
28 Jul 15 |
olle |
dna.usedQuantity = dna.qc ? QUANTITY_QC : QUANTITY_REGULAR; // µg |
3449 |
28 Jul 15 |
olle |
dna.dilutionConc = 1000 * dna.usedQuantity / TOTAL_VOLUME; // ng/µl |
3449 |
28 Jul 15 |
olle |
3430 |
|
3667 |
15 Dec 15 |
olle |
var volDNA = Math.ceil(10000*dna.usedQuantity/info.origQubitConc) / 10; // µl, rounded to 1 decimal |
3449 |
28 Jul 15 |
olle |
var water = TOTAL_VOLUME - volDNA; |
3449 |
28 Jul 15 |
olle |
3433 |
|
3449 |
28 Jul 15 |
olle |
if (volDNA < MINIMAL_DNA_VOLUME) |
3449 |
28 Jul 15 |
olle |
3435 |
{ |
3449 |
28 Jul 15 |
olle |
// Large mix since we do not want to take less than 1µl |
3449 |
28 Jul 15 |
olle |
volDNA = MINIMAL_DNA_VOLUME; |
3667 |
15 Dec 15 |
olle |
dna.usedQuantity = volDNA * info.origQubitConc / 1000; // µg |
3449 |
28 Jul 15 |
olle |
var totalVolume = 1000 * dna.usedQuantity / dna.dilutionConc; // µl |
3449 |
28 Jul 15 |
olle |
water = totalVolume - volDNA; |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = 'Large mix'; |
3449 |
28 Jul 15 |
olle |
3442 |
} |
3449 |
28 Jul 15 |
olle |
3443 |
|
3449 |
28 Jul 15 |
olle |
if (info.remainingQuantity) |
3449 |
28 Jul 15 |
olle |
3445 |
{ |
3449 |
28 Jul 15 |
olle |
//text += '<div class="quantity">'+Numbers.formatNumber(info.remainingQuantity, 2) + 'µg</div>'; |
3449 |
28 Jul 15 |
olle |
text += '<div class="quantity">'+Numbers.formatNumber(info.remainingQuantity, 2) + 'µg '+Numbers.formatNumber(volDNA, 1)+'µl</div>'; |
3449 |
28 Jul 15 |
olle |
// Must have at least 1.1µg or 1.22µg (if default values are used) |
3449 |
28 Jul 15 |
olle |
var remainLimit = dna.qc ? QUANTITY_QC : QUANTITY_REGULAR; |
3449 |
28 Jul 15 |
olle |
if (info.remainingQuantity < remainLimit) |
3449 |
28 Jul 15 |
olle |
3451 |
{ |
3449 |
28 Jul 15 |
olle |
well.setError('Not enough DNA'); |
3449 |
28 Jul 15 |
olle |
3453 |
} |
3449 |
28 Jul 15 |
olle |
// Warning if near the limit |
3449 |
28 Jul 15 |
olle |
if (info.remainingQuantity < LOW_QUANTITY_WARNING_LIMIT && !info.preNormalized) |
3449 |
28 Jul 15 |
olle |
3456 |
{ |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = 'Low quantity'; |
3449 |
28 Jul 15 |
olle |
3458 |
} |
3449 |
28 Jul 15 |
olle |
3459 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
3461 |
{ |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = 'No quantity'; |
3449 |
28 Jul 15 |
olle |
3463 |
} |
3449 |
28 Jul 15 |
olle |
if (info.deltaCt) |
3449 |
28 Jul 15 |
olle |
3465 |
{ |
3449 |
28 Jul 15 |
olle |
text += '<div class="quality-score">ΔCt='+Numbers.formatNumber(info.deltaCt, 1) + '</div>'; |
3449 |
28 Jul 15 |
olle |
if (info.deltaCt > QUALITY_SCORE_WARNING_LIMIT) warningMsg[warningMsg.length] = 'High ΔCt value'; |
3449 |
28 Jul 15 |
olle |
3468 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
3470 |
{ |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = 'No ΔCt value'; |
3449 |
28 Jul 15 |
olle |
3472 |
} |
3667 |
15 Dec 15 |
olle |
if (info.origQubitConc) |
3449 |
28 Jul 15 |
olle |
3474 |
{ |
3667 |
15 Dec 15 |
olle |
text += '<div class="origqubitconc">'+Numbers.formatNumber(info.origQubitConc, 2) + 'ng/µl</div>'; |
3449 |
28 Jul 15 |
olle |
text += '<div class="volumes"><span class="volume">'+Numbers.formatNumber(volDNA, 1)+'</span> + <span class="water">'+Numbers.formatNumber(water, 1)+'µl</span></div>'; |
3449 |
28 Jul 15 |
olle |
3477 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
3479 |
{ |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = 'No QubitConc value'; |
3449 |
28 Jul 15 |
olle |
3481 |
} |
3449 |
28 Jul 15 |
olle |
if (info.QiacubeDate) |
3449 |
28 Jul 15 |
olle |
3483 |
{ |
3449 |
28 Jul 15 |
olle |
text += '<div class="qiacube-date">'+info.QiacubeDate+'</div>'; |
3449 |
28 Jul 15 |
olle |
3485 |
} |
3449 |
28 Jul 15 |
olle |
else if (info.DilutionDate) |
3449 |
28 Jul 15 |
olle |
3487 |
{ |
3449 |
28 Jul 15 |
olle |
text += '<div class="dilution-date">'+info.DilutionDate+'</div>'; |
3449 |
28 Jul 15 |
olle |
3489 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
3491 |
{ |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = info.preNormalized ? 'No DilutionDate value' : 'No QiacubeDate value'; |
3449 |
28 Jul 15 |
olle |
3493 |
} |
3449 |
28 Jul 15 |
olle |
if (info.AutoProcessing) |
3449 |
28 Jul 15 |
olle |
3495 |
{ |
3449 |
28 Jul 15 |
olle |
warningMsg[warningMsg.length] = info.AutoProcessing; |
3449 |
28 Jul 15 |
olle |
3497 |
} |
3449 |
28 Jul 15 |
olle |
3498 |
*/ |
3449 |
28 Jul 15 |
olle |
3499 |
} |
3667 |
15 Dec 15 |
olle |
else if (!dna.origId) |
3449 |
28 Jul 15 |
olle |
3501 |
{ |
3449 |
28 Jul 15 |
olle |
well.setError('DNA not found'); |
3449 |
28 Jul 15 |
olle |
3503 |
} |
3449 |
28 Jul 15 |
olle |
if (dna.comment) |
3449 |
28 Jul 15 |
olle |
3505 |
{ |
3449 |
28 Jul 15 |
olle |
text += '<div class="comment">'+Strings.encodeTags(dna.comment)+'</div>'; |
3449 |
28 Jul 15 |
olle |
3507 |
} |
3449 |
28 Jul 15 |
olle |
if (info && info.comment) |
3449 |
28 Jul 15 |
olle |
3509 |
{ |
3449 |
28 Jul 15 |
olle |
text += '<div class="comment">'+Strings.encodeTags(info.comment)+'</div>'; |
3449 |
28 Jul 15 |
olle |
3511 |
} |
3449 |
28 Jul 15 |
olle |
if (warningMsg.length > 0) |
3449 |
28 Jul 15 |
olle |
3513 |
{ |
3449 |
28 Jul 15 |
olle |
well.setWarning(warningMsg.join('; ')); |
3449 |
28 Jul 15 |
olle |
3515 |
} |
3614 |
20 Nov 15 |
olle |
// Index 1 & 2 primers |
3614 |
20 Nov 15 |
olle |
var row = well.row + 1; |
3614 |
20 Nov 15 |
olle |
var column = well.column + 1; |
3614 |
20 Nov 15 |
olle |
var index2 = 'A50' + row; |
3614 |
20 Nov 15 |
olle |
var index1 = 'A70' + column; |
3614 |
20 Nov 15 |
olle |
if (column > 9) |
3614 |
20 Nov 15 |
olle |
3522 |
{ |
3614 |
20 Nov 15 |
olle |
index1 = 'A7' + column; |
3614 |
20 Nov 15 |
olle |
3524 |
} |
3614 |
20 Nov 15 |
olle |
text += '<div class="indexprimer">'+index2+'</div>'; |
3614 |
20 Nov 15 |
olle |
text += '<div class="indexprimer">'+index1+'</div>'; |
3449 |
28 Jul 15 |
olle |
3527 |
} |
3449 |
28 Jul 15 |
olle |
else if (well.copyText) |
3449 |
28 Jul 15 |
olle |
3529 |
{ |
3449 |
28 Jul 15 |
olle |
text = '<div class="copy-text">'+well.copyText+'</div>'; |
3449 |
28 Jul 15 |
olle |
3531 |
} |
3449 |
28 Jul 15 |
olle |
else |
3449 |
28 Jul 15 |
olle |
3533 |
{ |
3449 |
28 Jul 15 |
olle |
text = 'empty'; |
3449 |
28 Jul 15 |
olle |
3535 |
} |
3449 |
28 Jul 15 |
olle |
if (well.duplicate) |
3449 |
28 Jul 15 |
olle |
3537 |
{ |
3449 |
28 Jul 15 |
olle |
well.setError('Duplicate barcode'); |
3449 |
28 Jul 15 |
olle |
3539 |
} |
3449 |
28 Jul 15 |
olle |
3540 |
|
3449 |
28 Jul 15 |
olle |
var bc = Doc.element('barcode.'+well.row+'.'+well.column); |
3449 |
28 Jul 15 |
olle |
if (bc) |
3449 |
28 Jul 15 |
olle |
3543 |
{ |
3449 |
28 Jul 15 |
olle |
var cls = 'barcode-well' |
3449 |
28 Jul 15 |
olle |
cls += well.column == 0 ? ' barcode-left' : ' barcode-right'; |
3449 |
28 Jul 15 |
olle |
3546 |
|
3449 |
28 Jul 15 |
olle |
if (well.barcode) |
3449 |
28 Jul 15 |
olle |
3548 |
{ |
3449 |
28 Jul 15 |
olle |
bc.innerHTML = well.barcode.name; |
3449 |
28 Jul 15 |
olle |
var indexSet = painter.barcodeVariant ? painter.barcodeVariant.indexSets[well.column] : null; |
3449 |
28 Jul 15 |
olle |
if (indexSet) |
3449 |
28 Jul 15 |
olle |
3552 |
{ |
3449 |
28 Jul 15 |
olle |
cls += ' ' + indexSet.color; |
3449 |
28 Jul 15 |
olle |
3554 |
} |
3449 |
28 Jul 15 |
olle |
if (well.defaultBarcode && well.barcode != well.defaultBarcode) |
3449 |
28 Jul 15 |
olle |
3556 |
{ |
3449 |
28 Jul 15 |
olle |
cls += ' bg-modified'; |
3449 |
28 Jul 15 |
olle |
3558 |
} |
3449 |
28 Jul 15 |
olle |
if (well.duplicate) |
3449 |
28 Jul 15 |
olle |
3560 |
{ |
3449 |
28 Jul 15 |
olle |
cls += ' duplicate'; |
3449 |
28 Jul 15 |
olle |
3562 |
} |
3449 |
28 Jul 15 |
olle |
3563 |
} |
3449 |
28 Jul 15 |
olle |
bc.className = cls; |
3449 |
28 Jul 15 |
olle |
3565 |
} |
3449 |
28 Jul 15 |
olle |
return text; |
3449 |
28 Jul 15 |
olle |
3567 |
} |
3449 |
28 Jul 15 |
olle |
3568 |
|
3615 |
20 Nov 15 |
olle |
3569 |
/** |
3615 |
20 Nov 15 |
olle |
* Returns `true` if HTML element with id 'elementId' has |
3615 |
20 Nov 15 |
olle |
* class 'cls', else `false`. |
3615 |
20 Nov 15 |
olle |
3572 |
*/ |
3615 |
20 Nov 15 |
olle |
painter.hasClass = function(elementId, cls) |
3615 |
20 Nov 15 |
olle |
3574 |
{ |
3615 |
20 Nov 15 |
olle |
var element = document.getElementById(elementId); |
3615 |
20 Nov 15 |
olle |
return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1; |
3615 |
20 Nov 15 |
olle |
3577 |
} |
3615 |
20 Nov 15 |
olle |
3578 |
|
3449 |
28 Jul 15 |
olle |
painter.fetchDilutionFactor = function(deltaCt) |
3449 |
28 Jul 15 |
olle |
3580 |
{ |
3449 |
28 Jul 15 |
olle |
var dilutionFactor = 1.0; |
3519 |
01 Oct 15 |
olle |
3582 |
/* |
3519 |
01 Oct 15 |
olle |
// Illumina ladder dilution chart |
3449 |
28 Jul 15 |
olle |
if (deltaCt > 0.5 && deltaCt <= 1.5) |
3449 |
28 Jul 15 |
olle |
3585 |
{ |
3449 |
28 Jul 15 |
olle |
dilutionFactor = 2.0; |
3449 |
28 Jul 15 |
olle |
3587 |
} |
3449 |
28 Jul 15 |
olle |
if (deltaCt > -0.5 && deltaCt <= 0.5) |
3449 |
28 Jul 15 |
olle |
3589 |
{ |
3449 |
28 Jul 15 |
olle |
dilutionFactor = 4.0; |
3449 |
28 Jul 15 |
olle |
3591 |
} |
3449 |
28 Jul 15 |
olle |
if (deltaCt > -1.5 && deltaCt <= -0.5) |
3449 |
28 Jul 15 |
olle |
3593 |
{ |
3449 |
28 Jul 15 |
olle |
dilutionFactor = 8.0; |
3449 |
28 Jul 15 |
olle |
3595 |
} |
3449 |
28 Jul 15 |
olle |
if (deltaCt <=- 1.5) |
3449 |
28 Jul 15 |
olle |
3597 |
{ |
3449 |
28 Jul 15 |
olle |
dilutionFactor = 16.0; |
3449 |
28 Jul 15 |
olle |
3599 |
} |
3519 |
01 Oct 15 |
olle |
3600 |
*/ |
3519 |
01 Oct 15 |
olle |
// Dilution curve fitted to centers of ladder steps in Illumina ladder dilution chart (Mats Jönsson 2015-09-28) |
3519 |
01 Oct 15 |
olle |
var fact = 2.8284271247; |
3519 |
01 Oct 15 |
olle |
var expFact = 0.6931471806; |
3519 |
01 Oct 15 |
olle |
dilutionFactor = fact * Math.exp(-expFact*deltaCt); |
3592 |
12 Nov 15 |
olle |
// Apply cut-offs restricting the dilution factor to [1.0, 16.0] |
3519 |
01 Oct 15 |
olle |
if (dilutionFactor < 1.0) |
3519 |
01 Oct 15 |
olle |
3607 |
{ |
3519 |
01 Oct 15 |
olle |
dilutionFactor = 1.0; |
3519 |
01 Oct 15 |
olle |
3609 |
} |
3592 |
12 Nov 15 |
olle |
if (dilutionFactor > 16.0) |
3592 |
12 Nov 15 |
olle |
3611 |
{ |
3592 |
12 Nov 15 |
olle |
dilutionFactor = 16.0; |
3592 |
12 Nov 15 |
olle |
3613 |
} |
3449 |
28 Jul 15 |
olle |
return dilutionFactor; |
3449 |
28 Jul 15 |
olle |
3615 |
} |
3449 |
28 Jul 15 |
olle |
3616 |
|
3449 |
28 Jul 15 |
olle |
return painter; |
3449 |
28 Jul 15 |
olle |
3618 |
}(); |