aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2025-12-16 11:03:34 -0600
committerFrederick Muriuki Muriithi2025-12-16 11:12:43 -0600
commite1f8f4a0ccbbd23237eca7a8bdef6f223e14d66e (patch)
tree63aaf2135aeeac141d803d8d220dc88800b18705
parenta36e5a75b2b1adf42a6db2defa764925f57d6e96 (diff)
downloadgn-uploader-e1f8f4a0ccbbd23237eca7a8bdef6f223e14d66e.tar.gz
Provide UI for actions on existing phenotypes.
-rw-r--r--uploader/templates/populations/sui-view-population.html144
1 files changed, 144 insertions, 0 deletions
diff --git a/uploader/templates/populations/sui-view-population.html b/uploader/templates/populations/sui-view-population.html
index 3bf8d0d..adb28db 100644
--- a/uploader/templates/populations/sui-view-population.html
+++ b/uploader/templates/populations/sui-view-population.html
@@ -105,7 +105,62 @@
<!-- Provide other features for publications on loaded page. -->
</div>
</div>
+
+ <div class="row" style="margin-top: 1em;">
+ <h3> Phenotypes in Population "{{population.FullName}} ({{population.Name}})"</h3>
+
+ <p>The table below lists the phenotypes that already exist for
+ population "<em>{{population.FullName}} ({{population.Name}})</em>" of
+ species "<em>{{species.FullName}} ({{species.Name}})</em>".</p>
+
+ <div class="row phenotypes-list-actions">
+ <div class="col">
+ <form id="frm-recompute-phenotype-means"
+ method="POST"
+ action="{{url_for(
+ 'species.populations.phenotypes.recompute_means',
+ species_id=species['SpeciesId'],
+ population_id=population['Id'],
+ dataset_id=dataset['Id'])}}">
+ <input id="submit-frm-recompute-phenotype-means"
+ class="btn btn-info"
+ type="submit"
+ title="Compute/Recompute the means for selected phenotypes (or all phenotypes if none selected)."
+ value="(Rec/C)ompute means" />
+ </form>
+ </div>
+ <div class="col">
+ <form id="frm-rerun-qtlreaper"
+ method="POST"
+ action="{{url_for(
+ 'species.populations.phenotypes.rerun_qtlreaper',
+ species_id=species['SpeciesId'],
+ population_id=population['Id'],
+ dataset_id=dataset['Id'])}}">
+ <input id="submit-frm-rerun-qtlreaper"
+ class="btn btn-info"
+ type="submit"
+ title="Run/Rerun QTLReaper for selected phenotypes (or all phenotypes if none selected)."
+ value="(rer/r)un QTLReaper" />
+ </form>
+ </div>
+ </div>
+
+ <table id="tbl-phenotypes-list" class="table compact stripe cell-border">
+ <thead>
+ <tr>
+ <th></th>
+ <th>Index</th>
+ <th>Record</th>
+ <th>Description</th>
+ </tr>
+ </thead>
+
+ <tbody></tbody>
+ </table>
+ </div>
</div>
+
<div class="tab-pane fade"
id="genotypes-content"
role="tabpanel"
@@ -136,3 +191,92 @@
{%endblock%}
+
+
+{%block javascript%}
+<script type="text/javascript" src="/static/js/urls.js"></script>
+
+<script type="text/javascript">
+ $(function() {
+ /** JS to build list of phenotypes table. **/
+ var species_id = {{species.SpeciesId}};
+ var population_id = {{population.Id}};
+ var dataset_id = {{dataset.Id}};
+ var dataset_name = "{{dataset.Name}}";
+ var data = {{phenotypes | tojson}};
+
+ var dtPhenotypesList = buildDataTable(
+ "#tbl-phenotypes-list",
+ data,
+ [
+ {
+ data: function(pheno) {
+ return `<input type="checkbox" name="selected-phenotypes" `
+ + `id="chk-selected-phenotypes-${pheno.InbredSetCode}_${pheno.xref_id}" `
+ + `value="${pheno.InbredSetCode}_${pheno.xref_id}" `
+ + `class="chk-row-select" />`
+ }
+ },
+ {data: "sequence_number"},
+ {
+ data: function(pheno, type, set, meta) {
+ var spcs_id = {{species.SpeciesId}};
+ var pop_id = {{population.Id}};
+ var dtst_id = {{dataset.Id}};
+ var url = buildURLFromCurrentURL(
+ (`/species/${spcs_id}` +
+ `/populations/${pop_id}` +
+ `/phenotypes/datasets/${dtst_id}` +
+ `/phenotype/${pheno.xref_id}`));
+ return `<a href="${url.toString()}" target="_blank">` +
+ `${pheno.InbredSetCode}_${pheno.xref_id}` +
+ `</a>`;
+ }
+ },
+ {
+ data: function(pheno) {
+ return (pheno.Post_publication_description ||
+ pheno.Original_description ||
+ pheno.Pre_publication_description);
+ }
+ }
+ ],
+ {
+ select: "multi+shift",
+ layout: {
+ top1Start: {
+ pageLength: {
+ text: "Show _MENU_ of _TOTAL_"
+ }
+ },
+ topStart: "info",
+ top1End: null
+ },
+ rowId: function(pheno) {
+ return `${pheno.InbredSetCode}_${pheno.xref_id}`;
+ }
+ });
+
+
+ $("#submit-frm-rerun-qtlreaper").on(
+ "click",
+ function(event) {
+ // (Re)run the QTLReaper script for selected phenotypes.
+ event.preventDefault();
+ var form = $("#frm-rerun-qtlreaper");
+ form.find(".dynamically-added-element").remove();
+ dtPhenotypesList.rows({selected: true}).nodes().each((node, index) => {
+ _cloned = $(node).find(".chk-row-select").clone();
+ _cloned.removeAttr("id");
+ _cloned.removeAttr("class");
+ _cloned.attr("style", "display: none;");
+ _cloned.attr("data-type", "dynamically-added-element");
+ _cloned.attr("class", "dynamically-added-element checkbox");
+ _cloned.prop("checked", true);
+ form.append(_cloned);
+ });
+ form.submit();
+ });
+ });
+</script>
+{%endblock%}