about summary refs log tree commit diff
diff options
context:
space:
mode:
authorzsloan2015-07-20 21:27:42 +0000
committerzsloan2015-07-20 21:27:42 +0000
commit5ea552fe9bd456dcdc52203f82f5a7f18d05f105 (patch)
treebd3ce2117a1b75292b11e761f8ec2d05f4b61d98
parentafa09962dcdfcd172d98339be9d70187bdb22d61 (diff)
parent5eadc461dbc9f60457d83e4a75f5e0cf043a87ca (diff)
downloadgenenetwork2-5ea552fe9bd456dcdc52203f82f5a7f18d05f105.tar.gz
Merge branch 'master' of github.com:genenetwork/genenetwork2
-rwxr-xr-xwqflask/wqflask/gsearch.py31
-rwxr-xr-xwqflask/wqflask/templates/gsearch0.html48
-rwxr-xr-xwqflask/wqflask/templates/gsearch1.html (renamed from wqflask/wqflask/templates/gsearch.html)10
-rwxr-xr-xwqflask/wqflask/templates/gsearch2.html8
-rwxr-xr-xwqflask/wqflask/templates/gsearchact0.html (renamed from wqflask/wqflask/templates/gsearchact.html)4
-rwxr-xr-xwqflask/wqflask/templates/gsearchact1.html118
-rwxr-xr-xwqflask/wqflask/templates/gsearchact2.html51
-rwxr-xr-xwqflask/wqflask/views.py23
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)