diff options
author | zsloan | 2015-07-17 13:33:04 -0500 |
---|---|---|
committer | zsloan | 2015-07-17 13:33:04 -0500 |
commit | 5eadc461dbc9f60457d83e4a75f5e0cf043a87ca (patch) | |
tree | 20cbc189264751a1335fa013f85f0571816d545f /wqflask | |
parent | 28d88c740c52386ae464b0f03d1db7058b3ddcf9 (diff) | |
parent | e00b53485707c6ccc795b776d795dc4bc1fe0e15 (diff) | |
download | genenetwork2-5eadc461dbc9f60457d83e4a75f5e0cf043a87ca.tar.gz |
Merge pull request #97 from lyan6/master
Committer: Lei Yan <lei@penguin.uthsc.edu>
Diffstat (limited to 'wqflask')
-rwxr-xr-x | wqflask/wqflask/gsearch.py | 31 | ||||
-rwxr-xr-x | wqflask/wqflask/templates/gsearch0.html | 48 | ||||
-rwxr-xr-x | wqflask/wqflask/templates/gsearch1.html (renamed from wqflask/wqflask/templates/gsearch.html) | 10 | ||||
-rwxr-xr-x | wqflask/wqflask/templates/gsearch2.html | 8 | ||||
-rwxr-xr-x | wqflask/wqflask/templates/gsearchact0.html (renamed from wqflask/wqflask/templates/gsearchact.html) | 4 | ||||
-rwxr-xr-x | wqflask/wqflask/templates/gsearchact1.html | 118 | ||||
-rwxr-xr-x | wqflask/wqflask/templates/gsearchact2.html | 51 | ||||
-rwxr-xr-x | wqflask/wqflask/views.py | 23 |
8 files changed, 260 insertions, 33 deletions
diff --git a/wqflask/wqflask/gsearch.py b/wqflask/wqflask/gsearch.py index 706a3655..4792f77b 100755 --- a/wqflask/wqflask/gsearch.py +++ b/wqflask/wqflask/gsearch.py @@ -4,7 +4,6 @@ from flask import Flask, g class GSearch(object): - # http://gn2_lei.genenetwork.org/gsearch?species=mouse&group=BXD&search_terms=shh def __init__(self, kw): if 'species' in kw and 'group' in kw: self.species = kw['species'] @@ -81,3 +80,33 @@ class GSearch(object): LIMIT 1000 """ % (self.species_id, self.terms) self.results = g.db.execute(sql).fetchall() + else: + self.terms = kw['terms'] + sql = """ + SELECT + Species.`Name` AS species_name, + InbredSet.`Name` AS inbredset_name, + Tissue.`Name` AS tissue_name, + ProbeSetFreeze.FullName AS probesetfreeze_fullname, + ProbeSet.Name AS probeset_name, + ProbeSet.Symbol AS probeset_symbol, + ProbeSet.`description` AS probeset_description, + ProbeSet.Chr AS chr, + ProbeSet.Mb AS mb, + ProbeSetXRef.Mean AS mean, + ProbeSetXRef.LRS AS lrs, + ProbeSetXRef.`Locus` AS locus, + ProbeSetXRef.`pValue` AS pvalue, + ProbeSetXRef.`additive` AS additive + FROM Species, InbredSet, ProbeSetXRef, ProbeSet, ProbeFreeze, ProbeSetFreeze, Tissue + WHERE InbredSet.`SpeciesId`=Species.`Id` + AND ProbeFreeze.InbredSetId=InbredSet.`Id` + AND ProbeFreeze.`TissueId`=Tissue.`Id` + AND ProbeSetFreeze.ProbeFreezeId=ProbeFreeze.Id + AND ( MATCH (ProbeSet.Name,ProbeSet.description,ProbeSet.symbol,alias,GenbankId, UniGeneId, Probe_Target_Description) AGAINST ('%s' IN BOOLEAN MODE) ) + AND ProbeSet.Id = ProbeSetXRef.ProbeSetId + AND ProbeSetXRef.ProbeSetFreezeId=ProbeSetFreeze.Id + ORDER BY species_name, inbredset_name, tissue_name, probesetfreeze_fullname, probeset_name + LIMIT 1000 + """ % (self.terms) + self.results = g.db.execute(sql).fetchall() diff --git a/wqflask/wqflask/templates/gsearch0.html b/wqflask/wqflask/templates/gsearch0.html new file mode 100755 index 00000000..45ab0d3b --- /dev/null +++ b/wqflask/wqflask/templates/gsearch0.html @@ -0,0 +1,48 @@ +{% extends "base.html" %} +{% block title %}GeneNetwork{% endblock %} +{% block content %} +<!-- Start of body --> + + <div class="container-fluid"> + + {{ flash_me() }} + + <div class="row" style="width: 1200px !important;"> + + <div class="col-xs-5 col-xs-5"> + <section id="search"> + <div class="page-header"> + <h1>Global Search</h1> + </div> + <form method="get" action="/gsearchact0" name="SEARCHFORM"> + <fieldset> + <div style="padding: 20px" class="form-horizontal"> + + <div class="form-group"> + <label for="tfor" class="col-xs-1 control-label" style="width: 65px !important;">Search:</label> + <div class="col-xs-10 controls"> + <textarea name="terms" rows="2" class="form-control search-query" style="width: 450px !important;" id="tfor"></textarea> + </div> + </div> + + <!-- SEARCH, MAKE DEFAULT, ADVANCED SEARCH --> + + <div class="form-group"> + + <div class="col-xs-3 controls" style="width: 100px !important;"> + <input id="btsearch" type="submit" class="btn btn-primary form-control" value="Search"> + </div> + </div> + </div> + </fieldset> + </form> + </section> + </div> + </div> + </div> + +{%endblock%} + +{% block js %} + <script src="/static/new/javascript/dataset_select_menu.js"></script> +{% endblock %}
\ No newline at end of file diff --git a/wqflask/wqflask/templates/gsearch.html b/wqflask/wqflask/templates/gsearch1.html index 28301515..500e7f3d 100755 --- a/wqflask/wqflask/templates/gsearch.html +++ b/wqflask/wqflask/templates/gsearch1.html @@ -14,7 +14,7 @@ <div class="page-header"> <h1>Global Search</h1> </div> - <form method="get" action="/gsearchact" name="SEARCHFORM"> + <form method="get" action="/gsearchact1" name="SEARCHFORM"> <fieldset> <div style="padding: 20px" class="form-horizontal"> @@ -26,14 +26,6 @@ </div> <div class="form-group"> - <label for="group" class="col-xs-1 control-label" style="width: 65px !important;">Group:</label> - <div class="col-xs-4 controls input-append"> - <select name="group" id="group" class="form-control selectpicker span3" style="width: 300px !important;"></select> - <i class="icon-question-sign"></i> - </div> - </div> - - <div class="form-group"> <label for="tfor" class="col-xs-1 control-label" style="width: 65px !important;">Search:</label> <div class="col-xs-10 controls"> <textarea name="terms" rows="2" class="form-control search-query" style="width: 450px !important;" id="tfor"></textarea> diff --git a/wqflask/wqflask/templates/gsearch2.html b/wqflask/wqflask/templates/gsearch2.html index 430bf889..9a6da575 100755 --- a/wqflask/wqflask/templates/gsearch2.html +++ b/wqflask/wqflask/templates/gsearch2.html @@ -26,6 +26,14 @@ </div> <div class="form-group"> + <label for="group" class="col-xs-1 control-label" style="width: 65px !important;">Group:</label> + <div class="col-xs-4 controls input-append"> + <select name="group" id="group" class="form-control selectpicker span3" style="width: 300px !important;"></select> + <i class="icon-question-sign"></i> + </div> + </div> + + <div class="form-group"> <label for="tfor" class="col-xs-1 control-label" style="width: 65px !important;">Search:</label> <div class="col-xs-10 controls"> <textarea name="terms" rows="2" class="form-control search-query" style="width: 450px !important;" id="tfor"></textarea> diff --git a/wqflask/wqflask/templates/gsearchact.html b/wqflask/wqflask/templates/gsearchact0.html index 295ad2fd..54e156e1 100755 --- a/wqflask/wqflask/templates/gsearchact.html +++ b/wqflask/wqflask/templates/gsearchact0.html @@ -26,6 +26,8 @@ <tr> <th></th> <th>Index</th> + <th>Species</th> + <th>Group</th> <th>Tissue</th> <th>Dataset</th> <th>Record</th> @@ -46,7 +48,7 @@ <TR> <td><input type="checkbox"></td> <td>{{ loop.index }}</td> - {% for item in this_trait[1:] %} + {% for item in this_trait %} <TD>{{ item }}</TD> {% endfor %} </TR> diff --git a/wqflask/wqflask/templates/gsearchact1.html b/wqflask/wqflask/templates/gsearchact1.html new file mode 100755 index 00000000..dcc82f91 --- /dev/null +++ b/wqflask/wqflask/templates/gsearchact1.html @@ -0,0 +1,118 @@ +{% extends "base.html" %} +{% block title %}Search Results{% endblock %} +{% block css %} + <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" /> + <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" /> + <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" /> +{% endblock %} +{% block content %} +<!-- Start of body --> + + <div class="container"> + + <p>To study a record, click on its ID below.<br />Check records below and click Add button to add to selection.</p> + + <div> + <br /> + <button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button> + <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"><span class="glyphicon glyphicon-plus-sign"></span> Add</button> + <button class="btn btn-primary pull-right"><span class="glyphicon glyphicon-download"></span> Download Table</button> + <br /> + <br /> + <table class="table table-hover table-striped" id='' style="width: 100%;"> + <thead> + <tr> + <th></th> + <th>Index</th> + <th>Group</th> + <th>Tissue</th> + <th>Dataset</th> + <th>Record</th> + <th>Symbol</th> + <th>Description</th> + <th>Chr</th> + <th>Mb</th> + <th>Mean</th> + <th>Max LRS</th> + <th>Locus</th> + <th>Pvalue</th> + <th>Additive</th> + </tr> + </thead> + + <tbody> + {% for this_trait in results %} + <TR> + <td><input type="checkbox"></td> + <td>{{ loop.index }}</td> + {% for item in this_trait[1:] %} + <TD>{{ item }}</TD> + {% endfor %} + </TR> + {% endfor %} + </tbody> + + </table> + </div> + </div> + +<!-- End of body --> + +{% endblock %} + +{% block js %} + <script type="text/javascript" src="/static/new/javascript/search_results.js"></script> + + <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.min.js"></script> + <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script> + <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script> + <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()); + } + } + return parseFloat(x); + } + + jQuery.fn.dataTableExt.oSort['cust-txt-asc'] = function (a, b) { + var x = getValue(a); + var y = getValue(b); + 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 () { + + /*num_columns = $('#trait_table').find('tr:first th').length; + + nul_cols = [] + for (i=0; i<num_columns - 1, i++) { + $('#trait_table > tbody > tr').each(function() { + if ($(this).find('td:eq(i)').html()){ + continue; + } + }); + nul_cols.push(i) + }*/ + + console.time("Creating table"); + console.timeEnd("Creating table"); + }); + + </script> + +{% endblock %} diff --git a/wqflask/wqflask/templates/gsearchact2.html b/wqflask/wqflask/templates/gsearchact2.html index d99bfadc..295ad2fd 100755 --- a/wqflask/wqflask/templates/gsearchact2.html +++ b/wqflask/wqflask/templates/gsearchact2.html @@ -21,10 +21,11 @@ <button class="btn btn-primary pull-right"><span class="glyphicon glyphicon-download"></span> Download Table</button> <br /> <br /> - <table class="table table-hover table-striped" id='' style="width: 100%;"> + <table class="table table-hover table-striped" id="trait_table"> <thead> <tr> - <th>Group</th> + <th></th> + <th>Index</th> <th>Tissue</th> <th>Dataset</th> <th>Record</th> @@ -43,6 +44,8 @@ <tbody> {% for this_trait in results %} <TR> + <td><input type="checkbox"></td> + <td>{{ loop.index }}</td> {% for item in this_trait[1:] %} <TD>{{ item }}</TD> {% endfor %} @@ -65,7 +68,7 @@ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script> <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script> <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script> - <script type="text/javascript" charset="utf-8"> + <script type="text/javascript" charset="utf-8"> function getValue(x) { if (x.indexOf('input') >= 0) { if ($(x).val() == 'x') { @@ -93,19 +96,39 @@ $(document).ready( function () { - /*num_columns = $('#trait_table').find('tr:first th').length; - - nul_cols = [] - for (i=0; i<num_columns - 1, i++) { - $('#trait_table > tbody > tr').each(function() { - if ($(this).find('td:eq(i)').html()){ - continue; - } - }); - nul_cols.push(i) - }*/ + $('#trait_table tr').click(function(event) { + if (event.target.type !== 'checkbox') { + $(':checkbox', this).trigger('click'); + } + }); console.time("Creating table"); + $('#trait_table').dataTable( { + "aoColumns": [ + { "bSortable": false }, + { "bSortable": true }, + { "sType": "natural" }, + { "sType": "natural" }, + { "sType": "natural", "sWidth": "35%" }, + { "sType": "natural", "sWidth": "15%" }, + { "sType": "cust-txt" }, + { "sType": "natural", "sWidth": "12%" }, + { "sType": "natural", "sWidth": "12%" }, + { "sType": "natural", "sWidth": "12%" }, + { "sType": "natural", "sWidth": "12%" }, + { "sType": "natural", "sWidth": "12%" }, + { "sType": "natural", "sWidth": "15%" }, + { "sType": "cust-txt" } + ], + + "sDom": "tir", + "iDisplayLength": -1, + "autoWidth": true, + "bLengthChange": true, + "bDeferRender": true, + "bSortClasses": false + } ); + console.timeEnd("Creating table"); }); diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index e00c3e80..a1cecc9e 100755 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -155,15 +155,23 @@ def search_page(): else: return render_template("search_error.html") -@app.route("/gsearch", methods=('GET',)) -def gsearchreq(): - return render_template("gsearch.html") +@app.route("/gsearch0", methods=('GET',)) +def gsearchreq0(): + return render_template("gsearch0.html") -@app.route("/gsearchact", methods=('GET',)) -def gsearchact(): - print("request.args is", request.args) +@app.route("/gsearchact0", methods=('GET',)) +def gsearchact0(): result = gsearch.GSearch(request.args).__dict__ - return render_template("gsearchact.html", **result) + return render_template("gsearchact0.html", **result) + +@app.route("/gsearch1", methods=('GET',)) +def gsearchreq1(): + return render_template("gsearch1.html") + +@app.route("/gsearchact1", methods=('GET',)) +def gsearchact1(): + result = gsearch.GSearch(request.args).__dict__ + return render_template("gsearchact1.html", **result) @app.route("/gsearch2", methods=('GET',)) def gsearchreq2(): @@ -171,7 +179,6 @@ def gsearchreq2(): @app.route("/gsearchact2", methods=('GET',)) def gsearchact2(): - print("request.args is", request.args) result = gsearch.GSearch(request.args).__dict__ return render_template("gsearchact2.html", **result) |