Mercurial > repos > lain > ms_to_peakforest_it
comparison src/common.js @ 1:7e3085fc60c1 draft default tip
master branch Updating
author | lain |
---|---|
date | Wed, 30 Aug 2023 14:21:18 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:b58b229c4cbf | 1:7e3085fc60c1 |
---|---|
1 | |
2 this.ctx = () => context; | |
3 var all_contexts = [] ; | |
4 var inchidata = {} ; | |
5 var all_mix_data = {} ; | |
6 var already_sent_data = {} ; | |
7 | |
8 function no_success(tab_index, inchi, data) { | |
9 console.log(`inchikey ${inchi} not found...`) ; | |
10 console.log(`disabling ${data} ...`) | |
11 disable_tab( | |
12 tab_index, | |
13 "red", | |
14 "This compound has not been found on peakforest" | |
15 ) ; | |
16 } | |
17 | |
18 function disable_tab(tab_index, color, title) { | |
19 var element = $(`#open_tab_${tab_index}`) ; | |
20 element.attr("disabled", "disabled").off("click"); | |
21 element.attr("onclick", null) ; | |
22 element.attr("title", title) ; | |
23 element.attr("data-toggle", null) ; | |
24 element.attr("href", null) ; | |
25 element.css("color", color) ; | |
26 element.css("cursor", "not-allowed") ; | |
27 } | |
28 | |
29 function successfull_send_to_pf(bundle, json, index) { | |
30 for (var i = 0 ; i < all_contexts.length ; i += 1) { | |
31 if (all_contexts[i] === null || all_contexts[i] === undefined) { | |
32 continue ; | |
33 } | |
34 if (all_contexts[i].inchikey == bundle["sample"]["inchikey"]) { | |
35 disable_tab( | |
36 all_contexts[i].tab_index, | |
37 "green", | |
38 "This compound has already been sent to peakforest" | |
39 ) | |
40 } | |
41 } | |
42 if (already_sent_data[index] == null) { | |
43 already_sent_data[index] = [] ; | |
44 } | |
45 json.forEach((id) => { | |
46 already_sent_data[index].push(id) | |
47 $("#send_buttons_div").prepend(` | |
48 <div class="row"> | |
49 <div class="col-lg-3"> | |
50 <div class="alert alert-success alert-dismissible" role="alert"> | |
51 <button type="button" class="close" data-dismiss="alert"> | |
52 <span aria-hidden="true">×</span> | |
53 <span class="sr-only"> | |
54 <spring:message code="alert.close" text="Close"></spring:message> | |
55 </span> | |
56 </button> | |
57 <strong> | |
58 <spring:message code="alert.strong.info" text="Success!"></spring:message> | |
59 </strong> Spectrum has been sent: | |
60 <a | |
61 href="${ctx().peakforest_url}/webapp/home?PFs=${id.slice(3)}" | |
62 target="_blank" | |
63 >${id}</a> | |
64 </div> | |
65 </div> | |
66 </div>`) | |
67 }) | |
68 } | |
69 | |
70 function failed_send_to_pf(err, bundle) { | |
71 console.log(err) ; | |
72 $("#send_buttons_div").prepend(` | |
73 <div class="row"> | |
74 <div class="col-lg-3"> | |
75 <div class="alert alert-error alert-dismissible" role="alert"> | |
76 <button type="button" class="close" data-dismiss="alert"> | |
77 <span aria-hidden="true">×</span> | |
78 <span class="sr-only"> | |
79 <spring:message code="alert.close" text="Close"></spring:message> | |
80 </span> | |
81 </button> | |
82 <strong> | |
83 <spring:message code="alert.strong.info" text="Error!"></spring:message> | |
84 </strong> Spectrum has not been sent! | |
85 </div> | |
86 </div> | |
87 </div>`) | |
88 } | |
89 | |
90 function already_sent(bundle, index) { | |
91 return already_sent_data[index] != null ; | |
92 } | |
93 | |
94 function failed_already_sent(bundle, index) { | |
95 already_sent_data[index].forEach((id) => { | |
96 $("#send_buttons_div").prepend(` | |
97 <div class="row"> | |
98 <div class="col-lg-3"> | |
99 <div class="alert alert-warning alert-dismissible" role="alert"> | |
100 <button type="button" class="close" data-dismiss="alert"> | |
101 <span aria-hidden="true">×</span> | |
102 <span class="sr-only"> | |
103 <spring:message code="alert.close" text="Close"></spring:message> | |
104 </span> | |
105 </button> | |
106 <strong> | |
107 <spring:message code="alert.strong.info" text="warning!"></spring:message> | |
108 </strong> Spectrum has already been sent: | |
109 <a | |
110 href="${ctx().peakforest_url}/webapp/home?PFs=${id.slice(3)}" | |
111 target="_blank" | |
112 >${id}</a> | |
113 </div> | |
114 </div> | |
115 </div>`) | |
116 }) ; | |
117 } | |
118 | |
119 function send_everything_to_peakforest(url, token) { | |
120 var bundles ; | |
121 if (context.is_mix()) { | |
122 bundles = [all_mix_data] ; | |
123 } else { | |
124 bundles = create_dataset_bundles() ; | |
125 } | |
126 bundles.forEach((bundle, index) => { | |
127 if (already_sent(bundle, index)) { | |
128 return failed_already_sent(bundle, index) ; | |
129 } | |
130 console.log(bundle) | |
131 $.ajax({ | |
132 type: "post", | |
133 url: `${url}/rest/v2/spectrum?token=${token}`, | |
134 data: JSON.stringify(bundle), | |
135 contentType: "application/json", | |
136 success: function(json) { | |
137 successfull_send_to_pf(bundle, json, index) | |
138 }, error: function(err) { | |
139 failed_send_to_pf(err, bundle) | |
140 } | |
141 }) | |
142 $.ajax({ | |
143 type: "post", | |
144 url: "/", | |
145 data: `{"index": ${index}, "object": ${JSON.stringify(bundle)}}`, | |
146 contentType: "application/json", | |
147 error: function(err) { | |
148 console.log(`Error: JSON will not be produced by the application.`) | |
149 } | |
150 }) | |
151 }) | |
152 // console.log(bundles) | |
153 } | |
154 | |
155 function create_dataset_bundles() { | |
156 var bundles = [] ; | |
157 var data ; | |
158 all_contexts.forEach((context, index) => { | |
159 if ((data = context.sent_json) === null) { | |
160 return ; | |
161 } | |
162 if (bundles.length === 0) { | |
163 // console.log("First metadata!") | |
164 return bundles.push(data) ; | |
165 } | |
166 if (merge_in_bundle(bundles, data)) { | |
167 // console.log("Merged!") | |
168 } else { | |
169 // console.log("New metadata!") | |
170 } | |
171 }) ; | |
172 return bundles ; | |
173 } | |
174 | |
175 function merge_in_bundle(bundles, data) { | |
176 for(var i = 0 ; i < bundles.length ; i += 1) { | |
177 if ( | |
178 identical(bundles[i]["sample"], data["sample"]) | |
179 && identical(bundles[i]["chromatography"], data["chromatography"]) | |
180 && identical(bundles[i]["analyzer"], data["analyzer"]) | |
181 && identical(bundles[i]["ionization_mode_positive"], data["ionization_mode_positive"]) | |
182 && identical(bundles[i]["ionization_mode_negative"], data["ionization_mode_negative"]) | |
183 && identical(bundles[i]["other_metadata"], data["other_metadata"]) | |
184 ) { | |
185 bundles[i]["peaklists"].push(data["peaklists"][0]) ; | |
186 return true ; | |
187 } else { | |
188 continue ; | |
189 console.log( | |
190 "sample: " | |
191 + identical(bundles[i]["sample"], data["sample"]) | |
192 ) | |
193 console.log( | |
194 "chromatography: " | |
195 + identical(bundles[i]["chromatography"], data["chromatography"]) | |
196 ) | |
197 console.log( | |
198 "analyzer: " | |
199 + identical(bundles[i]["analyzer"], data["analyzer"]) | |
200 ) | |
201 console.log( | |
202 "ionization_mode_positive: " | |
203 + identical(bundles[i]["ionization_mode_positive"], data["ionization_mode_positive"]) | |
204 ) | |
205 console.log( | |
206 "ionization_mode_negative: " | |
207 + identical(bundles[i]["ionization_mode_negative"], data["ionization_mode_negative"]) | |
208 ) | |
209 console.log( | |
210 "other_metadata: " | |
211 + identical(bundles[i]["other_metadata"], data["other_metadata"]) | |
212 ) | |
213 } | |
214 } | |
215 bundles.push(data) ; | |
216 return false ; | |
217 } | |
218 | |
219 function identical(left, right) { | |
220 if (typeof left !== typeof right) { | |
221 return false ; | |
222 } | |
223 if (left === null) { | |
224 return right === null ; | |
225 } | |
226 if (right === null) { | |
227 return left === null ; | |
228 } | |
229 switch (typeof left) { | |
230 case "array": | |
231 return identical_array(left, right) ; | |
232 break ; | |
233 case "object": | |
234 return identical_object(left, right) ; | |
235 break ; | |
236 default: | |
237 break ; | |
238 } | |
239 return (left === right) | |
240 } | |
241 | |
242 function identical_array(left, right) { | |
243 if (right.length !== left.length) { | |
244 return false ; | |
245 } | |
246 for(var i = 0 ; i < left.length ; i += 1) { | |
247 if (!identical(left[i], right[i])) { | |
248 return false ; | |
249 } | |
250 } | |
251 return true ; | |
252 } | |
253 | |
254 function identical_object(left, right) { | |
255 var left_keys ; | |
256 | |
257 if (!( | |
258 share_keys(left, right) | |
259 && share_keys(right, left) | |
260 )) { | |
261 return true ; | |
262 } | |
263 left_keys = Object.keys(left) ; | |
264 for (var i = 0 ; i < left_keys.length ; i += 1){ | |
265 if (!identical(left[left_keys[i]], right[left_keys[i]])) { | |
266 return false ; | |
267 } | |
268 } | |
269 return true ; | |
270 } | |
271 | |
272 function share_keys(left, right) { | |
273 var left_keys ; | |
274 var right_keys ; | |
275 | |
276 left_keys = Object.keys(left) ; | |
277 right_keys = Object.keys(right) ; | |
278 for(var i = 0 ; i < left_keys.length ; i += 1) { | |
279 if (!right_keys.includes(left_keys[i])) { | |
280 return false ; | |
281 } | |
282 } | |
283 return true ; | |
284 } | |
285 | |
286 var set_inchi_data = function(data, tab_index) { | |
287 inchidata[data.inchikey] = data ; | |
288 $(`#add1spectrum-sample-inchi-${tab_index}`).val(data.inchi); | |
289 $(`#add1spectrum-sample-inchi-${tab_index}`).change(); | |
290 $(`#add1spectrum-sample-commonName-${tab_index}`).val(data.name); | |
291 $(`#add1spectrum-sample-commonName-${tab_index}`).change(); | |
292 $(`#sample-bonus-display-${tab_index}`).html( | |
293 `<img | |
294 class="" | |
295 src="{{ PF_URL_PLACEHOLDER }}/webapp/image/${data.type}/${data.inchikey}" | |
296 alt="${data.name}" | |
297 >` | |
298 ); | |
299 } | |
300 | |
301 var lightgrayRenderer = function(instance, td, row, col, prop, value, cellProperties) { | |
302 Handsontable.renderers.TextRenderer.apply(this, arguments); | |
303 td.style.backgroundColor = "#EEE"; | |
304 } |