about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/oauth2/data.py2
-rw-r--r--wqflask/wqflask/static/new/javascript/auth/search.js9
-rw-r--r--wqflask/wqflask/static/new/javascript/auth/search_phenotypes.js76
-rw-r--r--wqflask/wqflask/templates/oauth2/data-list-phenotype.html53
4 files changed, 115 insertions, 25 deletions
diff --git a/wqflask/wqflask/oauth2/data.py b/wqflask/wqflask/oauth2/data.py
index c3d426cf..5026a6d1 100644
--- a/wqflask/wqflask/oauth2/data.py
+++ b/wqflask/wqflask/oauth2/data.py
@@ -65,7 +65,7 @@ def __search_genotypes__(query, template, **kwargs):
 
 def __search_phenotypes__(query, template, **kwargs):
     page = int(request.args.get("page", 1))
-    per_page = int(request.args.get("per_page", 500))
+    per_page = int(request.args.get("per_page", 50))
     selected_traits = request.form.getlist("selected_traits")
     def __search_error__(error):
         raise Exception(error)
diff --git a/wqflask/wqflask/static/new/javascript/auth/search.js b/wqflask/wqflask/static/new/javascript/auth/search.js
index cd86a9df..4e79bfd4 100644
--- a/wqflask/wqflask/static/new/javascript/auth/search.js
+++ b/wqflask/wqflask/static/new/javascript/auth/search.js
@@ -138,13 +138,14 @@ function debounce(func, delay=500) {
  * @param {Dataset Object} A JSON.stringify-able object
  * @param {String} The name to assign the checkbox
  */
-function build_checkbox(data_object, checkbox_name, checkbox_aux_classes="") {
+function build_checkbox(data_object, checkbox_name, checkbox_aux_classes="", checked=false) {
     cell = $("<td>");
     check = $(
 	'<input type="checkbox" class="checkbox" ' +
-	    'name="' + checkbox_name + '" checked="checked">');
+	    'name="' + checkbox_name + '">');
     check.val(JSON.stringify(data_object));
-    auxilliary_classes = checkbox_aux_class.trim();
+    check.prop("checked", checked);
+    auxilliary_classes = checkbox_aux_classes.trim();
     if(Boolean(auxilliary_classes)) {
 	check.attr("class",
 		   check.attr("class") + " " + auxilliary_classes.trim());
@@ -154,7 +155,7 @@ function build_checkbox(data_object, checkbox_name, checkbox_aux_classes="") {
 }
 
 function link_checkbox(dataset) {
-    return build_checkbox(dataset, "selected", "checkbox-selected");
+    return build_checkbox(dataset, "selected", "checkbox-selected", true);
 }
 
 function search_checkbox(dataset) {
diff --git a/wqflask/wqflask/static/new/javascript/auth/search_phenotypes.js b/wqflask/wqflask/static/new/javascript/auth/search_phenotypes.js
index b172ffd1..61e71771 100644
--- a/wqflask/wqflask/static/new/javascript/auth/search_phenotypes.js
+++ b/wqflask/wqflask/static/new/javascript/auth/search_phenotypes.js
@@ -2,11 +2,14 @@
  * Global variables: Bad idea - figure out how to pass them down a call stack.
  */
 search_table = new TableDataSource(
-    "#tbl-phenotypes", "data-traits",
-    function(trait) {build_checkbox(trait, "search_traits")});
+    "#tbl-phenotypes", "data-traits", (trait) => {
+	return build_checkbox(trait, "search_traits", "checkbox-search");
+    });
 link_table = new TableDataSource(
-    "#tbl-link-phenotypes", "data-traits",
-    function(trait) {build_checkbox(trait, "selected")});
+    "#tbl-link-phenotypes", "data-traits", (trait) => {
+	return build_checkbox(
+	    trait, "selected", "checkbox-selected", checked=true);
+    });
 
 /**
  * Toggle the state for the "Link Traits" button
@@ -14,7 +17,7 @@ link_table = new TableDataSource(
 function toggle_link_button() {
     num_groups = $("#frm-link-phenotypes select option").length - 1;
     num_selected = JSON.parse(
-	$("#tbl-link-phenotypes").attr("data-datasets")).length;
+	$("#tbl-link-phenotypes").attr("data-traits")).length;
     if(num_groups > 0 && num_selected > 0) {
 	$("#frm-link-phenotypes input[type='submit']").prop("disabled", false);
     } else {
@@ -31,10 +34,54 @@ function default_error_fn(jqXHR, textStatus, errorThrown) {
     console.debug("ERROR:", errorThrown);
 }
 
+function render_pheno_table(table_data_source) {
+    table_id = table_data_source.table_id.selector;
+    data_attr_name = table_data_source.data_attribute_name;
+    $(table_id + " tbody tr").remove();
+    table_data = JSON.parse($(table_id).attr(data_attr_name));
+    if(table_data.length < 1) {
+	row = $("<tr>")
+	cell = $('<td colspan="100%" align="center">');
+	cell.append(
+	    $('<span class="glyphicon glyphicon-info-sign text-info">'));
+	cell.append("&nbsp;");
+	cell.append("No phenotype traits to select from.");
+	row.append(cell);
+	$(table_id + " tbody").append(row);
+    }
+    table_data.forEach(function(trait) {
+	row = $("<tr>")
+	row.append(table_data_source.checkbox_creation_function(trait));
+	row.append(table_cell(trait.name));
+	row.append(table_cell(trait.group));
+	row.append(table_cell(trait.dataset));
+	row.append(table_cell(trait.dataset_fullname));
+	row.append(table_cell(trait.description));
+	row.append(table_cell(trait.authors.join(", ")));
+	row.append(table_cell(
+	    '<a href="' + trait.pubmed_link +
+		'" title="Pubmed link for trait ' + trait.name + '.">' +
+		trait.year + "</a>"));
+	row.append(table_cell("Chr:" + trait.geno_chr + "@" + trait.geno_mb));
+	row.append(table_cell(trait.lrs));
+	row.append(table_cell(trait.additive));
+	$(table_id + " tbody").append(row);
+    });
+}
+
 function display_search_results(data, textStatus, jqXHR) {
-    $("#tbl-phenotypes").attr(
-	"data-traits", JSON.stringify(data.search_results));
-    render_table(search_table);
+    if(data.status == "queued" || data.status == "started") {
+	setTimeout(() => {
+	    fetch_search_results(data.job_id, display_search_results);
+	}, 250);
+	return;
+    }
+    if(data.status == "completed") {
+	$("#tbl-phenotypes").attr(
+	    "data-traits", JSON.stringify(data.search_results));
+	render_pheno_table(search_table);
+    }
+    $("#txt-search").prop("disabled", false);
 }
 
 /**
@@ -43,6 +90,7 @@ function display_search_results(data, textStatus, jqXHR) {
  */
 function fetch_search_results(job_id, success, error=default_error_fn) {
     endpoint = $("#frm-search-traits").attr("data-search-results-endpoint");
+    $("#txt-search").prop("disabled", true);
     $.ajax(
 	endpoint,
 	{
@@ -104,11 +152,9 @@ $(document).ready(function() {
 	}
     });
 
-    setTimeout(
-	function() {
-	    fetch_search_results(
-		$("#tbl-phenotypes").attr("data-initial-job-id"),
-		display_search_results)
-	},
-	500);
+    setTimeout(() => {
+	fetch_search_results(
+	    $("#tbl-phenotypes").attr("data-initial-job-id"),
+	    display_search_results);
+    }, 500);
 });
diff --git a/wqflask/wqflask/templates/oauth2/data-list-phenotype.html b/wqflask/wqflask/templates/oauth2/data-list-phenotype.html
index e6998d28..6afabdf8 100644
--- a/wqflask/wqflask/templates/oauth2/data-list-phenotype.html
+++ b/wqflask/wqflask/templates/oauth2/data-list-phenotype.html
@@ -80,7 +80,7 @@
       </legend>
       {%endif%}
       <input type="hidden" value="{{species_name}}" name="species"
-	     id="txt-species" />
+	     id="txt-species-name" />
       <input type="hidden" value="{{dataset_type}}" name="dataset_type"
 	     id="txt-dataset-type"  />
       <input type="hidden" value="{{per_page}}" name="per_page"
@@ -100,14 +100,57 @@
   <div class="row">
     <table id="tbl-phenotypes"
 	   class="table-hover table-striped cell-border dataTable no-footer"
-	   data-traits="[]"
-	   data-initial-job-id={{search_results.job_id}}>
+	   data-traits="{{traits | tojson}}"
+	   data-initial-job-id={{search_results.job_id}}
+	   data-initial-search-res={{search_results | tojson}}>
+      <thead>
+	<tr>
+	  <th>Select</th>
+	  <th>Name</th>
+	  <th>Group</th>
+	  <th>Dataset</th>
+	  <th>Dataset Fullname</th>
+	  <th>Description</th>
+	  <th>Authors</th>
+	  <th>Year</th>
+	  <th>Location</th>
+	  <th>LRS</th>
+	  <th>Additive</th>
+	</tr>
+      </thead>
       <tbody>
+	{%for trait in traits%}
+	<tr>
+	  <th>
+	    <input type="checkbox" class="checkbox checkbox-search"
+		   name="search_traits" value="{{trait | tojson}}" />
+	  </th>
+	  <th>{{trait.name}}</th>
+	  <th>{{trait.group}}</th>
+	  <th>{{trait.dataset}}</th>
+	  <th>{{trait.dataset_fullname}}</th>
+	  <th>{{trait.description}}</th>
+	  <th>{{trait.authors | join(" ")}}</th>
+	  <th>
+	    <a href="{{trait.pubmed_linj}}" title="Pubmed link for trait">
+	      {{trait.year}}
+	    </a>
+	  </th>
+	  <th>CHR{{trait.geno_chr}}@{{trait.geno_mb}}</th>
+	  <th>{{trait.lrs}}</th>
+	  <th>{{trait.additive}}</th>
+	</tr>
+	{%else%}
 	<tr>
-	  <td colspan="100%" align="center">
-	    <br><b><font size="15">Loading...</font></b><br>
+	  <td colspan="100%" align="center" style="text-align: center;">
+	    <br/><b><font size="4">
+		<span class="glyphicon glyphicon-info-sign text-info"></span>
+		&nbsp;
+		There are no phenotype traits to select from.
+	    </font></b><br />
 	  </td>
 	</tr>
+	{%endfor%}
     </table>
   </div>