diff options
-rw-r--r-- | uploader/phenotypes/views.py | 14 | ||||
-rw-r--r-- | uploader/population/views.py | 12 | ||||
-rw-r--r-- | uploader/templates/phenotypes/select-population.html | 20 | ||||
-rw-r--r-- | uploader/templates/populations/create-population.html | 5 | ||||
-rw-r--r-- | uploader/templates/populations/macro-select-population.html | 55 |
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 — 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%} |