about summary refs log tree commit diff
path: root/uploader
diff options
context:
space:
mode:
Diffstat (limited to 'uploader')
-rw-r--r--uploader/phenotypes/views.py14
-rw-r--r--uploader/population/views.py12
-rw-r--r--uploader/templates/phenotypes/select-population.html20
-rw-r--r--uploader/templates/populations/create-population.html5
-rw-r--r--uploader/templates/populations/macro-select-population.html55
5 files changed, 67 insertions, 39 deletions
diff --git a/uploader/phenotypes/views.py b/uploader/phenotypes/views.py
index c0ab493..bcbb3a9 100644
--- a/uploader/phenotypes/views.py
+++ b/uploader/phenotypes/views.py
@@ -89,14 +89,18 @@ def select_population(species: dict, **kwargs):# pylint: disable=[unused-argumen
         if not bool(request.args.get("population_id")):
             return render_template("phenotypes/select-population.html",
                                    species=species,
-                                   populations=order_by_family(
-                                       populations_by_species(
-                                           conn, species["SpeciesId"]),
-                                       order_key="FamilyOrder"),
+                                   populations=populations_by_species(
+                                       conn, species["SpeciesId"]),
                                    activelink="phenotypes")
 
+        population_id = request.args["population_id"]
+        if population_id == "CREATE-POPULATION":
+            return redirect(url_for(
+                "species.populations.create_population",
+                species_id=species["SpeciesId"],
+                return_to="species.populations.phenotypes.list_datasets"))
         population = population_by_species_and_id(
-            conn, species["SpeciesId"], int(request.args["population_id"]))
+            conn, species["SpeciesId"], int(population_id))
         if not bool(population):
             flash("No such population found!", "alert-danger")
             return redirect(url_for(
diff --git a/uploader/population/views.py b/uploader/population/views.py
index 4f985f5..1ece35f 100644
--- a/uploader/population/views.py
+++ b/uploader/population/views.py
@@ -5,6 +5,7 @@ import base64
 from MySQLdb.cursors import DictCursor
 from gn_libs.mysqldb import database_connection
 from flask import (flash,
+                   escape,
                    request,
                    url_for,
                    redirect,
@@ -101,6 +102,7 @@ def create_population(species_id: int):
                     {"id": "2", "value": "GEMMA"},
                     {"id": "3", "value": "R/qtl"},
                     {"id": "4", "value": "GEMMA, PLINK"}),
+                return_to=(request.args.get("return_to") or ""),
                 activelink="create-population",
                 **error_values)
 
@@ -151,7 +153,15 @@ def create_population(species_id: int):
         })
 
         def __flash_success__(_success):
-            flash("Successfully created resource.", "alert-success")
+            flash("Successfully created population "
+                  f"{escape(new_population['FullName'])}.",
+                  "alert-success")
+            return_to = request.form.get("return_to") or ""
+            if return_to:
+                return redirect(url_for(
+                    return_to,
+                    species_id=species["SpeciesId"],
+                    population_id=new_population["InbredSetId"]))
             return redirect(url_for(
                 "species.populations.view_population",
                 species_id=species["SpeciesId"],
diff --git a/uploader/templates/phenotypes/select-population.html b/uploader/templates/phenotypes/select-population.html
index eafd4a7..d6e6aa1 100644
--- a/uploader/templates/phenotypes/select-population.html
+++ b/uploader/templates/phenotypes/select-population.html
@@ -11,18 +11,24 @@
 {%block contents%}
 {{flash_all_messages()}}
 
-<div class="row">
-  <p>Select the population for your phenotypes to view and manage the phenotype
-    datasets that relate to it.</p>
-</div>
 
 <div class="row">
-  {{select_population_form(url_for("species.populations.phenotypes.select_population",
-  species_id=species.SpeciesId),
-  populations)}}
+  {{select_population_form(url_for("species.populations.phenotypes.select_population", species_id=species.SpeciesId), species, populations)}}
 </div>
 {%endblock%}
 
 {%block sidebarcontents%}
 {{display_species_card(species)}}
 {%endblock%}
+
+{%block javascript%}
+<script type="text/javascript"
+        src="{{url_for('base.datatables',
+             filename='js/jquery.dataTables.js')}}"></script>
+<script type="text/javascript" src="/static/js/populations.js"></script>
+<script type="text/javascript">
+  $(function() {
+      populationDataTable(JSON.parse($("#tbl-select-population").attr("data-populations-list")));
+  });
+  </script>
+{%endblock%}
diff --git a/uploader/templates/populations/create-population.html b/uploader/templates/populations/create-population.html
index 86aebda..c0c4f45 100644
--- a/uploader/templates/populations/create-population.html
+++ b/uploader/templates/populations/create-population.html
@@ -37,12 +37,15 @@
 <div class="row">
   <form method="POST"
         action="{{url_for('species.populations.create_population',
-                species_id=species.SpeciesId)}}">
+                species_id=species.SpeciesId,
+                return_to=return_to)}}">
 
     <legend>Create Population</legend>
 
     {{flash_all_messages()}}
 
+    <input type="hidden" name="return_to" value="{{return_to}}">
+
     <div {%if errors.population_fullname%}
          class="form-group has-error"
          {%else%}
diff --git a/uploader/templates/populations/macro-select-population.html b/uploader/templates/populations/macro-select-population.html
index ef74ac3..b7ff088 100644
--- a/uploader/templates/populations/macro-select-population.html
+++ b/uploader/templates/populations/macro-select-population.html
@@ -1,33 +1,38 @@
-{%macro select_population_form(form_action, populations)%}
+{%macro select_population_form(form_action, species, populations)%}
 <form method="GET" action="{{form_action}}" class="form-horizontal">
-  <legend>Select Population</legend>
 
-  <div class="form-group">
-    <label for="select-population" class="control-label col-sm-2">
-      Population</label>
-    <div class="col-sm-10">
-      <select id="select-population"
-              name="population_id"
-              class="form-control"
-              required="required">
-        <option value="">Select Population</option>
-        {%for family in populations%}
-        <optgroup {%if family[0][1] is not none%}
-                  label="{{family[0][1]}}"
-                  {%else%}
-                  label="Undefined"
-                  {%endif%}>
-          {%for population in family[1]%}
-          <option value="{{population.Id}}">{{population.FullName}}</option>
-          {%endfor%}
-        </optgroup>
-        {%endfor%}
-      </select>
-    </div>
+  {%if populations | length != 0%}
+
+  <label class="control-label">What population will you be working with?</label>
+  <table id="tbl-select-population" class="table compact stripe"
+         data-populations-list='{{populations | tojson}}'>
+    <thead>
+      <tr>
+        <th></th>
+        <th>Population</th>
+      </tr>
+    </thead>
+
+    <tbody></tbody>
+  </table>
+
+  <div>
+    <label class="control-label">
+      <input type="radio" name="population_id" value="CREATE-POPULATION" />
+      I cannot find the population I want &mdash; create it!
+    </label>
   </div>
 
+  {%else%}
+  <p class="form-text">
+    There are no populations currently defined for {{species['FullName']}}
+    ({{species['SpeciesName']}}).<br />
+    Click "Continue" to create the first!</p>
+  <input type="hidden" name="population_id" value="CREATE-POPULATION" />
+  {%endif%}
+
   <div class="col-sm-offset-2 col-sm-10">
-    <input type="submit" value="Select" class="btn btn-primary" />
+    <input type="submit" value="continue" class="btn btn-primary" />
   </div>
 </form>
 {%endmacro%}