aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzsloan2021-06-07 15:01:46 -0500
committerGitHub2021-06-07 15:01:46 -0500
commit5ff2fa8c471caa833df50421922eed9828563957 (patch)
treede5b18a98f3fc710992526bf61d31d7d738f08bc
parentb18472ff4cbc6af5c5a72c4160d982b5b664106c (diff)
parentad6a034b1acfd95d6bb25d15aeb865e399fe52d0 (diff)
downloadgenenetwork2-5ff2fa8c471caa833df50421922eed9828563957.tar.gz
Merge pull request #584 from zsloan/feature/add_scroller_gsearch
Feature/add scroller gsearch
-rw-r--r--wqflask/wqflask/gsearch.py79
-rw-r--r--wqflask/wqflask/templates/gsearch_gene.html67
-rw-r--r--wqflask/wqflask/templates/gsearch_pheno.html58
3 files changed, 112 insertions, 92 deletions
diff --git a/wqflask/wqflask/gsearch.py b/wqflask/wqflask/gsearch.py
index 8f66f7e9..2516e4fb 100644
--- a/wqflask/wqflask/gsearch.py
+++ b/wqflask/wqflask/gsearch.py
@@ -92,19 +92,30 @@ class GSearch:
if (line[8] != "NULL" and line[8] != "") and (line[9] != 0):
this_trait['location_repr'] = 'Chr%s: %.6f' % (
line[8], float(line[9]))
- try:
- this_trait['mean'] = '%.3f' % line[10]
- except:
- this_trait['mean'] = "N/A"
+
this_trait['LRS_score_repr'] = "N/A"
+ this_trait['additive'] = "N/A"
+ this_trait['mean'] = "N/A"
+
if line[11] != "" and line[11] != None:
- this_trait['LRS_score_repr'] = '%3.1f' % line[11]
+ this_trait['LRS_score_repr'] = f"{line[11]:.3f}"
+ if line[14] != "" and line[14] != None:
+ this_trait['additive'] = f"{line[14]:.3f}"
+ if line[10] != "" and line[10] != None:
+ this_trait['mean'] = f"{line[10]:.3f}"
+
+ locus_chr = line[16]
+ locus_mb = line[17]
+
+ max_lrs_text = "N/A"
+ if locus_chr and locus_mb:
+ max_lrs_text = f"Chr{locus_chr}: {locus_mb}"
+ this_trait['max_lrs_text'] = max_lrs_text
+
this_trait['additive'] = "N/A"
if line[14] != "" and line[14] != None:
this_trait['additive'] = '%.3f' % line[14]
this_trait['dataset_id'] = line[15]
- this_trait['locus_chr'] = line[16]
- this_trait['locus_mb'] = line[17]
dataset_ob = SimpleNamespace(
id=this_trait["dataset_id"], type="ProbeSet", species=this_trait["species"])
@@ -120,11 +131,6 @@ class GSearch:
if permissions['data'] == 'no-access':
continue
- max_lrs_text = "N/A"
- if this_trait['locus_chr'] and this_trait['locus_mb']:
- max_lrs_text = f"Chr{str(this_trait['locus_chr'])}: {str(this_trait['locus_mb'])}"
- this_trait['max_lrs_text'] = max_lrs_text
-
trait_list.append(this_trait)
self.trait_count = len(trait_list)
@@ -230,32 +236,41 @@ class GSearch:
'utf-8', 'replace')
else:
this_trait['description'] = "N/A"
- if line[13] != None and line[13] != "":
- this_trait['mean'] = f"{line[13]:.3f}"
- else:
- this_trait['mean'] = "N/A"
this_trait['dataset_id'] = line[14]
- this_trait['locus_chr'] = line[15]
- this_trait['locus_mb'] = line[16]
+
+ this_trait['LRS_score_repr'] = "N/A"
+ this_trait['additive'] = "N/A"
+ this_trait['mean'] = "N/A"
+
+ if line[10] != "" and line[10] != None:
+ this_trait['LRS_score_repr'] = f"{line[10]:.3f}"
+ # Some Max LRS values in the DB are wrongly listed as 0.000, but shouldn't be displayed
+ if this_trait['LRS_score_repr'] == "0.000":
+ this_trait['LRS_score_repr'] = "N/A"
+ if line[11] != "" and line[11] != None:
+ this_trait['additive'] = f"{line[11]:.3f}"
+ if line[13] != "" and line[13] != None:
+ this_trait['mean'] = f"{line[13]:.3f}"
+
+ locus_chr = line[15]
+ locus_mb = line[16]
+
+ max_lrs_text = "N/A"
+ if locus_chr and locus_mb:
+ max_lrs_text = f"Chr{locus_chr}: {locus_mb}"
+ this_trait['max_lrs_text'] = max_lrs_text
+
this_trait['authors'] = line[7]
this_trait['year'] = line[8]
+ this_trait['pubmed_text'] = "N/A"
+ this_trait['pubmed_link'] = "N/A"
if this_trait['year'].isdigit():
this_trait['pubmed_text'] = this_trait['year']
- else:
- this_trait['pubmed_text'] = "N/A"
if line[9] != "" and line[9] != None:
this_trait['pubmed_link'] = webqtlConfig.PUBMEDLINK_URL % line[8]
- else:
- this_trait['pubmed_link'] = "N/A"
if line[12]:
this_trait['display_name'] = line[12] + \
"_" + str(this_trait['name'])
- this_trait['LRS_score_repr'] = "N/A"
- if line[10] != "" and line[10] != None:
- this_trait['LRS_score_repr'] = '%3.1f' % line[10]
- this_trait['additive'] = "N/A"
- if line[11] != "" and line[11] != None:
- this_trait['additive'] = '%.3f' % line[11]
dataset_ob = SimpleNamespace(id=this_trait["dataset_id"], type="Publish", species=this_trait["species"])
permissions = check_resource_availability(dataset_ob, this_trait['name'])
@@ -266,14 +281,6 @@ class GSearch:
if permissions['data'] == 'no-access':
continue
- this_trait['max_lrs_text'] = "N/A"
- if this_trait['dataset'] == this_trait['group'] + "Publish":
- try:
- if this_trait['locus_chr'] and this_trait['locus_mb']:
- this_trait['max_lrs_text'] = f"Chr{str(this_trait['locus_chr'])}: {str(this_trait['locus_mb'])}"
- except:
- this_trait['max_lrs_text'] = "N/A"
-
trait_list.append(this_trait)
self.trait_count = len(trait_list)
diff --git a/wqflask/wqflask/templates/gsearch_gene.html b/wqflask/wqflask/templates/gsearch_gene.html
index 48953d98..8ff36c1b 100644
--- a/wqflask/wqflask/templates/gsearch_gene.html
+++ b/wqflask/wqflask/templates/gsearch_gene.html
@@ -7,7 +7,7 @@
{% block content %}
<!-- Start of body -->
- <div class="container" style="width: 2000px;">
+ <div class="container">
<h3>GN searched for the term(s) <b>"{{ terms }}"</b> in 754 datasets and 39,765,944 traits across 10 species<br/>
and found <b>{{ trait_count }}</b> results that match your query.<br/>
@@ -31,7 +31,7 @@
</form>
<br />
<br />
- <div style="width: 100%;">
+ <div style="min-width: 2000px; width: 100%;">
<table id="trait_table" class="table-hover table-striped cell-border" style="float: left;">
<tbody>
<td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td>
@@ -48,6 +48,7 @@
{% block js %}
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/scroller/js/dataTables.scroller.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/colReorder/js/dataTables.colReorder.js') }}"></script>
@@ -66,6 +67,10 @@
};
</script>
+ <script type='text/javascript'>
+ var trait_list = {{ trait_list|safe }};
+ </script>
+
<script type="text/javascript" charset="utf-8">
$(document).ready( function () {
@@ -102,7 +107,6 @@
}
}
- console.time("Creating table");
$('#trait_table').DataTable( {
'drawCallback': function( settings ) {
$('#trait_table tr').click(function(event) {
@@ -150,10 +154,12 @@
$('td', row).eq(12).attr('data-export', $('td', row).eq(12).text());
$('td', row).eq(13).attr('data-export', $('td', row).eq(13).text());
},
+ 'data': trait_list,
'columns': [
- {
- 'data': null,
+ {
'orderDataType': "dom-checkbox",
+ 'width': "25px",
+ 'data': null,
'render': function(data, type, row, meta) {
return '<input type="checkbox" name="searchResult" class="trait_checkbox checkbox" value="' + data.hmac + '">'
}
@@ -161,45 +167,53 @@
{
'title': "Index",
'type': "natural",
+ 'width': "30px",
'data': "index"
},
{
'title': "Record",
'type': "natural",
- 'data': null,
'orderDataType': "dom-inner-text",
+ 'width': "60px",
+ 'data': null,
'render': function(data, type, row, meta) {
return '<a target="_blank" href="/show_trait?trait_id=' + data.name + '&dataset=' + data.dataset + '">' + data.name + '</a>'
}
},
{
'title': "Species",
- 'type': "natural",
+ 'type': "natural",
+ 'width': "60px",
'data': "species"
},
{
'title': "Group",
'type': "natural",
+ 'width': "150px",
'data': "group"
},
{
'title': "Tissue",
'type': "natural",
+ 'width': "150px",
'data': "tissue"
},
{
'title': "Dataset",
'type': "natural",
+ 'width': "300px",
'data': "dataset_fullname"
},
{
'title': "Symbol",
'type': "natural",
+ 'width': "60px",
'data': "symbol"
},
{
'title': "Description",
'type': "natural",
+ 'width': "300px",
'data': null,
'render': function(data, type, row, meta) {
try {
@@ -212,25 +226,27 @@
{
'title': "Location",
'type': "natural-minus-na",
- 'width': "100px",
+ 'width': "125px",
'data': "location_repr"
},
{
'title': "Mean",
'type': "natural-minus-na",
- 'data': "mean",
- 'orderSequence': [ "desc", "asc"]
+ 'orderSequence': [ "desc", "asc"],
+ 'width': "30px",
+ 'data': "mean"
},
{
'title': "Max<br>LRS<a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
'type': "natural-minus-na",
+ 'width': "60px",
'data': "LRS_score_repr",
'orderSequence': [ "desc", "asc"]
},
{
- 'title': "Max LRS<br>Location",
+ 'title': "Max LRS Location",
'type': "natural-minus-na",
- 'width': "100px",
+ 'width': "125px",
'data': "max_lrs_text"
},
{
@@ -241,20 +257,18 @@
'orderSequence': [ "desc", "asc"]
}
],
- 'order': [[1, "asc" ]],
- 'sDom': "pitirp",
- 'autoWidth': true,
- 'deferRender': false,
- 'paging': true,
- 'orderClasses': true,
+ "order": [[1, "asc" ]],
+ 'sDom': "iti",
+ "autoWidth": true,
+ "bSortClasses": false,
'processing': true,
- 'iDisplayLength': 100,
- 'bServerSide': true,
- 'sAjaxSource': '/gsearch_table'+getParams(window.location.href),
- 'language': {
- 'loadingRecords': '&nbsp;',
- 'processing': 'Loading...'
- }
+ {% if trait_count > 20 %}
+ "scrollY": "100vh",
+ "scroller": true,
+ "scrollCollapse": true
+ {% else %}
+ "iDisplayLength": -1
+ {% endif %}
} );
$('#trait_table').append(
@@ -277,9 +291,6 @@
'</tr>' +
'</tfoot>'
);
-
- console.timeEnd("Creating table");
-
});
</script>
diff --git a/wqflask/wqflask/templates/gsearch_pheno.html b/wqflask/wqflask/templates/gsearch_pheno.html
index af9740ae..5f1465d7 100644
--- a/wqflask/wqflask/templates/gsearch_pheno.html
+++ b/wqflask/wqflask/templates/gsearch_pheno.html
@@ -48,6 +48,7 @@
{% block js %}
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='js_alt/md5.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTables/js/jquery.dataTables.min.js') }}"></script>
+ <script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/scroller/js/dataTables.scroller.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='jszip/jszip.min.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/plugins/sorting/natural.js') }}"></script>
<script language="javascript" type="text/javascript" src="{{ url_for('js', filename='DataTablesExtensions/colReorder/js/dataTables.colReorder.js') }}"></script>
@@ -66,6 +67,10 @@
};
</script>
+ <script type='text/javascript'>
+ var trait_list = {{ trait_list|safe }};
+ </script>
+
<script type="text/javascript" charset="utf-8">
$(document).ready( function () {
@@ -102,7 +107,6 @@
}
}
- console.time("Creating table");
$('#trait_table').DataTable( {
'drawCallback': function( settings ) {
$('#trait_table tr').click(function(event) {
@@ -138,10 +142,12 @@
$('td', row).eq(9).attr('data-export', $('td', row).eq(9).text());
$('td', row).eq(10).attr('data-export', $('td', row).eq(10).text());
},
+ 'data': trait_list,
'columns': [
{
'data': null,
'orderDataType': "dom-checkbox",
+ 'width': "25px",
'render': function(data, type, row, meta) {
return '<input type="checkbox" name="searchResult" class="trait_checkbox checkbox" value="' + data.hmac + '">'
}
@@ -149,23 +155,26 @@
{
'title': "Index",
'type': "natural",
+ 'width': "30px",
'data': "index"
},
{
'title': "Species",
'type': "natural",
+ 'width': "60px",
'data': "species"
},
{
'title': "Group",
'type': "natural",
- 'width': "10%",
+ 'width': "100px",
'data': "group"
},
{
'title': "Record",
'type': "natural",
'data': null,
+ 'width': "60px",
'orderDataType': "dom-inner-text",
'render': function(data, type, row, meta) {
return '<a target="_blank" href="/show_trait?trait_id=' + data.name + '&dataset=' + data.dataset + '">' + data.display_name + '</a>'
@@ -174,7 +183,7 @@
{
'title': "Description",
'type': "natural",
- 'width': "25%",
+ 'width': "500px",
'data': null,
'render': function(data, type, row, meta) {
try {
@@ -187,13 +196,13 @@
{
'title': "Mean",
'type': "natural-minus-na",
- 'width': "10%",
+ 'width': "30px",
'data': "mean"
},
{
'title': "Authors",
'type': "natural",
- 'width': "25%",
+ 'width': "300px",
'data': null,
'render': function(data, type, row, meta) {
author_list = data.authors.split(",")
@@ -202,13 +211,7 @@
} else{
author_string = data.authors
}
-
- try {
- return decodeURIComponent(escape(author_string))
- } catch(err) {
- return author_string
- }
-
+ return author_string
}
},
{
@@ -216,6 +219,7 @@
'type': "natural-minus-na",
'data': null,
'orderDataType': "dom-inner-text",
+ 'width': "25px",
'render': function(data, type, row, meta) {
if (data.pubmed_id != "N/A"){
return '<a href="' + data.pubmed_link + '">' + data.pubmed_text + '</a>'
@@ -229,35 +233,35 @@
'title': "Max LRS<a href=\"{{ url_for('glossary_blueprint.glossary') }}#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
'type': "natural-minus-na",
'data': "LRS_score_repr",
+ 'width': "60px",
'orderSequence': [ "desc", "asc"]
},
{
'title': "Max LRS Location",
'type': "natural-minus-na",
- 'width': "10%",
+ 'width': "125px",
'data': "max_lrs_text"
},
{
'title': "Additive Effect<a href=\"{{ url_for('glossary_blueprint.glossary') }}#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
'type': "natural-minus-na",
'data': "additive",
+ 'width': "60px",
'orderSequence': [ "desc", "asc"]
}
],
- 'order': [[1, "asc" ]],
- 'sDom': "pitirp",
- 'autoWidth': false,
- 'deferRender': false,
- 'paging': true,
- 'orderClasses': true,
+ "order": [[1, "asc" ]],
+ 'sDom': "iti",
+ "autoWidth": true,
+ "bSortClasses": false,
'processing': true,
- 'iDisplayLength': 100,
- 'bServerSide': true,
- 'sAjaxSource': '/gsearch_table'+getParams(window.location.href),
- 'language': {
- 'loadingRecords': '&nbsp;',
- 'processing': 'Loading...'
- }
+ {% if trait_count > 20 %}
+ "scrollY": "100vh",
+ "scroller": true,
+ "scrollCollapse": true
+ {% else %}
+ "iDisplayLength": -1
+ {% endif %}
} );
$('#trait_table').append(
@@ -277,8 +281,6 @@
'</tr>' +
'</tfoot>'
);
-
- console.timeEnd("Creating table");
});
</script>