about summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-xwqflask/base/data_set.py52
-rwxr-xr-xwqflask/wqflask/collect.py2
-rwxr-xr-xwqflask/wqflask/marker_regression/marker_regression.py5
-rw-r--r--wqflask/wqflask/static/new/javascript/dataset_select_menu.js1
-rwxr-xr-xwqflask/wqflask/static/new/javascript/histogram.js2
-rwxr-xr-xwqflask/wqflask/static/packages/bootstrap/css/bootstrap.css4
-rwxr-xr-xwqflask/wqflask/templates/base.html3
-rwxr-xr-xwqflask/wqflask/templates/collections/add.html6
-rwxr-xr-xwqflask/wqflask/templates/gsearch_gene.html4
-rwxr-xr-xwqflask/wqflask/templates/marker_regression.html7
-rwxr-xr-xwqflask/wqflask/templates/search_result_page.html87
-rwxr-xr-xwqflask/wqflask/templates/show_trait.html48
-rwxr-xr-xwqflask/wqflask/templates/show_trait_details.html6
-rwxr-xr-xwqflask/wqflask/templates/show_trait_mapping_tools.html2
14 files changed, 145 insertions, 84 deletions
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index c60efe65..e98258f6 100755
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -559,29 +559,39 @@ class DataSet(object):
         This is not meant to retrieve the data set info if no name at all is passed.
 
         """
-
-        query_args = tuple(escape(x) for x in (
-            (self.type + "Freeze"),
-            str(webqtlConfig.PUBLICTHRESH),
-            self.name,
-            self.name,
-            self.name))
-        print("query_args are:", query_args)
-
-        #print("""
-        #        SELECT Id, Name, FullName, ShortName
-        #        FROM %s
-        #        WHERE public > %s AND
-        #             (Name = '%s' OR FullName = '%s' OR ShortName = '%s')
-        #  """ % (query_args))
         
         try:
-            self.id, self.name, self.fullname, self.shortname = g.db.execute("""
-                    SELECT Id, Name, FullName, ShortName
-                    FROM %s
-                    WHERE public > %s AND
-                         (Name = '%s' OR FullName = '%s' OR ShortName = '%s')
-              """ % (query_args)).fetchone()
+            if self.type == "ProbeSet":
+                query_args = tuple(escape(x) for x in (
+                    str(webqtlConfig.PUBLICTHRESH),
+                    self.name,
+                    self.name,
+                    self.name))
+
+                self.id, self.name, self.fullname, self.shortname, self.tissue = g.db.execute("""
+                        SELECT ProbeSetFreeze.Id, ProbeSetFreeze.Name, ProbeSetFreeze.FullName, ProbeSetFreeze.ShortName, Tissue.Name
+                        FROM ProbeSetFreeze, ProbeFreeze, Tissue
+                        WHERE ProbeSetFreeze.public > %s AND
+                              ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id AND
+                              ProbeFreeze.TissueId = Tissue.Id AND
+                             (ProbeSetFreeze.Name = '%s' OR ProbeSetFreeze.FullName = '%s' OR ProbeSetFreeze.ShortName = '%s')
+                  """ % (query_args)).fetchone()
+            else:
+                query_args = tuple(escape(x) for x in (
+                    (self.type + "Freeze"),
+                    str(webqtlConfig.PUBLICTHRESH),
+                    self.name,
+                    self.name,
+                    self.name))
+
+                self.tissue = "N/A"
+                self.id, self.name, self.fullname, self.shortname = g.db.execute("""
+                        SELECT Id, Name, FullName, ShortName
+                        FROM %s
+                        WHERE public > %s AND
+                             (Name = '%s' OR FullName = '%s' OR ShortName = '%s')
+                  """ % (query_args)).fetchone()
+
         except TypeError:
             print("Dataset {} is not yet available in GeneNetwork.".format(self.name))
             pass
diff --git a/wqflask/wqflask/collect.py b/wqflask/wqflask/collect.py
index c7c1e744..750f4757 100755
--- a/wqflask/wqflask/collect.py
+++ b/wqflask/wqflask/collect.py
@@ -181,6 +181,8 @@ def collections_new():
     if "anonymous_add" in params:
         AnonCollection().add_traits(params, "Default")
         return redirect(url_for('view_collection'))
+    elif "sign_in" in params:
+        return redirect(url_for('login'))
 
     collection_name = params['new_collection']
 
diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py
index 850dfc7f..1c5757a6 100755
--- a/wqflask/wqflask/marker_regression/marker_regression.py
+++ b/wqflask/wqflask/marker_regression/marker_regression.py
@@ -165,7 +165,10 @@ class MarkerRegression(object):
                 else:
                     self.json_data['chr'].append(str(qtl['chr']))
                 self.json_data['pos'].append(qtl['Mb'])
-                self.json_data['lod.hk'].append(str(qtl['lod_score']))
+                if self.score_type == "LRS":
+                    self.json_data['lod.hk'].append(str(qtl['lrs_value']))
+                else:
+                    self.json_data['lod.hk'].append(str(qtl['lod_score']))
                 self.json_data['markernames'].append(qtl['name'])
 
             #Get chromosome lengths for drawing the interval map plot
diff --git a/wqflask/wqflask/static/new/javascript/dataset_select_menu.js b/wqflask/wqflask/static/new/javascript/dataset_select_menu.js
index fb9fdcf3..f91504be 100644
--- a/wqflask/wqflask/static/new/javascript/dataset_select_menu.js
+++ b/wqflask/wqflask/static/new/javascript/dataset_select_menu.js
@@ -94,6 +94,7 @@ $(function() {
   $('#dataset_info').click(dataset_info);
   make_default = function() {
     var holder, item, jholder, _i, _len, _ref;
+    alert("The current settings are now your default.")
     holder = {};
     _ref = ['species', 'group', 'type', 'dataset'];
     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
diff --git a/wqflask/wqflask/static/new/javascript/histogram.js b/wqflask/wqflask/static/new/javascript/histogram.js
index d872a3ba..d26d0c03 100755
--- a/wqflask/wqflask/static/new/javascript/histogram.js
+++ b/wqflask/wqflask/static/new/javascript/histogram.js
@@ -68,7 +68,7 @@
     Histogram.prototype.get_histogram_data = function() {
       var n_bins;
       console.log("sample_vals:", this.sample_vals);
-      n_bins = Math.sqrt(this.sample_vals.length);
+      n_bins = 2*Math.sqrt(this.sample_vals.length); //Was originally just the square root, but increased to 2*; ideally would be a GUI for changing this
       this.histogram_data = d3.layout.histogram().bins(this.x_scale.ticks(n_bins))(this.sample_vals);
       return console.log("histogram_data:", this.histogram_data[0]);
     };
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css b/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css
index dd6fa736..4145e73f 100755
--- a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css
+++ b/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css
@@ -1215,7 +1215,7 @@ a.bg-danger:hover {
 }
 .page-header {
   padding-bottom: 9px;
-  margin: 20px 0 20px;
+  margin: 10px 0 10px;
   border-bottom: 1px solid #eee;
 }
 ul,
@@ -4674,7 +4674,7 @@ a.list-group-item.active > .badge,
   margin-left: 3px;
 }
 .jumbotron {
-  margin-bottom: 30px;
+  margin-bottom: 10px;
   color: inherit;
   background-color: #eee;
 }
diff --git a/wqflask/wqflask/templates/base.html b/wqflask/wqflask/templates/base.html
index 75af8ba5..90acd0da 100755
--- a/wqflask/wqflask/templates/base.html
+++ b/wqflask/wqflask/templates/base.html
@@ -83,7 +83,8 @@
                     <option value="phenotype" {% if type=="phenotype" %}selected{% endif %}>Phenotypes</option>
                 </select>
                 <input class="btn btn-primary form-control col-xs-2" style="width: 100px; margin-top: 15px; margin-left: 10px;" type="submit" value="Search All">
-                <input class="form-control col-xs-6" style="width: 980px; margin-top: 15px; margin-left: 10px;" type="text" name="terms" required>
+                <input class="form-control col-xs-6" style="width: 600px; margin-top: 15px; margin-left: 10px;" type="text" name="terms" required>
+                <a href="http://www.genenetwork.org"><input class="btn btn-primary form-control col-xs-2" style="width: 175px; margin-top: 15px; margin-left: 50px;" value="Use GeneNetwork 1"></a>
             </div>
         </form>
     </div>
diff --git a/wqflask/wqflask/templates/collections/add.html b/wqflask/wqflask/templates/collections/add.html
index faee4f78..07fcba22 100755
--- a/wqflask/wqflask/templates/collections/add.html
+++ b/wqflask/wqflask/templates/collections/add.html
@@ -1,11 +1,12 @@
 <div id="myModal">
     <div class="modal-header">
         <h3>Add to collection</h3>
-        <p>You have three choices: Use your default collection, create a new named collection,
+        <p>You have two choices: Create and name a collection,
         or add the traits to an existing collection.</p>
     </div>
     <div class="modal-body">
         <form action="/collections/new" data-validate="parsley" id="add_form">
+<!--
             <fieldset>
                 <legend>Use your default collection</legend>
                 <span class="help-block">Choose this if you're in a hurry or don't plan on using the collection again.</span>
@@ -13,11 +14,12 @@
                 <button type="submit" name="Default" class="btn">Continue</button>
             </fieldset>
             <hr />
+-->
 
 
             <input type="hidden" name="traits" value="{{ traits }}" />
             <fieldset>
-                <legend>Or create a new named collection</legend>
+                <legend>Create a new named collection</legend>
                 <label>New collection name</label>
                 <input type="text" name="new_collection" placeholder="Name of new collection..."
                     data-trigger="change" data-minlength="5" data-maxlength="50">
diff --git a/wqflask/wqflask/templates/gsearch_gene.html b/wqflask/wqflask/templates/gsearch_gene.html
index 6beefb01..c7e50a16 100755
--- a/wqflask/wqflask/templates/gsearch_gene.html
+++ b/wqflask/wqflask/templates/gsearch_gene.html
@@ -52,8 +52,8 @@
                         <TD>{{ loop.index }}</TD>
                         <TD>{{ this_trait.dataset.group.species }}</TD>
                         <TD>{{ this_trait.dataset.group.name }}</TD>
-                        <TD>{{ this_trait.dataset.name }}</TD>
-                        <TD>{{ this_trait.dataset.name }}</TD>
+                        <TD>{{ this_trait.dataset.tissue }}</TD>
+                        <TD>{{ this_trait.dataset.fullname }}</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>
diff --git a/wqflask/wqflask/templates/marker_regression.html b/wqflask/wqflask/templates/marker_regression.html
index 91808fcf..d83730a2 100755
--- a/wqflask/wqflask/templates/marker_regression.html
+++ b/wqflask/wqflask/templates/marker_regression.html
@@ -34,7 +34,7 @@
                 <thead>
                     <tr>
                         <th>Index</th>
-                        <th>LOD Score</th>
+                        <th>{{ score_type }}</th>
                         <th>Chr</th>
                         <th>Mb</th>
                         <th>Locus</th>
@@ -87,7 +87,10 @@
                     { "type": "natural" },
                     { "type": "natural" }
                     ],
-                "sDom": "ZRtir",
+                "buttons": [
+                    'csv'
+                ],
+                "sDom": "RZBtir",
                 "iDisplayLength": -1,
                 "autoWidth": true,
                 "bDeferRender": true,
diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html
index 117e2dcd..d0875b71 100755
--- a/wqflask/wqflask/templates/search_result_page.html
+++ b/wqflask/wqflask/templates/search_result_page.html
@@ -2,8 +2,6 @@
 {% 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" />-->
     <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/dataTables.fixedHeader.css" >
     <link rel="stylesheet" type="text/css" href="//cdn.datatables.net/fixedcolumns/3.0.4/css/dataTables.fixedColumns.css">
     <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.bootstrap.css" />
@@ -45,12 +43,21 @@
           <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 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 />
+          <button class="btn btn-default" id="open_options">Open Extra Options</button>
+          <br />
+          <br />
+          <div id="extra_options" style="display:none;">
+          Min LRS <input type="text" id="min" class="form-control" style="width: 60px; display: inline;">
+          Max LRS <input type="text" id="max" class="form-control" style="width: 60px; display: inline;">
+          </div>
+          <br />
+          <br />
           <div id="table_container">
             <table class="table table-hover table-striped" id='trait_table' {% if dataset.type == 'Geno' %}width="400px"{% endif %} style="float: left;">
                 <thead>
@@ -58,7 +65,7 @@
                         <th style="width: 30px;"></th>
                     {% for header in header_fields %}
                         {% if header == 'Max LRS' %}
-                        <th style="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="text-align: right;">Max&nbsp;&nbsp;<br>LRS</th>
                         {% elif header == 'Additive Effect' %}
                         <th style="text-align: right;">Additive<br>Effect<a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
                         {% else %}
@@ -73,7 +80,7 @@
                     <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 align="right">{{ loop.index }}</TD>
                         <TD>
                             <a href="{{ url_for('show_trait_page',
                                     trait_id = this_trait.name,
@@ -132,8 +139,6 @@
     <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colReorder.js"></script>
     <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.fixedHeader.js"></script>
     <script language="javascript" type="text/javascript" src="//cdn.datatables.net/fixedcolumns/3.0.4/js/dataTables.fixedColumns.min.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) {
@@ -150,7 +155,41 @@
             }
             return parseFloat(x);
         }
-            
+
+
+        function filtering( oSettings, aData, iDataIndex, column) {
+            var iColumn = column;
+            if (document.getElementById('min').value){
+                var iMin = document.getElementById('min').value * 1;
+            } else {
+                var iMin = 0
+            }
+            if (document.getElementById('max').value){
+                var iMax = document.getElementById('max').value * 1;
+            } else {
+                var iMax = 10000
+            }
+
+            var iVersion = aData[iColumn] == "-" ? 0 : aData[iColumn]*1;
+            if ( iMin === "" && iMax === "" )
+            {
+                return true;
+            }
+            else if ( iMin === "" && iVersion < iMax )
+            {
+                return true;
+            }
+            else if ( iMin < iVersion && "" === iMax )
+            {
+                return true;
+            }
+            else if ( iMin < iVersion && iVersion < iMax )
+            {
+                return true;
+            }
+                return false;
+        }
+
         jQuery.fn.dataTableExt.oSort['cust-txt-asc'] = function (a, b) {
             var x = getValue(a);
             var y = getValue(b); 
@@ -183,13 +222,21 @@
 
             console.time("Creating table");
             {% if dataset.type == 'ProbeSet' %}
+
+            jQuery.fn.dataTableExt.afnFiltering.push(
+                function( oSettings, aData, iDataIndex ) {
+                    return filtering( oSettings, aData, iDataIndex, 7 );
+
+                }
+            );
+
             $('#trait_table').DataTable( {
                 "columns": [
                     { "type": "natural" },
                     { "type": "natural" },
                     { "type": "natural" },
                     { "type": "natural" },
-                    { "type": "natural", "width": "30%" },
+                    { "type": "natural", "width": "40%" },
                     { "type": "natural", "width": "15%" },
                     { "type": "natural" },
                     { "type": "natural" },
@@ -201,7 +248,6 @@
                 ],
                 "sDom": "RZBtir",
                 "iDisplayLength": -1,
-                "autoWidth": false,
                 "bDeferRender": true,
                 "bSortClasses": false,
                 "scrollY": "700px",
@@ -222,7 +268,10 @@
                     { "type": "natural", "width": "15%"},
                     { "type": "natural" }
                 ],
-                "sDom": "RZtir",
+                "buttons": [
+                    'csv'
+                ],
+                "sDom": "RZBtir",
                 "iDisplayLength": -1,
                 "autoWidth": false,
                 "bDeferRender": true,
@@ -239,7 +288,10 @@
                     { "type": "natural" },
                     { "type": "natural", "width": "40%"}
                 ],
-                "sDom": "RZtir",
+                "buttons": [
+                    'csv'
+                ],
+                "sDom": "RZBtir",
                 "iDisplayLength": -1,
                 "autoWidth": true,
                 "bDeferRender": true,
@@ -251,13 +303,18 @@
             {% endif %}
             console.timeEnd("Creating table");
             
+            var table = $('#trait_table').DataTable();
             $('#redraw').click(function() {
                 var table = $('#trait_table').DataTable();
                 table.colReorder.reset()
             });
-            
-            //new $.fn.dataTable.FixedHeader( table );
-            //new $.fn.dataTable.FixedColumns( table );
+
+            $('#min').keyup( function() { table.draw(); } );
+            $('#max').keyup( function() { table.draw(); } );
+
+            $('#open_options').click( function () {
+                $('#extra_options').toggle();
+            });
 
         });
     </script>
diff --git a/wqflask/wqflask/templates/show_trait.html b/wqflask/wqflask/templates/show_trait.html
index 6199f931..0709a82f 100755
--- a/wqflask/wqflask/templates/show_trait.html
+++ b/wqflask/wqflask/templates/show_trait.html
@@ -11,8 +11,8 @@
     <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
     <link rel="stylesheet" type="text/css" href="/static/new/packages/nvd3/nv.d3.min.css" />
     <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
+    <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.bootstrap.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 -->
@@ -37,12 +37,6 @@
         <input type="hidden" name="temp_uuid" id="temp_uuid" value="{{ temp_uuid }}">
 
         <div class="container">
-            <div class="page-header">
-                <h1>{{ dataset.group.species.capitalize() }} -
-                    {{ dataset.group.name }} -
-                    {{ this_trait.name_header_fmt }}
-                </h1>
-            </div>
             
             {% include 'show_trait_details.html' %}
             <div class="panel-group" id="accordion">
@@ -145,12 +139,14 @@
     <script language="javascript" type="text/javascript" src="/static/new/javascript/lod_chart.js"></script>
 
     <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.js"></script>
+    <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/dataTables.buttons.min.js"></script>
+    <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/buttons.html5.min.js"></script>
+    <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/buttons.bootstrap.min.js"></script>
+    <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
     <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.scientific.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/new/packages/DataTables/extensions/dataTables.colResize.js"></script>
     <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colReorder.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) {
@@ -209,19 +205,10 @@
                         { "bSortable": false },
                         { "type": "cust-txt" }
                         ],
-                    "sDom": "RZtir",
-                    "oTableTools": {
-                        "aButtons": [
-                            "copy",
-                            "print",
-                            {
-                                "sExtends":    "collection",
-                                "sButtonText": 'Save <span class="caret" />',
-                                "aButtons":    [ "csv", "xls", "pdf" ]
-                            }
-                        ],
-                        "sSwfPath": "/static/packages/TableTools/media/swf/copy_csv_xls_pdf.swf"
-                    },
+                    "buttons": [
+                        'csv'
+                    ],
+                    "sDom": "RZBtir",
                     "iDisplayLength": -1,
                     "autoWidth": false,
                     "bLengthChange": true,
@@ -245,19 +232,10 @@
                         null,
                         { "type": "cust-txt" }
                     ],
-                    "sDom": "RZtir",
-                    "oTableTools": {
-                        "aButtons": [
-                            "copy",
-                            "print",
-                            {
-                                "sExtends":    "collection",
-                                "sButtonText": 'Save <span class="caret" />',
-                                "aButtons":    [ "csv", "xls", "pdf" ]
-                            }
-                        ],
-                        "sSwfPath": "/static/packages/TableTools/media/swf/copy_csv_xls_pdf.swf"
-                    },
+                    "buttons": [
+                        'csv'
+                    ],
+                    "sDom": "RZBtir",
                     "iDisplayLength": -1,
                     "autoWidth": false,
                     "bLengthChange": true,
diff --git a/wqflask/wqflask/templates/show_trait_details.html b/wqflask/wqflask/templates/show_trait_details.html
index 108fcd92..04db915a 100755
--- a/wqflask/wqflask/templates/show_trait_details.html
+++ b/wqflask/wqflask/templates/show_trait_details.html
@@ -1,4 +1,8 @@
 <dl class="dl-horizontal">
+    <dt>Species</dt>
+    <dd>{{ this_trait.dataset.group.species }}</dd>
+    <dt>Group</dt>
+    <dd>{{ this_trait.dataset.group.name }}</dd>
     {% if this_trait.dataset.type == 'ProbeSet' %}
     <dt>Aliases</dt>
     <dd>{{ this_trait.alias_fmt }}</dd>
@@ -33,7 +37,7 @@
     {% if this_trait.dataset.type == 'ProbeSet' %}
     <dd>
         {% if this_trait.symbol != None %}
-        <a href="http://bioinformatics-dev/Getd2g.pl?gene_list={{ this_trait.symbol }}" target="_blank" title="Related descriptive, genomic, clinical, functional and drug-therapy information">
+        <a href="http://www.genotation.org/Getd2g.pl?gene_list={{ this_trait.symbol }}" target="_blank" title="Related descriptive, genomic, clinical, functional and drug-therapy information">
             Genotation
         </a>
         &nbsp;&nbsp;
diff --git a/wqflask/wqflask/templates/show_trait_mapping_tools.html b/wqflask/wqflask/templates/show_trait_mapping_tools.html
index eea9b295..b9ac80bf 100755
--- a/wqflask/wqflask/templates/show_trait_mapping_tools.html
+++ b/wqflask/wqflask/templates/show_trait_mapping_tools.html
@@ -35,7 +35,7 @@
                         <div class="mapping_method_fields form-group">
                             <label for="mapping_permutations" class="col-xs-2 control-label">Permutations</label>
                             <div style="margin-left: 20px;" class="col-xs-4 controls">
-                                <input name="num_pylmm" value="" type="text" class="form-control">
+                                <input name="num_perm_pylmm" value="" type="text" class="form-control">
                             </div>
                         </div>
                         <div id="permutations_alert" class="alert alert-error alert-warning" style="display:none;">