3 * Isaak Y Tecle <iyt2@cornell.edu>
8 jQuery(document
).ready( function() {
10 var url
= document
.URL
;
12 if (url
.match(/\/breeders_toolbox\/trial|breeders\/trial|\/solgs\/population\//)) {
19 function allowAnova () {
26 function checkDesign () {
28 var trialId
= getTrialId();
33 data
: {'trial_id': trialId
},
34 url
: '/anova/check/design/',
35 success: function(response
) {
38 showMessage(response
.Error
);
39 jQuery("#run_anova").hide();
45 error: function(response
) {
46 showMessage("Error occured running the ANOVA.");
47 jQuery("#run_anova").show();
54 jQuery(document
).ready(function () {
55 jQuery(document
).on("click", "#run_anova", function() {
57 var traitId
= jQuery("#anova_selected_trait_id").val();
61 queryPhenoData(traitId
);
63 jQuery("#run_anova").hide();
65 showMessage("Running anova analysis...");
67 var msg
= 'You need to select a trait first.'
76 function anovaAlert(msg
) {
86 jQuery(this).dialog('close');
88 class: 'btn btn-success',
97 function queryPhenoData(traitId
) {
99 var trialId
= getTrialId();
104 data
: {'trial_id': trialId
, 'traits_ids': [traitId
]},
105 url
: '/anova/phenotype/data/',
106 success: function(response
) {
108 if (response
.Error
) {
109 showMessage(response
.Error
);
110 jQuery("#run_anova").show();
112 var traitsAbbrs
= response
.traits_abbrs
;
113 runAnovaAnalysis(traitsAbbrs
);
116 error: function(response
) {
117 showMessage("Error occured running the ANOVA.");
118 jQuery("#run_anova").show();
124 function showMessage (msg
) {
125 jQuery("#anova_message")
126 .css({"padding-left": '0px'})
132 function runAnovaAnalysis(traits
) {
134 var trialId
= getTrialId();
136 var captions
= jQuery('#anova_table table').find('caption').text();
137 var analyzedTraits
= captions
.replace(/ANOVA result:/g, ' ');
139 for (var i
= 0; i
< traits
.length
; i
++) {
140 var traitAbbr
= traits
[i
].trait_abbr
;
142 if (analyzedTraits
.match(traitAbbr
) == null) {
143 var anovaTraits
= JSON
.stringify(traits
);
148 data
: {'trial_id': trialId
, 'traits': [anovaTraits
]},
149 url
: '/anova/analysis/',
150 success: function(response
) {
153 var anovaTable
= response
.anova_html_table
;
155 jQuery("#anova_table").append('<div style="margin-top: 20px">' + anovaTable
+ '</div>').show();
157 var anovaFile
= response
.anova_table_file
;
158 var modelFile
= response
.anova_model_file
;
159 var meansFile
= response
.adj_means_file
;
160 var diagnosticsFile
= response
.anova_diagnostics_file
;
162 var fileNameAnova
= anovaFile
.split('/').pop();
163 var fileNameModel
= modelFile
.split('/').pop();
164 var fileNameMeans
= meansFile
.split('/').pop();
165 var fileNameDiagnostics
= diagnosticsFile
.split('/').pop()
167 anovaFile
= "<a href=\"" + anovaFile
+ "\" download=" + fileNameAnova
+ ">[Anova table]</a>";
168 modelFile
= "<a href=\"" + modelFile
+ "\" download=" + fileNameModel
+ ">[Model Summary]</a>";
169 meansFile
= "<a href=\"" + meansFile
+ "\" download=" + fileNameMeans
+ ">[Adjusted Means]</a>";
171 diagnosticsFile
= "<a href=\"" + diagnosticsFile
172 + "\" download=" + fileNameDiagnostics
+ ">[Model Diagnostics]</a>";
174 jQuery("#anova_table")
175 .append('<br /> <strong>Download:</strong> '
182 jQuery("#anova_message").empty();
184 jQuery("#run_anova").show();
186 showMessage("There is no anova output for this dataset.");
187 jQuery("#run_anova").show();
190 clearTraitSelection();
192 error: function(response
) {
193 showMessage("Error occured running the anova analysis.");
194 jQuery("#run_anova").show();
195 clearTraitSelection();
199 jQuery("#anova_message").empty();
200 jQuery("#run_anova").show();
201 clearTraitSelection();
208 function listAnovaTraits () {
210 var trialId
= getTrialId();
215 data
: {'trial_id': trialId
},
216 url
: '/anova/traits/list/',
217 success: function(response
) {
218 var traits
= response
.anova_traits
;
221 formatAnovaTraits(traits
);
222 jQuery("#run_anova").show();
224 showMessage('This trial has no phenotyped traits.');
225 jQuery("#run_anova").hide();
228 error: function(response
) {
229 showMessage("Error occured listing anova traits.");
230 jQuery("#run_anova").hide();
237 function formatAnovaTraits(traits
) {
241 for (var i
= 0; i
< traits
.length
; i
++) {
242 var traitName
= traits
[i
].trait_name
;
244 var idName
= JSON
.stringify(traits
[i
]);
246 + '<a href="#">' + traitName
+ '<span class=value>' + idName
+ '</span></a>'
250 var traitsList
= '<dl id="anova_selected_trait" class="anova_dropdown">'
251 + '<dt> <a href="#"><span>Select a trait</span></a></dt>'
257 jQuery("#anova_select_a_trait_div").empty().append(traitsList
).show();
259 jQuery(".anova_dropdown dt a").click(function() {
260 jQuery(".anova_dropdown dd ul").toggle();
263 jQuery(".anova_dropdown dd ul li a").click(function() {
265 var text
= jQuery(this).html();
267 jQuery(".anova_dropdown dt a span").html(text
);
268 jQuery(".anova_dropdown dd ul").hide();
270 var traitIdName
= jQuery("#anova_selected_trait").find("dt a span.value").html();
271 traitIdName
= JSON
.parse(traitIdName
);
273 var traitId
= traitIdName
.trait_id
;
274 var traitName
= traitIdName
.trait_name
;
276 console
.log('id ' + traitId
+ ' name ' + traitName
)
278 jQuery("#anova_selected_trait_name").val(traitName
);
279 jQuery("#anova_selected_trait_id").val(traitId
);
283 jQuery(".anova_dropdown").bind('click', function(e
) {
284 var clicked
= jQuery(e
.target
);
286 if (!clicked
.parents().hasClass("anova_dropdown"))
287 jQuery(".anova_dropdown dd ul").hide();
297 function clearTraitSelection () {
299 jQuery("#anova_selected_trait_name").val('');
300 jQuery("#anova_selected_trait_id").val('');
305 function getTrialId () {
307 var trialId
= jQuery("#trial_id").val();
311 trialId
= jQuery("#population_id").val();