about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/show_trait/export_trait_data.py29
-rwxr-xr-xwqflask/wqflask/show_trait/show_trait.py3
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait.coffee20
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait.js10
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/docs.css1001
-rw-r--r--wqflask/wqflask/templates/new_index_page.html226
-rw-r--r--wqflask/wqflask/views.py30
7 files changed, 1237 insertions, 82 deletions
diff --git a/wqflask/wqflask/show_trait/export_trait_data.py b/wqflask/wqflask/show_trait/export_trait_data.py
index b1444440..e5f2035d 100644
--- a/wqflask/wqflask/show_trait/export_trait_data.py
+++ b/wqflask/wqflask/show_trait/export_trait_data.py
@@ -1,5 +1,7 @@
 from __future__ import print_function, division
 
+import operator
+
 import simplejson as json
 
 #import xlwt
@@ -9,15 +11,24 @@ def export_sample_table(targs):
     #print("* keys0 args is:", targs[0].keys())
     
     
-    test_export_file = open("/home/zas1024/gene/wqflask/wqflask/show_trait/export_test.txt", "w")
-    
-    for key, item in targs.iteritems():
-        print("[arrow] key is:", key)
+    #test_export_file = open("/home/zas1024/gene/wqflask/wqflask/show_trait/export_test.txt", "w")
+    #
+    #for key, item in targs.iteritems():
+    #    print("[arrow] key is:", key)
     
-    sample_data = json.loads(targs['json_data'])
+    sample_data = json.loads(targs['export_data'])
+    final_sample_data = []
     
-    print("primary_samples is:", pf(sample_data['primary_samples']))
+    for sample_group in ['primary_samples', 'other_samples']:
+        for row in sample_data[sample_group]:
+            sorted_row = dict_to_sorted_list(row)
+            print("sorted_row is:", pf(sorted_row))
+            final_sample_data.append(sorted_row)
+            
+    return final_sample_data
      
-    for key in sample_data['primary_samples'][0]:
-        test_export_file.write(key + ",")
-    test_export_file.write("\n")
\ No newline at end of file
+def dict_to_sorted_list(dictionary):
+    sorted_list = [item for item in dictionary.iteritems()]
+    sorted_list = sorted(sorted_list, key=operator.itemgetter(0))
+    sorted_values = [item[1] for item in sorted_list]
+    return sorted_values    
\ No newline at end of file
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index 942ce336..86a0a992 100755
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -89,7 +89,8 @@ class ShowTrait(templatePage):
                 otherStrainVals = '_',
                 otherStrainVars = '_',
                 extra_attributes = '_',
-                other_extra_attributes = '_'
+                other_extra_attributes = '_',
+                export_data = None
                 )
 
         if fd.enablevariance:
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.coffee b/wqflask/wqflask/static/new/javascript/show_trait.coffee
index a89b29af..c7dc7c88 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait.coffee
+++ b/wqflask/wqflask/static/new/javascript/show_trait.coffee
@@ -295,17 +295,25 @@ $ ->
         samples.other_samples = other_samples
         return samples
 
-
     export_sample_table_data = ->
         sample_data = get_sample_table_data()
         console.log("sample_data is:", sample_data)
         json_sample_data = JSON.stringify(sample_data)
         console.log("json_sample_data is:", json_sample_data)
-        $.ajax(
-            url: '/export_trait_data'
-            type: 'POST'
-            data: "json_data=" + json_sample_data
-        )
+        
+        $('input[name=export_data]').val(json_sample_data)
+        
+        console.log("export_data is", $('input[name=export_data]').val())
+        
+        $('#trait_data_form').attr('action', '/export_trait_csv')
+        console.log("action is:", $('#trait_data_form').attr('action'))
+        $('#trait_data_form').submit()
+         
+        #$.ajax(
+        #    url: '/export_trait_csv'
+        #    type: 'POST'
+        #    data: "json_data=" + json_sample_data
+        #)
 
     $('#export').click(export_sample_table_data)
     
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js
index e4f477f3..5729eb22 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait.js
@@ -339,11 +339,11 @@
       console.log("sample_data is:", sample_data);
       json_sample_data = JSON.stringify(sample_data);
       console.log("json_sample_data is:", json_sample_data);
-      return $.ajax({
-        url: '/export_trait_data',
-        type: 'POST',
-        data: "json_data=" + json_sample_data
-      });
+      $('input[name=export_data]').val(json_sample_data);
+      console.log("export_data is", $('input[name=export_data]').val());
+      $('#trait_data_form').attr('action', '/export_trait_csv');
+      console.log("action is:", $('#trait_data_form').attr('action'));
+      return $('#trait_data_form').submit();
     };
     $('#export').click(export_sample_table_data);
     console.log("before registering block_outliers");
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/docs.css b/wqflask/wqflask/static/packages/bootstrap/css/docs.css
new file mode 100644
index 00000000..a6fff3c3
--- /dev/null
+++ b/wqflask/wqflask/static/packages/bootstrap/css/docs.css
@@ -0,0 +1,1001 @@
+/* Add additional stylesheets below
+-------------------------------------------------- */
+/*
+  Bootstrap's documentation styles
+  Special styles for presenting Bootstrap's documentation and examples
+*/
+
+
+
+/* Body and structure
+-------------------------------------------------- */
+
+body {
+  position: relative;
+  padding-top: 40px;
+}
+
+/* Code in headings */
+h3 code {
+  font-size: 14px;
+  font-weight: normal;
+}
+
+
+
+/* Tweak navbar brand link to be super sleek
+-------------------------------------------------- */
+
+body > .navbar {
+  font-size: 13px;
+}
+
+/* Change the docs' brand */
+body > .navbar .brand {
+  padding-right: 0;
+  padding-left: 0;
+  margin-left: 20px;
+  float: right;
+  font-weight: bold;
+  color: #000;
+  text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.125);
+  -webkit-transition: all .2s linear;
+     -moz-transition: all .2s linear;
+          transition: all .2s linear;
+}
+body > .navbar .brand:hover {
+  text-decoration: none;
+  text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.4);
+}
+
+
+/* Sections
+-------------------------------------------------- */
+
+/* padding for in-page bookmarks and fixed navbar */
+section {
+  padding-top: 30px;
+}
+section > .page-header,
+section > .lead {
+  color: #5a5a5a;
+}
+section > ul li {
+  margin-bottom: 5px;
+}
+
+/* Separators (hr) */
+.bs-docs-separator {
+  margin: 40px 0 39px;
+}
+
+/* Faded out hr */
+hr.soften {
+  height: 1px;
+  margin: 70px 0;
+  background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
+  background-image:    -moz-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
+  background-image:     -ms-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
+  background-image:      -o-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0));
+  border: 0;
+}
+
+
+
+/* Jumbotrons
+-------------------------------------------------- */
+
+/* Base class
+------------------------- */
+.jumbotron {
+  position: relative;
+  padding: 40px 0;
+  color: #fff;
+  text-align: center;
+  text-shadow: 0 1px 3px rgba(0,0,0,.4), 0 0 30px rgba(0,0,0,.075);
+  background: #020031; /* Old browsers */
+  background: -moz-linear-gradient(45deg,  #020031 0%, #6d3353 100%); /* FF3.6+ */
+  background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,#020031), color-stop(100%,#6d3353)); /* Chrome,Safari4+ */
+  background: -webkit-linear-gradient(45deg,  #020031 0%,#6d3353 100%); /* Chrome10+,Safari5.1+ */
+  background: -o-linear-gradient(45deg,  #020031 0%,#6d3353 100%); /* Opera 11.10+ */
+  background: -ms-linear-gradient(45deg,  #020031 0%,#6d3353 100%); /* IE10+ */
+  background: linear-gradient(45deg,  #020031 0%,#6d3353 100%); /* W3C */
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#020031', endColorstr='#6d3353',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
+  -webkit-box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2);
+     -moz-box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2);
+          box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2);
+}
+.jumbotron h1 {
+  font-size: 80px;
+  font-weight: bold;
+  letter-spacing: -1px;
+  line-height: 1;
+}
+.jumbotron p {
+  font-size: 24px;
+  font-weight: 300;
+  line-height: 30px;
+  margin-bottom: 30px;
+}
+
+/* Link styles (used on .masthead-links as well) */
+.jumbotron a {
+  color: #fff;
+  color: rgba(255,255,255,.5);
+  -webkit-transition: all .2s ease-in-out;
+     -moz-transition: all .2s ease-in-out;
+          transition: all .2s ease-in-out;
+}
+.jumbotron a:hover {
+  color: #fff;
+  text-shadow: 0 0 10px rgba(255,255,255,.25);
+}
+
+/* Download button */
+.masthead .btn {
+  padding: 14px 24px;
+  font-size: 24px;
+  font-weight: 200;
+  color: #fff; /* redeclare to override the `.jumbotron a` */
+  border: 0;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25);
+     -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25);
+          box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25);
+  -webkit-transition: none;
+     -moz-transition: none;
+          transition: none;
+}
+.masthead .btn:hover {
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25);
+     -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25);
+          box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25);
+}
+.masthead .btn:active {
+  -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1);
+     -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1);
+          box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1);
+}
+
+
+/* Pattern overlay
+------------------------- */
+.jumbotron .container {
+  position: relative;
+  z-index: 2;
+}
+.jumbotron:after {
+  content: '';
+  display: block;
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  background: url(../img/bs-docs-masthead-pattern.png) repeat center center;
+  opacity: .4;
+}
+
+/* Masthead (docs home)
+------------------------- */
+.masthead {
+  padding: 70px 0 80px;
+  margin-bottom: 0;
+  color: #fff;
+}
+.masthead h1 {
+  font-size: 120px;
+  line-height: 1;
+  letter-spacing: -2px;
+}
+.masthead p {
+  font-size: 40px;
+  font-weight: 200;
+  line-height: 1.25;
+}
+
+/* Textual links in masthead */
+.masthead-links {
+  margin: 0;
+  list-style: none;
+}
+.masthead-links li {
+  display: inline;
+  padding: 0 10px;
+  color: rgba(255,255,255,.25);
+}
+
+/* Social proof buttons from GitHub & Twitter */
+.bs-docs-social {
+  padding: 15px 0;
+  text-align: center;
+  background-color: #f5f5f5;
+  border-top: 1px solid #fff;
+  border-bottom: 1px solid #ddd;
+}
+
+/* Quick links on Home */
+.bs-docs-social-buttons {
+  margin-left: 0;
+  margin-bottom: 0;
+  padding-left: 0;
+  list-style: none;
+}
+.bs-docs-social-buttons li {
+  display: inline-block;
+  padding: 5px 8px;
+  line-height: 1;
+  *display: inline;
+  *zoom: 1;
+}
+
+/* Subhead (other pages)
+------------------------- */
+.subhead {
+  text-align: left;
+  border-bottom: 1px solid #ddd;
+}
+.subhead h1 {
+  font-size: 60px;
+}
+.subhead p {
+  margin-bottom: 20px;
+}
+.subhead .navbar {
+  display: none;
+}
+
+
+
+/* Marketing section of Overview
+-------------------------------------------------- */
+
+.marketing {
+  text-align: center;
+  color: #5a5a5a;
+}
+.marketing h1 {
+  margin: 60px 0 10px;
+  font-size: 60px;
+  font-weight: 200;
+  line-height: 1;
+  letter-spacing: -1px;
+}
+.marketing h2 {
+  font-weight: 200;
+  margin-bottom: 5px;
+}
+.marketing p {
+  font-size: 16px;
+  line-height: 1.5;
+}
+.marketing .marketing-byline {
+  margin-bottom: 40px;
+  font-size: 20px;
+  font-weight: 300;
+  line-height: 25px;
+  color: #999;
+}
+.marketing img {
+  display: block;
+  margin: 0 auto 30px;
+}
+
+
+
+/* Footer
+-------------------------------------------------- */
+
+.footer {
+  padding: 70px 0;
+  margin-top: 70px;
+  border-top: 1px solid #e5e5e5;
+  background-color: #f5f5f5;
+}
+.footer p {
+  margin-bottom: 0;
+  color: #777;
+}
+.footer-links {
+  margin: 10px 0;
+}
+.footer-links li {
+  display: inline;
+  margin-right: 10px;
+}
+
+
+
+/* Special grid styles
+-------------------------------------------------- */
+
+.show-grid {
+  margin-top: 10px;
+  margin-bottom: 20px;
+}
+.show-grid [class*="span"] {
+  background-color: #eee;
+  text-align: center;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+  min-height: 40px;
+  line-height: 40px;
+}
+.show-grid:hover [class*="span"] {
+  background: #ddd;
+}
+.show-grid .show-grid {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+.show-grid .show-grid [class*="span"] {
+  background-color: #ccc;
+}
+
+
+
+/* Mini layout previews
+-------------------------------------------------- */
+.mini-layout {
+  border: 1px solid #ddd;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.075);
+     -moz-box-shadow: 0 1px 2px rgba(0,0,0,.075);
+          box-shadow: 0 1px 2px rgba(0,0,0,.075);
+}
+.mini-layout,
+.mini-layout .mini-layout-body,
+.mini-layout.fluid .mini-layout-sidebar {
+  height: 300px;
+}
+.mini-layout {
+  margin-bottom: 20px;
+  padding: 9px;
+}
+.mini-layout div {
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+.mini-layout .mini-layout-body {
+  background-color: #dceaf4;
+  margin: 0 auto;
+  width: 70%;
+}
+.mini-layout.fluid .mini-layout-sidebar,
+.mini-layout.fluid .mini-layout-header,
+.mini-layout.fluid .mini-layout-body {
+  float: left;
+}
+.mini-layout.fluid .mini-layout-sidebar {
+  background-color: #bbd8e9;
+  width: 20%;
+}
+.mini-layout.fluid .mini-layout-body {
+  width: 77.5%;
+  margin-left: 2.5%;
+}
+
+
+
+/* Download page
+-------------------------------------------------- */
+
+.download .page-header {
+  margin-top: 36px;
+}
+.page-header .toggle-all {
+  margin-top: 5px;
+}
+
+/* Space out h3s when following a section */
+.download h3 {
+  margin-bottom: 5px;
+}
+.download-builder input + h3,
+.download-builder .checkbox + h3 {
+  margin-top: 9px;
+}
+
+/* Fields for variables */
+.download-builder input[type=text] {
+  margin-bottom: 9px;
+  font-family: Menlo, Monaco, "Courier New", monospace;
+  font-size: 12px;
+  color: #d14;
+}
+.download-builder input[type=text]:focus {
+  background-color: #fff;
+}
+
+/* Custom, larger checkbox labels */
+.download .checkbox {
+  padding: 6px 10px 6px 25px;
+  font-size: 13px;
+  line-height: 18px;
+  color: #555;
+  background-color: #f9f9f9;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+  cursor: pointer;
+}
+.download .checkbox:hover {
+  color: #333;
+  background-color: #f5f5f5;
+}
+.download .checkbox small {
+  font-size: 12px;
+  color: #777;
+}
+
+/* Variables section */
+#variables label {
+  margin-bottom: 0;
+}
+
+/* Giant download button */
+.download-btn {
+  margin: 36px 0 108px;
+}
+#download p,
+#download h4 {
+  max-width: 50%;
+  margin: 0 auto;
+  color: #999;
+  text-align: center;
+}
+#download h4 {
+  margin-bottom: 0;
+}
+#download p {
+  margin-bottom: 18px;
+}
+.download-btn .btn {
+  display: block;
+  width: auto;
+  padding: 19px 24px;
+  margin-bottom: 27px;
+  font-size: 30px;
+  line-height: 1;
+  text-align: center;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+}
+
+
+
+/* Misc
+-------------------------------------------------- */
+
+/* Make tables spaced out a bit more */
+h2 + table,
+h3 + table,
+h4 + table,
+h2 + .row {
+  margin-top: 5px;
+}
+
+/* Example sites showcase */
+.example-sites {
+  xmargin-left: 20px;
+}
+.example-sites img {
+  max-width: 100%;
+  margin: 0 auto;
+}
+
+.scrollspy-example {
+  height: 200px;
+  overflow: auto;
+  position: relative;
+}
+
+
+/* Fake the :focus state to demo it */
+.focused {
+  border-color: rgba(82,168,236,.8);
+  -webkit-box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
+     -moz-box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
+          box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
+  outline: 0;
+}
+
+/* For input sizes, make them display block */
+.docs-input-sizes select,
+.docs-input-sizes input[type=text] {
+  display: block;
+  margin-bottom: 9px;
+}
+
+/* Icons
+------------------------- */
+.the-icons {
+  margin-left: 0;
+  list-style: none;
+}
+.the-icons li {
+  float: left;
+  width: 25%;
+  line-height: 25px;
+}
+.the-icons i:hover {
+  background-color: rgba(255,0,0,.25);
+}
+
+/* Example page
+------------------------- */
+.bootstrap-examples p {
+  font-size: 13px;
+  line-height: 18px;
+}
+.bootstrap-examples .thumbnail {
+  margin-bottom: 9px;
+  background-color: #fff;
+}
+
+
+
+/* Bootstrap code examples
+-------------------------------------------------- */
+
+/* Base class */
+.bs-docs-example {
+  position: relative;
+  margin: 15px 0;
+  padding: 39px 19px 14px;
+  *padding-top: 19px;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+
+/* Echo out a label for the example */
+.bs-docs-example:after {
+  content: "Example";
+  position: absolute;
+  top: -1px;
+  left: -1px;
+  padding: 3px 7px;
+  font-size: 12px;
+  font-weight: bold;
+  background-color: #f5f5f5;
+  border: 1px solid #ddd;
+  color: #9da0a4;
+  -webkit-border-radius: 4px 0 4px 0;
+     -moz-border-radius: 4px 0 4px 0;
+          border-radius: 4px 0 4px 0;
+}
+
+/* Remove spacing between an example and it's code */
+.bs-docs-example + .prettyprint {
+  margin-top: -20px;
+  padding-top: 15px;
+}
+
+/* Tweak examples
+------------------------- */
+.bs-docs-example > p:last-child {
+  margin-bottom: 0;
+}
+.bs-docs-example .table,
+.bs-docs-example .progress,
+.bs-docs-example .well,
+.bs-docs-example .alert,
+.bs-docs-example .hero-unit,
+.bs-docs-example .pagination,
+.bs-docs-example .navbar,
+.bs-docs-example > .nav,
+.bs-docs-example blockquote {
+  margin-bottom: 5px;
+}
+.bs-docs-example .pagination {
+  margin-top: 0;
+}
+.bs-navbar-top-example,
+.bs-navbar-bottom-example {
+  z-index: 1;
+  padding: 0;
+  height: 90px;
+  overflow: hidden; /* cut the drop shadows off */
+}
+.bs-navbar-top-example .navbar-fixed-top,
+.bs-navbar-bottom-example .navbar-fixed-bottom {
+  margin-left: 0;
+  margin-right: 0;
+}
+.bs-navbar-top-example {
+  -webkit-border-radius: 0 0 4px 4px;
+     -moz-border-radius: 0 0 4px 4px;
+          border-radius: 0 0 4px 4px;
+}
+.bs-navbar-top-example:after {
+  top: auto;
+  bottom: -1px;
+  -webkit-border-radius: 0 4px 0 4px;
+     -moz-border-radius: 0 4px 0 4px;
+          border-radius: 0 4px 0 4px;
+}
+.bs-navbar-bottom-example {
+  -webkit-border-radius: 4px 4px 0 0;
+     -moz-border-radius: 4px 4px 0 0;
+          border-radius: 4px 4px 0 0;
+}
+.bs-navbar-bottom-example .navbar {
+  margin-bottom: 0;
+}
+form.bs-docs-example {
+  padding-bottom: 19px;
+}
+
+/* Images */
+.bs-docs-example-images img {
+  margin: 10px;
+  display: inline-block;
+}
+
+/* Tooltips */
+.bs-docs-tooltip-examples {
+  text-align: center;
+  margin: 0 0 10px;
+  list-style: none;
+}
+.bs-docs-tooltip-examples li {
+  display: inline;
+  padding: 0 10px;
+}
+
+/* Popovers */
+.bs-docs-example-popover {
+  padding-bottom: 24px;
+  background-color: #f9f9f9;
+}
+.bs-docs-example-popover .popover {
+  position: relative;
+  display: block;
+  float: left;
+  width: 260px;
+  margin: 20px;
+}
+
+
+
+/* Responsive docs
+-------------------------------------------------- */
+
+/* Utility classes table
+------------------------- */
+.responsive-utilities th small {
+  display: block;
+  font-weight: normal;
+  color: #999;
+}
+.responsive-utilities tbody th {
+  font-weight: normal;
+}
+.responsive-utilities td {
+  text-align: center;
+}
+.responsive-utilities td.is-visible {
+  color: #468847;
+  background-color: #dff0d8 !important;
+}
+.responsive-utilities td.is-hidden {
+  color: #ccc;
+  background-color: #f9f9f9 !important;
+}
+
+/* Responsive tests
+------------------------- */
+.responsive-utilities-test {
+  margin-top: 5px;
+  margin-left: 0;
+  list-style: none;
+  overflow: hidden; /* clear floats */
+}
+.responsive-utilities-test li {
+  position: relative;
+  float: left;
+  width: 25%;
+  height: 43px;
+  font-size: 14px;
+  font-weight: bold;
+  line-height: 43px;
+  color: #999;
+  text-align: center;
+  border: 1px solid #ddd;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+.responsive-utilities-test li + li {
+  margin-left: 10px;
+}
+.responsive-utilities-test span {
+  position: absolute;
+  top:    -1px;
+  left:   -1px;
+  right:  -1px;
+  bottom: -1px;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+.responsive-utilities-test span {
+  color: #468847;
+  background-color: #dff0d8;
+  border: 1px solid #d6e9c6;
+}
+
+
+
+/* Sidenav for Docs
+-------------------------------------------------- */
+
+.bs-docs-sidenav {
+  width: 228px;
+  margin: 30px 0 0;
+  padding: 0;
+  background-color: #fff;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+  -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.065);
+     -moz-box-shadow: 0 1px 4px rgba(0,0,0,.065);
+          box-shadow: 0 1px 4px rgba(0,0,0,.065);
+}
+.bs-docs-sidenav > li > a {
+  display: block;
+  *width: 190px;
+  margin: 0 0 -1px;
+  padding: 8px 14px;
+  border: 1px solid #e5e5e5;
+}
+.bs-docs-sidenav > li:first-child > a {
+  -webkit-border-radius: 6px 6px 0 0;
+     -moz-border-radius: 6px 6px 0 0;
+          border-radius: 6px 6px 0 0;
+}
+.bs-docs-sidenav > li:last-child > a {
+  -webkit-border-radius: 0 0 6px 6px;
+     -moz-border-radius: 0 0 6px 6px;
+          border-radius: 0 0 6px 6px;
+}
+.bs-docs-sidenav > .active > a {
+  position: relative;
+  z-index: 2;
+  padding: 9px 15px;
+  border: 0;
+  text-shadow: 0 1px 0 rgba(0,0,0,.15);
+  -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1);
+     -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1);
+          box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1);
+}
+/* Chevrons */
+.bs-docs-sidenav .icon-chevron-right {
+  float: right;
+  margin-top: 2px;
+  margin-right: -6px;
+  opacity: .25;
+}
+.bs-docs-sidenav > li > a:hover {
+  background-color: #f5f5f5;
+}
+.bs-docs-sidenav a:hover .icon-chevron-right {
+  opacity: .5;
+}
+.bs-docs-sidenav .active .icon-chevron-right,
+.bs-docs-sidenav .active a:hover .icon-chevron-right {
+  background-image: url(../img/glyphicons-halflings-white.png);
+  opacity: 1;
+}
+.bs-docs-sidenav.affix {
+  top: 40px;
+}
+.bs-docs-sidenav.affix-bottom {
+  position: absolute;
+  top: auto;
+  bottom: 270px;
+}
+
+
+
+
+/* Responsive
+-------------------------------------------------- */
+
+/* Desktop large
+------------------------- */
+@media (min-width: 1200px) {
+  .bs-docs-container {
+    max-width: 970px;
+  }
+  .bs-docs-sidenav {
+    width: 258px;
+  }
+}
+
+/* Desktop
+------------------------- */
+@media (max-width: 980px) {
+  /* Unfloat brand */
+  body > .navbar-fixed-top .brand {
+    float: left;
+    margin-left: 0;
+    padding-left: 10px;
+    padding-right: 10px;
+  }
+
+  /* Inline-block quick links for more spacing */
+  .quick-links li {
+    display: inline-block;
+    margin: 5px;
+  }
+
+  /* When affixed, space properly */
+  .bs-docs-sidenav {
+    top: 0;
+    margin-top: 30px;
+    margin-right: 0;
+  }
+}
+
+/* Tablet to desktop
+------------------------- */
+@media (min-width: 768px) and (max-width: 980px) {
+  /* Remove any padding from the body */
+  body {
+    padding-top: 0;
+  }
+  /* Widen masthead and social buttons to fill body padding */
+  .jumbotron {
+    margin-top: -20px; /* Offset bottom margin on .navbar */
+  }
+  /* Adjust sidenav width */
+  .bs-docs-sidenav {
+    width: 166px;
+    margin-top: 20px;
+  }
+  .bs-docs-sidenav.affix {
+    top: 0;
+  }
+}
+
+/* Tablet
+------------------------- */
+@media (max-width: 767px) {
+  /* Remove any padding from the body */
+  body {
+    padding-top: 0;
+  }
+
+  /* Widen masthead and social buttons to fill body padding */
+  .jumbotron {
+    padding: 40px 20px;
+    margin-top:   -20px; /* Offset bottom margin on .navbar */
+    margin-right: -20px;
+    margin-left:  -20px;
+  }
+  .masthead h1 {
+    font-size: 90px;
+  }
+  .masthead p,
+  .masthead .btn {
+    font-size: 24px;
+  }
+  .marketing .span4 {
+    margin-bottom: 40px;
+  }
+  .bs-docs-social {
+    margin: 0 -20px;
+  }
+
+  /* Space out the show-grid examples */
+  .show-grid [class*="span"] {
+    margin-bottom: 5px;
+  }
+
+  /* Sidenav */
+  .bs-docs-sidenav {
+    width: auto;
+    margin-bottom: 20px;
+  }
+  .bs-docs-sidenav.affix {
+    position: static;
+    width: auto;
+    top: 0;
+  }
+
+  /* Unfloat the back to top link in footer */
+  .footer {
+    margin-left: -20px;
+    margin-right: -20px;
+    padding-left: 20px;
+    padding-right: 20px;
+  }
+  .footer p {
+    margin-bottom: 9px;
+  }
+}
+
+/* Landscape phones
+------------------------- */
+@media (max-width: 480px) {
+  /* Remove padding above jumbotron */
+  body {
+    padding-top: 0;
+  }
+
+  /* Change up some type stuff */
+  h2 small {
+    display: block;
+  }
+
+  /* Downsize the jumbotrons */
+  .jumbotron h1 {
+    font-size: 60px;
+  }
+  .jumbotron p,
+  .jumbotron .btn {
+    font-size: 20px;
+  }
+  .jumbotron .btn {
+    display: block;
+    margin: 0 auto;
+  }
+
+  /* center align subhead text like the masthead */
+  .subhead h1,
+  .subhead p {
+    text-align: center;
+  }
+
+  /* Marketing on home */
+  .marketing h1 {
+    font-size: 40px;
+  }
+
+  /* center example sites */
+  .example-sites {
+    margin-left: 0;
+  }
+  .example-sites > li {
+    float: none;
+    display: block;
+    max-width: 280px;
+    margin: 0 auto 18px;
+    text-align: center;
+  }
+  .example-sites .thumbnail > img {
+    max-width: 270px;
+  }
+
+  /* Do our best to make tables work in narrow viewports */
+  table code {
+    white-space: normal;
+    word-wrap: break-word;
+    word-break: break-all;
+  }
+
+  /* Modal example */
+  .modal-example .modal {
+    position: relative;
+    top: auto;
+    right: auto;
+    bottom: auto;
+    left: auto;
+  }
+
+  /* Unfloat the back to top in footer to prevent odd text wrapping */
+  .footer .pull-right {
+    float: none;
+  }
+}
diff --git a/wqflask/wqflask/templates/new_index_page.html b/wqflask/wqflask/templates/new_index_page.html
index 85c63b3f..b415daee 100644
--- a/wqflask/wqflask/templates/new_index_page.html
+++ b/wqflask/wqflask/templates/new_index_page.html
@@ -1,91 +1,199 @@
+<!DOCTYPE html>
+<html lang="en">
 <head>
 
     <title>GeneNetwork</title>
     <link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/bootstrap.min.css" />
+    <link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/bootstrap-responsive.min.css" />
+    <link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/docs.css" />
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
     <script src="/static/packages/bootstrap/js/bootstrap.min.js"></script>
 </head>
 
 <body>
-    <div class="container">
+    <div class="hero-unit">
+        <h1>Gene Network</h1>
+        <p class="lead">Open Source Bioinformatics Website For Systems Genetics</p>
+    </div>
 
-        <div class="hero-unit">
-            <h1>Gene Network</h1>
-        </div>
-        <div>
-            <form method="get" action="/search"  name="SEARCHFORM">
-                <fieldset>
-                    <legend>Select and Search</legend>
-                    <label for="species">Species:</label>
-                        <select name="species" size="1" id="species" onchange="fillOptions('species');">
-                        </select>
-
-                    <div class="input-append">
-                        <label for="cross">Group: </label>
-                            <select name="cross" id="cross" onchange="fillOptions('cross');">
-                              </select>
-                            <i class="icon-question-sign"></i>
-                            <!--<input type="button" class="btn" value="Info" onclick=-->
-                            <!--  "javascript:crossinfo();" />-->
+
+    <div class="container">
+        <div class="row">
+            <div class="span3 bs-docs-sidebar">
+              <ul class="nav nav-list bs-docs-sidenav">
+                <li><a href="#search_section"><i class="icon-chevron-right"></i> Search</a></li>
+                <li><a href="#getting_started_section"><i class="icon-chevron-right"></i> Getting Started</a></li>
+                <li><a href="#advanced_section"><i class="icon-chevron-right"></i> Advanced Commands</a></li>
+                <li><a href="#html-template"><i class="icon-chevron-right"></i> How To Use</a></li>
+                <li><a href="#examples"><i class="icon-chevron-right"></i> History</a></li>
+                <li><a href="#what-next"><i class="icon-chevron-right"></i> Mirrors and Other Sites</a></li>
+              </ul>
+            </div>
+
+            <div class="span9">
+                <section id="search_section">
+                    <div class="page-header">
+                        <h1>Select and Search</h1>
                     </div>
+                    <form method="get" action="/search"  name="SEARCHFORM">
+                        <fieldset>
+                            <!--<legend>Select and Search</legend>-->
+                            <label for="species">Species:</label>
+                                <select name="species" size="1" id="species" onchange="fillOptions('species');">
+                                </select>
+
+                            <div class="input-append">
+                                <label for="cross">Group: </label>
+                                    <select name="cross" id="cross" onchange="fillOptions('cross');">
+                                      </select>
+                                    <!--<i class="icon-question-sign"></i>-->
+                                    <input type="button" class="btn" value="Info" onclick=
+                                      "javascript:crossinfo();" />
+                            </div>
+
+
+                            <label for="type">Type:</label>
+                                <select name="tissue"  id="tissue" onchange=
+                                "fillOptions('tissue');"></select>
+
+
+                            <div class="input-append">
+                                <label for="database">Database:</label>
+                                    <select name="database"  id="database">
+                                      </select> <input type="button" class="btn" value="Info" name="info_database" />
+                            </div>
+                            <!--  USER HELP   -->
+
+
+                                <!--<p >Databases marked with <b>**</b>-->
+                                <!--      suffix are not public yet.<br>-->
+                                <!--     Access requires <a href="/account.html" target=-->
+                                <!--      "_blank" class="fs14">user login</a>.</p>-->
 
+                                <!--  GET ANY  SEARCH -->
 
-                    <label for="type">Type:</label>
-                        <select name="tissue"  id="tissue" onchange=
-                        "fillOptions('tissue');"></select>
+                            <label for="tfor">Search:</label>
 
+                            <input class="search-query"
+                                id="tfor" name="ORkeyword"
+                                type="text" maxlength="500">
 
-                    <div class="input-append">
-                        <label for="database">Database:</label>
-                            <select name="database"  id="database">
-                              </select> <input type="button" class="btn" value="Info" name="info_database" />
+                            <!--  GET ANY HELP   -->
+
+                            </p>Enter terms, genes, ID numbers in the
+                                  <b>Search</b> field.<br>
+                                  Use <b>*</b> or <b>?</b> wildcards (Cyp*a?,
+                                  synap*).<br>
+                                  Use <b>quotes</b> for terms such as <i>"tyrosine
+                                  kinase"</i>.</p>
+
+                                <!--  SEARCH, MAKE DEFAULT, ADVANCED SEARCH -->
+
+
+                               <input id="btsearch" type="submit"
+                                class="btn btn-primary" value="Search">
+
+                                <input type=
+                                "button" class="btn" value="Make Default" onclick=
+                                "setDefault(this.form);">
+
+                                <input type="button" class=
+                                    "btn" value="Advanced Search" onclick=
+                                    "javascript:window.open('/index3.html', '_self');">
+
+                                <input type="hidden" name="FormID" value="searchResult"> <input type=
+                                "hidden" name="RISet" value="BXD">
+                        </fieldset>
+                    </form>
+                </section>
+
+                <section id="getting_started_section">
+                    <div class="page-header">
+                        <h1>Getting Started</h1>
                     </div>
-                    <!--  USER HELP   -->
 
+                <ol style="font-size:12px;font-family:verdana;color:black">
+                  <li>Select <b>Species</b> (or select All)</li>
+
+                  <li>Select <b>Group</b> (a specific sample)</li>
 
-                        <!--<p >Databases marked with <b>**</b>-->
-                        <!--      suffix are not public yet.<br>-->
-                        <!--     Access requires <a href="/account.html" target=-->
-                        <!--      "_blank" class="fs14">user login</a>.</p>-->
+                  <li>Select <b>Type</b> of data:
 
-                        <!--  GET ANY  SEARCH -->
+                    <ul>
+                      <li>Phenotype (traits)</li>
 
-                    <label for="tfor">Search:</label>
+                      <li>Genotype (markers)</li>
 
-                    <input class="search-query"
-                        id="tfor" name="ORkeyword"
-                        type="text" maxlength="500">
+                      <li>Expression (mRNAs)</li>
+                    </ul>
+                  </li>
 
-                    <!--  GET ANY HELP   -->
+                  <li>Select a <b>Database</b></li>
 
-                    </p>Enter terms, genes, ID numbers in the
-                          <b>Search</b> field.<br>
-                          Use <b>*</b> or <b>?</b> wildcards (Cyp*a?,
-                          synap*).<br>
-                          Use <b>quotes</b> for terms such as <i>"tyrosine
-                          kinase"</i>.</p>
+                  <li>Enter terms in the search field: words,
+                  genes, ID numbers, probes, advanced search commands</li>
 
-                        <!--  SEARCH, MAKE DEFAULT, ADVANCED SEARCH -->
+                  <li>Click on the <b>Search</b> button</li>
 
+                  <li>Optional: Use the <b>Make Default</b> button to save your preferences</li>
+                </ol>
 
-                       <input id="btsearch" type="submit"
-                        class="btn btn-primary" value="Search">
+                <h3>For more information, read our <a href="http://www.genenetwork.org/index4.html" target="_blank">User's Guide</a>.</h3>
 
-                        <input type=
-                        "button" class="btn" value="Make Default" onclick=
-                        "setDefault(this.form);">
+                </section>
 
-                        <input type="button" class=
-                            "btn" value="Advanced Search" onclick=
-                            "javascript:window.open('/index3.html', '_self');">
 
-                        <input type="hidden" name="FormID" value="searchResult"> <input type=
-                        "hidden" name="RISet" value="BXD">
-                </fieldset>
-            </form>
+                <section id="advanced_section">
+                    <div class="page-header">
+                        <h1>Advanced Commands</h1>
+                    </div>
+
+                    <p>You can also do more advanced
+                      searches. Copy these examples
+                      into the search field:</p>
+
+                      <ul>
+                        <li><b>POSITION=(chr1 25 30)</b> finds genes, markers, or transcripts on
+                        chromosome 1 between 25 and 30 Mb.</li>
+
+                        <li><b>MEAN=(15 16) LRS=(23 46)</b> in the <b>Combined</b> field finds
+                        highly expressed genes (15 to 16 log2 units) AND with peak <a href=
+                        "http://www.genenetwork.org/glossary.html#L" target="_blank">LRS</a>
+                        linkage between 23 and 46.</li>
+
+                        <li><b>RIF=mitochondrial</b> searches RNA databases for <a href=
+                        "http://www.ncbi.nlm.nih.gov/projects/GeneRIF/GeneRIFhelp.html" target="_blank">
+                        GeneRIF</a> links.</li>
+
+                        <li><b>WIKI=nicotine</b> searches <a href=
+                        "http://www.genenetwork.org/webqtl/main.py?FormID=geneWiki" target="_blank">
+                        GeneWiki</a> for genes that you or other users have annotated
+                        with the word <i>nicotine</i>.</li>
+
+                        <li><b>GO:0045202</b> searches for synapse-associated genes listed in the
+                        <a href="http://www.godatabase.org/cgi-bin/amigo/go.cgi" target="_blank">
+                            Gene Ontology
+                        </a>.</li>
+
+                        <li><b>GO:0045202 LRS=(9 99 Chr4 122 155) cisLRS=(9 999 10)</b>
+                        finds synapse-associated genes with <a href=
+                        "http://www.genenetwork.org/glossary.html#E" target="_blank">
+                        cis eQTL</a> on Chr 4 from 122 and 155 Mb with LRS scores
+                        between 9 and 999.</li>
+
+                        <li><b>RIF=diabetes LRS=(9 999 Chr2 100 105) transLRS=(9 999 10)</b>
+                        finds diabetes-associated transcripts with peak <a href=
+                        "http://www.genenetwork.org/glossary.html#E" target="_blank">
+                        trans eQTLs</a> on Chr 2 between 100 and 105 Mb with LRS
+                        scores between 9 and 999.</li>
+                      </ul>
+                </section>
+
+            </div>
         </div>
     </div>
-                <!--<script src="/javascript/selectDatasetMenu.js"-->
-                <!--type="text/javascript">-->
-                <!--</script>-->
+                    <!--<script src="/javascript/selectDatasetMenu.js"-->
+                    <!--type="text/javascript">-->
+                    <!--</script>-->
 </body>
+</html>
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index 7210a1de..94768c9f 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -7,7 +7,7 @@ import flask
 
 from wqflask import app
 
-from flask import render_template, request
+from flask import render_template, request, make_response, Response
 
 from wqflask import search_results
 from wqflask.show_trait import show_trait
@@ -87,11 +87,37 @@ def show_trait_page():
     print("show_trait template_vars:", pf(template_vars.__dict__))
     return render_template("show_trait.html", **template_vars.__dict__)
 
+
+@app.route('/export_trait_csv', methods=('POST',))
+def export_trait_csv():
+    """CSV file consisting of the sample data from the trait data and analysis page"""
+    print("In export_trait_csv")
+    print("request.form:", request.form)
+    sample_data = export_trait_data.export_sample_table(request.form)
+    
+    print("sample_data - type: %s -- size: %s" % (type(sample_data), len(sample_data)))
+
+    def generate(sample_data):
+        for row in sample_data:
+            print(','.join(row) + '\n')
+            yield ','.join(row) + '\n'
+
+    print("generated data:", pf(generate(sample_data)))
+     
+    #print(pf(Response(generate(sample_data),
+    #                mimetype='text/plain',
+    #                headers={"Content-Disposition":
+    #                             "attachment;filename=test.csv"}))) 
+                    
+    return Response(generate(sample_data),
+                    mimetype='text/csv',
+                    headers={"Content-Disposition":"attachment;filename=test.csv"})
+
+
 @app.route("/export_trait_data", methods=('POST',))
 def export_sample_table():
     """CSV file consisting of the sample data from the trait data and analysis page"""
     print("In export_sample_table")
-    print("request.args:", request.args)
     print("request.form:", request.form)
     template_vars = export_trait_data.export_sample_table(request.form)