aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPjotr Prins2016-10-24 07:53:13 +0000
committerGitHub2016-10-24 07:53:13 +0000
commit66052e6e996439f7a4a2d8c0a2c063526f3c7ace (patch)
tree4537d9a90b1e40dad96e2718989b7668da63d3b3
parent6022419b308fc611e26bf33c9a5ec415434bb9b7 (diff)
parenteb4a6942d51f1f69135f95fb14587a6494732eda (diff)
downloadgenenetwork2-66052e6e996439f7a4a2d8c0a2c063526f3c7ace.tar.gz
Merge pull request #214 from zsloan/master
Thanks! Download table rewritten in Python to add extra functionality
-rw-r--r--wqflask/wqflask/export_traits.py41
-rw-r--r--wqflask/wqflask/static/new/javascript/search_results.js53
-rw-r--r--wqflask/wqflask/templates/gsearch_gene.html97
-rw-r--r--wqflask/wqflask/templates/gsearch_pheno.html106
-rw-r--r--wqflask/wqflask/templates/search_result_page.html123
-rw-r--r--wqflask/wqflask/views.py12
6 files changed, 212 insertions, 220 deletions
diff --git a/wqflask/wqflask/export_traits.py b/wqflask/wqflask/export_traits.py
new file mode 100644
index 00000000..f8fce929
--- /dev/null
+++ b/wqflask/wqflask/export_traits.py
@@ -0,0 +1,41 @@
+from __future__ import print_function, division
+
+import operator
+import csv
+import xlsxwriter
+import StringIO
+import datetime
+
+import simplejson as json
+
+from pprint import pformat as pf
+
+def export_search_results_csv(targs):
+
+ table_data = json.loads(targs['export_data'])
+ table_headers = table_data['headers']
+ table_rows = table_data['rows']
+
+ buff = StringIO.StringIO()
+ writer = csv.writer(buff)
+
+ metadata = []
+
+ metadata.append(["Citations: Please see www.genenetwork.org/reference.html"])
+ if targs['database_name'] != "None":
+ metadata.append(["Database: " + targs['database_name']])
+ metadata.append(["Date: " + datetime.datetime.now().strftime("%B %d, %Y")])
+ metadata.append(["Time: " + datetime.datetime.now().strftime("%H:%M GMT")])
+ metadata.append(["Status of data ownership: Possibly unpublished data; please see www.genenetwork.org/statusandContact.html for details on sources, ownership, and usage of these data."])
+
+ for metadata_row in metadata:
+ writer.writerow(metadata_row)
+
+ writer.writerow(table_headers)
+ for trait_info in table_rows:
+ writer.writerow(trait_info)
+
+ csv_data = buff.getvalue()
+ buff.close()
+
+ return csv_data \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/search_results.js b/wqflask/wqflask/static/new/javascript/search_results.js
index 746564fd..40fdff70 100644
--- a/wqflask/wqflask/static/new/javascript/search_results.js
+++ b/wqflask/wqflask/static/new/javascript/search_results.js
@@ -73,7 +73,6 @@ $(function() {
});
$('.trait_checkbox:checkbox').change(function() {
- console.log("CHANGED")
change_buttons()
if ($(this).is(":checked")) {
@@ -108,7 +107,6 @@ $(function() {
var button, buttons, item, num_checked, text, _i, _j, _k, _l, _len, _len2, _len3, _len4, _results, _results2;
buttons = ["#add", "#remove"];
num_checked = $('.trait_checkbox:checked').length;
- console.log("num_checked is:", num_checked);
if (num_checked === 0) {
for (_i = 0, _len = buttons.length; _i < _len; _i++) {
button = buttons[_i];
@@ -155,10 +153,61 @@ $(function() {
});
}
};
+
+ export_traits = function() {
+ trait_data = get_traits_from_table("trait_table")
+ };
+
+ get_traits_from_table = function(table_name) {
+ trait_table = $('#'+table_name);
+ table_dict = {};
+
+ headers = [];
+ trait_table.find('th').each(function () {
+ if ($(this).data('export')){
+ headers.push($(this).data('export'))
+ }
+ });
+ table_dict['headers'] = headers;
+
+ rows = [];
+ trait_table.find('tbody tr').each(function (i, tr) {
+ if (trait_table.find('input[name="searchResult"]:checked').length > 0) {
+ if ($(this).find('input[name="searchResult"]').is(':checked')){
+ this_row = [];
+ $(tr).find('td').each(function(j, td){
+ if ($(td).data('export')){
+ this_row.push($(td).data('export'));
+ }
+ });
+ rows.push(this_row);
+ }
+ }
+ else {
+ this_row = [];
+ $(tr).find('td').each(function(j, td){
+ if ($(td).data('export')){
+ this_row.push($(td).data('export'));
+ }
+ });
+ rows.push(this_row);
+ }
+ });
+ table_dict['rows'] = rows;
+ console.log("TABLEDICT:", table_dict);
+
+ json_table_dict = JSON.stringify(table_dict);
+ $('input[name=export_data]').val(json_table_dict);
+
+ $('#export_form').attr('action', '/export_traits_csv');
+ $('#export_form').submit();
+ };
+
$("#select_all").click(select_all);
$("#deselect_all").click(deselect_all);
$("#invert").click(invert);
$("#add").click(add);
$("#remove").click(remove);
+ $("#export_traits").click(export_traits);
$('.trait_checkbox, .btn').click(change_buttons);
}); \ No newline at end of file
diff --git a/wqflask/wqflask/templates/gsearch_gene.html b/wqflask/wqflask/templates/gsearch_gene.html
index 2d970b36..776b8d07 100644
--- a/wqflask/wqflask/templates/gsearch_gene.html
+++ b/wqflask/wqflask/templates/gsearch_gene.html
@@ -20,46 +20,51 @@
<button class="btn btn-default" id="add" disabled ><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
<input type="text" id="searchbox" class="form-control" style="width: 180px; display: inline;" placeholder="Search This Table For ...">
<input type="text" id="select_top" class="form-control" style="width: 120px; display: inline;" placeholder="Select Top ...">
-
<br />
<br />
+ <form id="export_form" method="POST" action="/export_traits_csv">
+ <input type="hidden" name="database_name" id="database_name" value="None">
+ <input type="hidden" name="export_data" id="export_data" value="">
+ <button class="btn btn-default" id="export_traits">Download CSV</button>
+ </form>
+ <br />
<div style="width: 2000px; background-color: #eeeeee; border: 1px solid black;">
<table width="2000px" id="trait_table" class="table table-hover table-striped" >
<thead>
<tr>
<th style="background-color: #eeeeee;"></th>
- <th style="background-color: #eeeeee;">Index</th>
- <th style="background-color: #eeeeee;">Species</th>
- <th style="background-color: #eeeeee;">Group</th>
- <th style="background-color: #eeeeee;">Tissue</th>
- <th style="background-color: #eeeeee;">Dataset</th>
- <th style="background-color: #eeeeee;">Record</th>
- <th style="background-color: #eeeeee;">Symbol</th>
- <th style="background-color: #eeeeee;">Description</th>
- <th style="background-color: #eeeeee;">Location</th>
- <th style="background-color: #eeeeee;">Mean</th>
- <th style="background-color: #eeeeee;">Max&nbsp;&nbsp;<br>LRS<a href="http://genenetwork.org/glossary.html#L" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- <th style="background-color: #eeeeee;">Max LRS Location</th>
- <th style="background-color: #eeeeee;">Additive<br>Effect<a href="http://genenetwork.org/glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
+ <th data-export="Index" style="background-color: #eeeeee;">Index</th>
+ <th data-export="Species" style="background-color: #eeeeee;">Species</th>
+ <th data-export="Group" style="background-color: #eeeeee;">Group</th>
+ <th data-export="Tissue" style="background-color: #eeeeee;">Tissue</th>
+ <th data-export="Dataset" style="background-color: #eeeeee;">Dataset</th>
+ <th data-export="Record" style="background-color: #eeeeee;">Record</th>
+ <th data-export="Symbol" style="background-color: #eeeeee;">Symbol</th>
+ <th data-export="Description" style="background-color: #eeeeee;">Description</th>
+ <th data-export="Location" style="background-color: #eeeeee;">Location</th>
+ <th data-export="Mean" style="background-color: #eeeeee;">Mean</th>
+ <th data-export="Max LRS" style="background-color: #eeeeee;">Max&nbsp;&nbsp;<br>LRS<a href="http://genenetwork.org/glossary.html#L" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
+ <th data-export="Max LRS Location" style="background-color: #eeeeee;">Max LRS Location</th>
+ <th data-export="Additive Effect" style="background-color: #eeeeee;">Additive<br>Effect<a href="http://genenetwork.org/glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
</tr>
</thead>
<tbody>
{% for this_trait in trait_list %}
<tr id="trait:{{ this_trait.name }}:{{ this_trait.dataset.name }}">
<td><input type="checkbox" name="searchResult" class="checkbox trait_checkbox" style="transform: scale(1.5);" value="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}"></td>
- <td>{{ loop.index }}</td>
- <td>{{ this_trait.dataset.group.species }}</td>
- <td>{{ this_trait.dataset.group.name }}</td>
- <td>{{ this_trait.dataset.tissue }}</td>
- <td>{{ this_trait.dataset.name }}</td>
- <td><a href="{{ url_for('show_trait_page', trait_id = this_trait.name, dataset = this_trait.dataset.name)}}">{{ this_trait.name }}</a></td>
- <td>{{ this_trait.symbol }}</td>
- <td>{{ this_trait.description_display }}</td>
- <td align="right">{{ this_trait.location_repr }}</td>
- <td align="right">{{ '%0.3f' % this_trait.mean|float }}</td>
- <td align="right">{% if this_trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % this_trait.LRS_score_repr|float }}{% else %}N/A{% endif %}</td>
- <td align="right">{{ this_trait.LRS_location_repr }}</td>
- <td align="right">{% if this_trait.additive != "" %}{{ '%0.3f' % this_trait.additive|float }}{% else %}N/A{% endif %}</td>
+ <td data-export="{{ loop.index }}">{{ loop.index }}</td>
+ <td data-export="{{ this_trait.dataset.group.species }}">{{ this_trait.dataset.group.species }}</td>
+ <td data-export="{{ this_trait.dataset.group.name }}">{{ this_trait.dataset.group.name }}</td>
+ <td data-export="{{ this_trait.dataset.tissue }}">{{ this_trait.dataset.tissue }}</td>
+ <td data-export="{{ this_trait.dataset.name }}">{{ this_trait.dataset.name }}</td>
+ <td data-export="{{ this_trait.name }}"><a href="{{ url_for('show_trait_page', trait_id = this_trait.name, dataset = this_trait.dataset.name)}}">{{ this_trait.name }}</a></td>
+ <td data-export="{{ this_trait.symbol }}">{{ this_trait.symbol }}</td>
+ <td data-export="{{ this_trait.description_display }}">{{ this_trait.description_display }}</td>
+ <td data-export="{{ this_trait.location_repr }}" align="right">{{ this_trait.location_repr }}</td>
+ <td data-export="{{ '%0.3f' % this_trait.mean|float }}" align="right">{{ '%0.3f' % this_trait.mean|float }}</td>
+ <td data-export="{% if this_trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % this_trait.LRS_score_repr|float }}{% else %}N/A{% endif %}" align="right">{% if this_trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % this_trait.LRS_score_repr|float }}{% else %}N/A{% endif %}</td>
+ <td data-export="{{ this_trait.LRS_location_repr }}" align="right">{{ this_trait.LRS_location_repr }}</td>
+ <td data-export="{% if this_trait.additive != "" %}{{ '%0.3f' % this_trait.additive|float }}{% else %}N/A{% endif %}" align="right">{% if this_trait.additive != "" %}{{ '%0.3f' % this_trait.additive|float }}{% else %}N/A{% endif %}</td>
</tr>
{% endfor %}
</tbody>
@@ -105,27 +110,12 @@
<script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
<script type="text/javascript" charset="utf-8">
- function getValue(x) {
- if (x.indexOf('input') >= 0) {
- if ($(x).val() == 'x') {
- return 0;
- }
- else {
- return parseFloat($(x).val());
- }
- }
- else if (isNaN(x)) {
- return x;
- }
- return parseFloat(x);
- }
-
$.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col )
{
return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
return $('input', td).prop('checked') ? '1' : '0';
} );
- }
+ };
$(document).ready( function () {
@@ -138,19 +128,8 @@
console.time("Creating table");
$('#trait_table').DataTable( {
"paging": false,
- "buttons": [
- {
- extend: 'csvHtml5',
- text: 'Download CSV',
- title: 'search_results',
- fieldBoundary: '"',
- exportOptions: {
- columns: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
- }
- }
- ],
"columns": [
- { "type": "natural" },
+ { "orderDataType": "dom-checkbox" },
{ "type": "natural" },
{ "type": "natural" },
{ "type": "natural", "width": "8%" },
@@ -165,8 +144,14 @@
{ "type": "natural", "width": "8%" },
{ "type": "natural" }
],
+ "columnDefs": [
+ {
+ "targets": 0,
+ "orderDataType": "dom-checkbox"
+ }
+ ],
"order": [[1, "asc" ]],
- "sDom": "Btir",
+ "sDom": "tir",
"autoWidth": false,
"bDeferRender": true,
"scrollY": "800px",
diff --git a/wqflask/wqflask/templates/gsearch_pheno.html b/wqflask/wqflask/templates/gsearch_pheno.html
index be4981bb..9aad7568 100644
--- a/wqflask/wqflask/templates/gsearch_pheno.html
+++ b/wqflask/wqflask/templates/gsearch_pheno.html
@@ -25,37 +25,43 @@
<input type="text" id="select_top" class="form-control" style="width: 200px; display: inline;" placeholder="Select Top ...">
<br />
<br />
+ <form id="export_form" method="POST" action="/export_traits_csv">
+ <input type="hidden" name="database_name" id="database_name" value="None">
+ <input type="hidden" name="export_data" id="export_data" value="">
+ <button class="btn btn-default" id="export_traits">Download CSV</button>
+ </form>
+ <br />
<div style="width: 1500px; background-color: #eeeeee; border: 1px solid black;">
<table width="1500px" id="trait_table" class="table table-hover table-striped">
<thead>
<tr>
<th style="background-color: #eeeeee;"></th>
- <th style="background-color: #eeeeee;">Index</th>
- <th style="background-color: #eeeeee;">Species</th>
- <th style="background-color: #eeeeee;">Group</th>
- <th style="background-color: #eeeeee;">Record</th>
- <th style="background-color: #eeeeee;">Description</th>
- <th style="background-color: #eeeeee;">Authors</th>
- <th style="background-color: #eeeeee;">Year</th>
- <th style="background-color: #eeeeee; text-align: right;">Max&nbsp;&nbsp;<br>LRS<a href="http://genenetwork.org//glossary.html#L" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- <th style="background-color: #eeeeee;">Max LRS Location</th>
- <th style="background-color: #eeeeee; text-align: right;">Additive<br>Effect<a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
+ <th data-export="Index" style="background-color: #eeeeee;">Index</th>
+ <th data-export="Species" style="background-color: #eeeeee;">Species</th>
+ <th data-export="Group" style="background-color: #eeeeee;">Group</th>
+ <th data-export="Record" style="background-color: #eeeeee;">Record</th>
+ <th data-export="Description" style="background-color: #eeeeee;">Description</th>
+ <th data-export="Authors" style="background-color: #eeeeee;">Authors</th>
+ <th data-export="Year" style="background-color: #eeeeee;">Year</th>
+ <th data-export="LRS" style="background-color: #eeeeee; text-align: right;">Max&nbsp;&nbsp;<br>LRS<a href="http://genenetwork.org//glossary.html#L" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
+ <th data-export="LRS Location" style="background-color: #eeeeee;">Max LRS Location</th>
+ <th data-export="Additive Effect" style="background-color: #eeeeee; text-align: right;">Additive<br>Effect<a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
</tr>
</thead>
<tbody>
{% for this_trait in trait_list %}
<TR id="trait:{{ this_trait.name }}:{{ this_trait.dataset.name }}">
<td><INPUT TYPE="checkbox" NAME="searchResult" class="checkbox trait_checkbox" style="transform: scale(1.5);" VALUE="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}"></td>
- <td>{{ loop.index }}</td>
- <td>{{ this_trait.dataset.group.species }}</td>
- <td>{{ this_trait.dataset.group.name }}</td>
- <td><a href="{{ url_for('show_trait_page', trait_id = this_trait.name, dataset = this_trait.dataset.name)}}">{{ this_trait.name }}</a></td>
- <td>{{ this_trait.description_display }}</td>
- <td>{{ this_trait.authors }}</td>
- <td data-order="{{ this_trait.pubmed_text }}"><a href="{{ this_trait.pubmed_link }}">{{ this_trait.pubmed_text }}</a></td>
- <td align="right">{% if this_trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % this_trait.LRS_score_repr|float }}{% else %}N/A{% endif %}</td>
- <td align="right">{{ this_trait.LRS_location_repr }}</td>
- <td align="right">{% if this_trait.additive != "" %}{{ this_trait.additive }}{% else %}N/A{% endif %}</td>
+ <td data-export="{{ loop.index }}">{{ loop.index }}</td>
+ <td data-export="{{ this_trait.dataset.group.species }}">{{ this_trait.dataset.group.species }}</td>
+ <td data-export="{{ this_trait.dataset.group.name }}">{{ this_trait.dataset.group.name }}</td>
+ <td data-export="{{ this_trait.name }}"><a href="{{ url_for('show_trait_page', trait_id = this_trait.name, dataset = this_trait.dataset.name)}}">{{ this_trait.name }}</a></td>
+ <td data-export="{{ this_trait.description_display }}">{{ this_trait.description_display }}</td>
+ <td data-export="{{ this_trait.authors }}">{{ this_trait.authors }}</td>
+ <td data-export="{{ this_trait.pubmed_text }}" data-order="{{ this_trait.pubmed_text }}"><a href="{{ this_trait.pubmed_link }}">{{ this_trait.pubmed_text }}</a></td>
+ <td data-export="{% if this_trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % this_trait.LRS_score_repr|float }}{% else %}N/A{% endif %}" align="right">{% if this_trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % this_trait.LRS_score_repr|float }}{% else %}N/A{% endif %}</td>
+ <td data-export="{{ this_trait.LRS_location_repr }}" align="right">{{ this_trait.LRS_location_repr }}</td>
+ <td data-export="{% if this_trait.additive != "" %}{{ this_trait.additive }}{% else %}N/A{% endif %}" align="right">{% if this_trait.additive != "" %}{{ this_trait.additive }}{% else %}N/A{% endif %}</td>
</TR>
{% endfor %}
</tbody>
@@ -98,40 +104,11 @@
<script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
<script type="text/javascript" charset="utf-8">
- function getValue(x) {
- if (x.indexOf('input') >= 0) {
- if ($(x).val() == 'x') {
- return 0;
- }
- else {
- return parseFloat($(x).val());
- }
- }
- else if (isNaN(x)) {
- return x;
- }
- return parseFloat(x);
- }
-
- jQuery.fn.dataTableExt.oSort['cust-txt-asc'] = function (a, b) {
- var x = getValue(a);
- var y = getValue(b);
-
- if (x == 'N/A' || x == '') {
- return 1;
- }
- else if (y == 'N/A' || y == '') {
- return -1;
- }
- else {
- return ((x < y) ? -1 : ((x > y) ? 1 : 0));
- }
- };
-
- jQuery.fn.dataTableExt.oSort['cust-txt-desc'] = function (a, b) {
- var x = getValue(a);
- var y = getValue(b);
- return ((x < y) ? 1 : ((x > y) ? -1 : 0));
+ $.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col )
+ {
+ return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
+ return $('input', td).prop('checked') ? '1' : '0';
+ } );
};
$(document).ready( function () {
@@ -145,19 +122,8 @@
console.time("Creating table");
$('#trait_table').DataTable( {
"paging": false,
- "buttons": [
- {
- extend: 'csvHtml5',
- text: 'Download CSV',
- title: 'search_results',
- fieldBoundary: '"',
- exportOptions: {
- columns: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- }
- }
- ],
"columns": [
- { "type": "natural" },
+ { "orderDataType": "dom-checkbox" },
{ "type": "natural" },
{ "type": "natural" },
{ "type": "natural" },
@@ -169,8 +135,14 @@
{ "type": "natural", "width": "12%"},
{ "type": "natural" }
],
+ "columnDefs": [
+ {
+ "targets": 0,
+ "orderDataType": "dom-checkbox"
+ }
+ ],
"order": [[1, "asc" ]],
- "sDom": "Btir",
+ "sDom": "tir",
"autoWidth": false,
"bDeferRender": true,
"scrollY": "800px",
diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html
index 708c83eb..b6aab101 100644
--- a/wqflask/wqflask/templates/search_result_page.html
+++ b/wqflask/wqflask/templates/search_result_page.html
@@ -13,7 +13,6 @@
'GeneNetwork found {}.'.format(numify(results|count, "record", "records"))) }}
<div class="container">
-
<input type="hidden" name="uc_id" id="uc_id" value="{{ uc_id }}">
<!-- Need to customize text more for other types of searches -->
@@ -54,12 +53,17 @@
<button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
<button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button>
<button class="btn btn-default" id="add" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
- <!--<button class="btn btn-default"><span class="glyphicon glyphicon-download"></span> Download Table</button>-->
<button id="redraw" class="btn btn-default">Reset Columns</button>
<input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline;" placeholder="Search This Table For ...">
<input type="text" id="select_top" class="form-control" style="width: 200px; display: inline;" placeholder="Select Top ...">
<br />
<br />
+ <form id="export_form" method="POST" action="/export_traits_csv">
+ <input type="hidden" name="database_name" id="database_name" value="{{ dataset.fullname }}">
+ <input type="hidden" name="export_data" id="export_data" value="">
+ <button class="btn btn-default" id="export_traits">Download CSV</button>
+ </form>
+ <br />
<!--
Removing this until more options are added and work correctly
{% if dataset.type == 'ProbeSet' %}
@@ -82,11 +86,11 @@
<th style="background-color: #eeeeee;"></th>
{% for header in header_fields %}
{% if header == 'Max LRS' %}
- <th style="background-color: #eeeeee; text-align: right;">Max<br>LRS</th>
+ <th data-export="Max LRS" style="background-color: #eeeeee; text-align: right;">Max<br>LRS</th>
{% elif header == 'Additive Effect' %}
- <th style="background-color: #eeeeee; text-align: right;">Additive<br>Effect<a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
+ <th data-export="Additive Effect" style="background-color: #eeeeee; text-align: right;">Additive<br>Effect<a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
{% else %}
- <th style="background-color: #eeeeee;">{{header}}</th>
+ <th data-export="{{header}}" style="background-color: #eeeeee;">{{header}}</th>
{% endif %}
{% endfor %}
</tr>
@@ -97,8 +101,8 @@
<TR id="trait:{{ this_trait.name }}:{{ this_trait.dataset.name }}">
<TD><INPUT TYPE="checkbox" NAME="searchResult" class="checkbox trait_checkbox" style="transform: scale(1.5);" VALUE="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}">
</TD>
- <TD align="right">{{ loop.index }}</TD>
- <TD>
+ <TD data-export="{{ loop.index }}" align="right">{{ loop.index }}</TD>
+ <TD data-export="{{ this_trait.name }}">
<a href="{{ url_for('show_trait_page',
trait_id = this_trait.name,
dataset = dataset.name
@@ -107,26 +111,26 @@
</a>
</TD>
{% if dataset.type == 'ProbeSet' %}
- <TD>{{ this_trait.symbol }}</TD>
- <TD>{{ this_trait.description_display }}</TD>
- <TD>{{ this_trait.location_repr }}</TD>
- <TD align="right">{{ '%0.3f' % this_trait.mean|float }}</TD>
- <TD align="right">{{ '%0.3f' % this_trait.LRS_score_repr|float }}</TD>
- <TD>{{ this_trait.LRS_location_repr }}</TD>
- <TD align="right">{{ '%0.3f' % this_trait.additive|float }}</TD>
+ <TD data-export="{{ this_trait.symbol }}">{{ this_trait.symbol }}</TD>
+ <TD data-export="{{ this_trait.description_display }}">{{ this_trait.description_display }}</TD>
+ <TD data-export="{{ this_trait.location_repr }}">{{ this_trait.location_repr }}</TD>
+ <TD data-export="{{ '%0.3f' % this_trait.mean|float }}" align="right">{{ '%0.3f' % this_trait.mean|float }}</TD>
+ <TD data-export="{{ '%0.3f' % this_trait.LRS_score_repr|float }}" align="right">{{ '%0.3f' % this_trait.LRS_score_repr|float }}</TD>
+ <TD data-export="{{ this_trait.LRS_location_repr }}">{{ this_trait.LRS_location_repr }}</TD>
+ <TD data-export="{{ '%0.3f' % this_trait.additive|float }}" align="right">{{ '%0.3f' % this_trait.additive|float }}</TD>
{% elif dataset.type == 'Publish' %}
- <TD>{{ this_trait.description_display }}</TD>
- <TD>{{ this_trait.authors }}</TD>
- <TD data-sort="{{ this_trait.pubmed_text }}">
+ <TD data-export="{{ this_trait.description_display }}">{{ this_trait.description_display }}</TD>
+ <TD data-export="{{ this_trait.authors }}">{{ this_trait.authors }}</TD>
+ <TD data-export="{{ this_trait.pubmed_text }}" data-sort="{{ this_trait.pubmed_text }}">
<a href="{{ this_trait.pubmed_link }}">
{{ this_trait.pubmed_text }}
</a>
</TD>
- <TD>{{ '%0.3f' % this_trait.LRS_score_repr|float }}</TD>
- <TD>{{ this_trait.LRS_location_repr }}</TD>
- <TD>{{ '%0.3f' % this_trait.additive|float }}</TD>
+ <TD data-export="{{ '%0.3f' % this_trait.LRS_score_repr|float }}">{{ '%0.3f' % this_trait.LRS_score_repr|float }}</TD>
+ <TD data-export="{{ this_trait.LRS_location_repr }}">{{ this_trait.LRS_location_repr }}</TD>
+ <TD data-export="{{ '%0.3f' % this_trait.additive|float }}">{{ '%0.3f' % this_trait.additive|float }}</TD>
{% elif dataset.type == 'Geno' %}
- <TD>{{ this_trait.location_repr }}</TD>
+ <TD data-export="{{ this_trait.location_repr }}">{{ this_trait.location_repr }}</TD>
{% endif %}
</TR>
{% endfor %}
@@ -172,44 +176,6 @@
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.fixedHeader.min.js"></script>
<script type="text/javascript" charset="utf-8">
- function getValue(x) {
- if (x.indexOf('input') >= 0) {
- if ($(x).val() == 'x') {
- return 0;
- }
- else {
- return parseFloat($(x).val());
- }
- }
- else if (isNaN(x)) {
- return x;
- }
- return parseFloat(x);
- }
-
-
- jQuery.fn.dataTableExt.oSort['cust-txt-asc'] = function (a, b) {
- var x = getValue(a);
- var y = getValue(b);
-
- if (x == 'N/A' || x == '') {
- return 1;
- }
- else if (y == 'N/A' || y == '') {
- return -1;
- }
- else {
- return ((x < y) ? -1 : ((x > y) ? 1 : 0));
- }
- };
-
- jQuery.fn.dataTableExt.oSort['cust-txt-desc'] = function (a, b) {
- var x = getValue(a);
- var y = getValue(b);
- return ((x < y) ? 1 : ((x > y) ? -1 : 0));
- };
-
-
$(document).ready( function () {
$('#trait_table tr').click(function(event) {
@@ -235,18 +201,7 @@
{ "type": "natural" }
],
"order": [[1, "asc" ]],
- "buttons": [
- {
- extend: 'csvHtml5',
- text: 'Download CSV',
- title: 'search_results',
- fieldBoundary: '"',
- exportOptions: {
- columns: [1, 2, 3, 4, 5, 6, 7, 8, 9]
- }
- }
- ],
- "sDom": "RZBtir",
+ "sDom": "RZtir",
"iDisplayLength": -1,
"bDeferRender": true,
"bSortClasses": false,
@@ -269,18 +224,7 @@
{ "type": "natural" }
],
"order": [[1, "asc" ]],
- "buttons": [
- {
- extend: 'csvHtml5',
- text: 'Download CSV',
- title: 'search_results',
- fieldBoundary: '"',
- exportOptions: {
- columns: [1, 2, 3, 4, 5, 6, 7]
- }
- }
- ],
- "sDom": "RZBtir",
+ "sDom": "RZtir",
"iDisplayLength": -1,
"autoWidth": false,
"bDeferRender": true,
@@ -298,18 +242,7 @@
{ "type": "natural", "width": "40%"}
],
"order": [[1, "asc" ]],
- "buttons": [
- {
- extend: 'csvHtml5',
- text: 'Download CSV',
- title: 'search_results',
- fieldBoundary: '"',
- exportOptions: {
- columns: [1, 2, 3]
- }
- }
- ],
- "sDom": "RZBtir",
+ "sDom": "RZtir",
"iDisplayLength": -1,
"autoWidth": true,
"bDeferRender": true,
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index fb52165a..ec5035ce 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -33,6 +33,7 @@ import sqlalchemy
from wqflask import app
from flask import g, Response, request, make_response, render_template, send_from_directory, jsonify, redirect
from wqflask import search_results
+from wqflask import export_traits
from wqflask import gsearch
from wqflask import update_search_results
from wqflask import docs
@@ -338,6 +339,17 @@ def export_trait_csv():
mimetype='text/csv',
headers={"Content-Disposition":"attachment;filename=sample_data.csv"})
+@app.route('/export_traits_csv', methods=('POST',))
+def export_traits_csv():
+ """CSV file consisting of the traits from the search result page"""
+ logger.info("In export_traits_csv")
+ logger.info("request.form:", request.form)
+ csv_data = export_traits.export_search_results_csv(request.form)
+
+ return Response(csv_data,
+ mimetype='text/csv',
+ headers={"Content-Disposition":"attachment;filename=trait_list.csv"})
+
@app.route('/export_perm_data', methods=('POST',))
def export_perm_data():
"""CSV file consisting of the permutation data for the mapping results"""