aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZachary Sloan2012-10-12 17:09:02 -0500
committerZachary Sloan2012-10-12 17:09:02 -0500
commit5d8b5c7481429267b418bc27a41dcf58701e1959 (patch)
treeda656c4729f3ac8c85d59c97a9bd6ab449558934
parentf44e0255f19fc581d4ae9f2ad253f01068508d90 (diff)
downloadgenenetwork2-5d8b5c7481429267b418bc27a41dcf58701e1959.tar.gz
Finished getting trait data to export as a download prompt
Sam worked on the new index page model that uses bootstrap
-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)