aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--uploader/authorisation.py2
-rw-r--r--uploader/oauth2/views.py2
-rw-r--r--uploader/static/css/styles.css200
-rw-r--r--uploader/templates/base.html87
-rw-r--r--uploader/templates/index.html134
-rw-r--r--uploader/templates/login.html7
-rw-r--r--uploader/templates/phenotypes/view-dataset.html2
-rw-r--r--uploader/templates/platforms/list-platforms.html2
-rw-r--r--uploader/templates/populations/list-populations.html2
-rw-r--r--uploader/templates/populations/macro-select-population.html41
-rw-r--r--uploader/templates/samples/list-samples.html2
-rw-r--r--uploader/templates/species/list-species.html2
-rw-r--r--uploader/templates/species/macro-select-species.html42
13 files changed, 255 insertions, 270 deletions
diff --git a/uploader/authorisation.py b/uploader/authorisation.py
index bd3454c..a283980 100644
--- a/uploader/authorisation.py
+++ b/uploader/authorisation.py
@@ -18,7 +18,7 @@ def require_login(function):
"""Check that the user is logged in and their token is valid."""
def __clear_session__(_no_token):
session.clear_session_info()
- flash("You need to be logged in.", "alert-danger big-alert")
+ flash("You need to be signed in.", "alert-danger big-alert")
return redirect("/")
return session.user_token().either(
diff --git a/uploader/oauth2/views.py b/uploader/oauth2/views.py
index 61037f3..a7211cb 100644
--- a/uploader/oauth2/views.py
+++ b/uploader/oauth2/views.py
@@ -116,7 +116,7 @@ def logout():
_user = session_info["user"]
_user_str = f"{_user['name']} ({_user['email']})"
session.clear_session_info()
- flash("Successfully logged out.", "alert-success")
+ flash("Successfully signed out.", "alert-success")
return redirect("/")
if user_logged_in():
diff --git a/uploader/static/css/styles.css b/uploader/static/css/styles.css
index ef8725e..6f26621 100644
--- a/uploader/static/css/styles.css
+++ b/uploader/static/css/styles.css
@@ -1,137 +1,137 @@
+* {
+ box-sizing: border-box;
+}
+
body {
margin: 0.7em;
- box-sizing: border-box;
display: grid;
- grid-template-columns: 1fr 6fr;
- grid-template-rows: 4em 100%;
+ grid-template-columns: 1fr 9fr;
grid-gap: 20px;
- font-family: Georgia, Garamond, serif;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-style: normal;
+ font-size: 20px;
}
#header {
- grid-column: 1/3;
- width: 100%;
- /* background: cyan; */
- padding-top: 0.5em;
- border-radius: 0.5em;
+ /* Place it in the parent element */
+ grid-column-start: 1;
+ grid-column-end: 3;
+
+ /* Define layout for the children elements */
+ display: grid;
+ grid-template-columns: 8fr 2fr;
+ /* Content styling */
background-color: #336699;
- border-color: #080808;
color: #FFFFFF;
- background-image: none;
+ border-radius: 3px;
+ min-height: 30px;
}
-#header .header {
- font-size: 1.7em;
- display: inline-block;
- text-align: start;
-}
+#header #header-text {
+ /* Place it in the parent element */
+ grid-column-start: 1;
+ grid-column-end: 2;
-#header .header-nav {
- display: inline-block;
- color: #FFFFFF;
+ /* Content styling */
+ padding-left: 1em;
}
-#header .header-nav li {
- border-width: 1px;
- border-color: #FFFFFF;
- vertical-align: middle;
- margin: 0.01em;
- border-style: solid;
- border-width: 2px;
- border-radius: 0.5em;
- text-align: center;
+#header #header-nav {
+ /* Place it in the parent element */
+ grid-column-start: 2;
+ grid-column-end: 3;
}
-#header .header-nav a {
+#header #header-nav .nav li a {
+ /* Content styling */
color: #FFFFFF;
- text-decoration: none;
+ background: #4477AA;
+ border: solid 5px #336699;
+ border-radius: 5px;
+ font-size: 0.7em;
+ text-align: center;
+ padding: 1px 7px;
}
#nav-sidebar {
- grid-column: 1/2;
- /* background: #e5e5ff; */
- padding-top: 0.5em;
- border-radius: 0.5em;
- font-size: 1.2em;
+ /* Place it in the parent element */
+ grid-column-start: 1;
+ grid-column-end: 2;
}
-#main {
- grid-column: 2/3;
- width: 100%;
- /* background: gray; */
+#nav-sidebar .nav li a:hover {
border-radius: 0.5em;
}
-.pagetitle {
- line-height: 1;
- padding-top: 0.2em;
- /* background: pink; */
+#nav-sidebar .nav .activemenu {
+ border-style: solid;
border-radius: 0.5em;
- /* background-color: #6699CC; */
- /* background-color: #77AADD; */
- background-color: #88BBEE;
+ border-color: #AAAAAA;
+ background-color: #EFEFEF;
}
-.pagetitle .title {
- text-align: start;
- text-transform: capitalize;
- padding-left: 0.5em;
- font-size: 1.7em;
-}
+#main {
+ /* Place it in the parent element */
+ grid-column-start: 2;
+ grid-column-end: 3;
-.pagetitle .breadcrumb {
- background: none;
+ /* Define layout for the children elements */
+ display: grid;
+ grid-template-columns: 1fr;
+ grid-template-rows: 4em 100%;
+ grid-gap: 1em;
}
-.pagetitle .breadcrumb .active a {
- color: #333333;
-}
+#main #pagetitle {
+ /* Place it in the parent element */
+ grid-column-start: 1;
+ grid-column-end: 3;
-.pagetitle .breadcrumb a {
- color: #666666;
+ /* Content-styling */
+ border-radius: 3px;
+ background-color: #88BBEE;
}
-.main-content {
- font-size: 1.275em;
+#main #pagetitle .title {
+ font-size: 1.4em;
+ text-transform: capitalize;
+ padding-left: 0.5em;
}
-.breadcrumb {
- text-transform: capitalize;
+#main #all-content {
+ /* Place it in the parent element */
+ grid-column-start: 1;
+ grid-column-end: 3;
+
+ /* Define layout for the children elements */
+ display: grid;
+ grid-template-columns: 7fr 3fr; /* For a maximum screen width of 1366 pixels */
+ grid-gap: 1.5em;
}
-dd {
- margin-left: 3em;
- font-size: 0.88em;
- padding-bottom: 1em;
+#main #all-content .row {
+ margin: 0 2px;
}
-input[type="submit"], .btn {
- text-transform: capitalize;
+#main #all-content #main-content {
+ background: #FFFFFF;
+ max-width: 950px;
}
-.card {
- margin-top: 0.3em;
- border-width: 1px;
- border-style: solid;
- border-radius: 0.3em;
- border-color: #AAAAAA;
- padding: 0.5em;
+#pagetitle .breadcrumb {
+ background: none;
+ text-transform: capitalize;
+ font-size: 0.75em;
}
-.activemenu {
- border-style: solid;
- border-radius: 0.5em;
- border-color: #AAAAAA;
- background-color: #EFEFEF;
+#pagetitle .breadcrumb .active a {
+ color: #333333;
}
-.danger {
- color: #A94442;
- border-color: #DCA7A7;
- background-color: #F2DEDE;
+#pagetitle .breadcrumb a {
+ color: #666666;
}
.heading {
@@ -144,33 +144,3 @@ input[type="submit"], .btn {
border-bottom: solid #88BBEE;
text-transform: capitalize;
}
-
-form {
- margin-top: 0.3em;
- background: #E5E5FF;
- padding: 0.5em;
- border-radius:0.5em;
-}
-
-form .form-control {
- background-color: #EAEAFF;
-}
-
-.table-form-table thead {
- background: #E5E5FF;
-}
-
-
-.sidebar-content .card .card-title {
- font-size: 1.5em;
-}
-
-.sidebar-content .card-text table tbody td:nth-child(1) {
- font-weight: bolder;
-}
-
-.big-alert {
- line-height: 1.5em;
- padding: 0.5em 0 0.5em 3em;
- margin-top: 0.2em;
-}
diff --git a/uploader/templates/base.html b/uploader/templates/base.html
index c124b13..90652bf 100644
--- a/uploader/templates/base.html
+++ b/uploader/templates/base.html
@@ -8,7 +8,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
{%block extrameta%}{%endblock%}
- <title>GN Uploader: {%block title%}{%endblock%}</title>
+ <title>Data Upload and Quality Control: {%block title%}{%endblock%}</title>
<link rel="stylesheet" type="text/css"
href="{{url_for('base.bootstrap',
@@ -23,25 +23,26 @@
</head>
<body>
- <header id="header" class="container-fluid">
- <div class="row">
- <span class="header col-lg-9">GeneNetwork Data Quality Control and Upload</span>
- <nav class="header-nav col-lg-3">
- <ul class="nav justify-content-end">
- <li>
- {%if user_logged_in()%}
- <a href="{{url_for('oauth2.logout')}}"
- title="Log out of the system">{{user_email()}} &mdash; Log Out</a>
- {%else%}
- <a href="{{authserver_authorise_uri()}}"
- title="Log in to the system">Log In</a>
- {%endif%}
- </li>
- </ul>
- </nav>
+ <header id="header">
+ <span id="header-text">GeneNetwork</span>
+ <nav id="header-nav">
+ <ul class="nav justify-content-end">
+ <li>
+ {%if user_logged_in()%}
+ <a href="{{url_for('oauth2.logout')}}"
+ title="Log out of the system">
+ <span class="glyphicon glyphicon-user"></span>
+ Sign Out</a>
+ {%else%}
+ <a href="{{authserver_authorise_uri()}}"
+ title="Log in to the system">Sign In</a>
+ {%endif%}
+ </li>
+ </ul>
+ </nav>
</header>
- <aside id="nav-sidebar" class="container-fluid">
+ <aside id="nav-sidebar">
<ul class="nav flex-column">
<li {%if activemenu=="home"%}class="activemenu"{%endif%}>
<a href="/" >Home</a></li>
@@ -70,6 +71,7 @@
<li {%if activemenu=="phenotypes"%}class="activemenu"{%endif%}>
<a href="{{url_for('species.populations.phenotypes.index')}}"
title="Upload phenotype data.">Phenotype Data</a></li>
+ <!--
<li {%if activemenu=="expression-data"%}class="activemenu"{%endif%}>
<a href="{{url_for('species.populations.expression-data.index')}}"
title="Upload expression data."
@@ -87,35 +89,36 @@
class="not-implemented"
title="View and manage the backgroud jobs you have running">
Background Jobs</a></li>
+ -->
</ul>
</aside>
- <main id="main" class="main container-fluid">
+ <main id="main" class="main">
- <div class="pagetitle row">
- <span class="title">GN Uploader: {%block pagetitle%}{%endblock%}</span>
- <nav>
- <ol class="breadcrumb">
- <li {%if activelink is not defined or activelink=="home"%}
- class="breadcrumb-item active"
- {%else%}
- class="breadcrumb-item"
- {%endif%}>
- <a href="{{url_for('base.index')}}">Home</a>
- </li>
- {%block lvl1_breadcrumbs%}{%endblock%}
- </ol>
- </nav>
+ <div id="pagetitle" class="pagetitle">
+ <span class="title">Data Upload and Quality Control: {%block pagetitle%}{%endblock%}</span>
+ <!--
+ <nav>
+ <ol class="breadcrumb">
+ <li {%if activelink is not defined or activelink=="home"%}
+ class="breadcrumb-item active"
+ {%else%}
+ class="breadcrumb-item"
+ {%endif%}>
+ <a href="{{url_for('base.index')}}">Home</a>
+ </li>
+ {%block lvl1_breadcrumbs%}{%endblock%}
+ </ol>
+ </nav>
+ -->
</div>
- <div class="row">
- <div class="container-fluid">
- <div class="col-md-8 main-content">
- {%block contents%}{%endblock%}
- </div>
- <div class="sidebar-content col-md-4">
- {%block sidebarcontents%}{%endblock%}
- </div>
+ <div id="all-content">
+ <div id="main-content">
+ {%block contents%}{%endblock%}
+ </div>
+ <div id="sidebar-content">
+ {%block sidebarcontents%}{%endblock%}
</div>
</div>
</main>
@@ -127,7 +130,5 @@
filename='js/bootstrap.min.js')}}"></script>
<script type="text/javascript" src="/static/js/misc.js"></script>
{%block javascript%}{%endblock%}
-
</body>
-
</html>
diff --git a/uploader/templates/index.html b/uploader/templates/index.html
index d6f57eb..aa1414e 100644
--- a/uploader/templates/index.html
+++ b/uploader/templates/index.html
@@ -10,90 +10,98 @@
<div class="row">
{{flash_all_messages()}}
<div class="explainer">
- <p>Welcome to the <strong>GeneNetwork Data Quality Control and Upload System</strong>. This system is provided to help in uploading your data onto GeneNetwork where you can do analysis on it.</p>
+ <p>Welcome to the <strong>GeneNetwork Data Upload and Quality Control
+ System</strong>.</p>
+ <p>This tool helps you prepare and upload research data to GeneNetwork for
+ analysis.</p>
- <p>The sections below provide an overview of what features the menu items on
- the left provide to you. Please peruse the information to get a good
- big-picture understanding of what the system provides you and how to get
- the most out of it.</p>
+ <h2 class="heading">Getting Started</h2>
+ <p>The sections below explain the features of the system. Review this guide
+ to learn how to use the system.</p>
{%block extrapageinfo%}{%endblock%}
- <h2>Species</h2>
-
- <p>The GeneNetwork service provides datasets and tools for doing genetic
- studies &mdash; from
- <a href="{{gn2server_intro}}"
- target="_blank"
- title="GeneNetwork introduction — opens in a new tab.">
- its introduction</a>:
-
- <blockquote class="blockquote">
- <p>GeneNetwork is a group of linked data sets and tools used to study
- complex networks of genes, molecules, and higher order gene function
- and phenotypes. &hellip;</p>
- </blockquote>
- </p>
-
- <p>With this in mind, it follows that the data in the system is centered
- aroud a variety of species. The <strong>species section</strong> will
- list the currently available species in the system, and give you the
- ability to add new ones, if the one you want to work on does not currently
- exist on GeneNetwork</p>
-
- <h2>Populations</h2>
-
- <p>Your studies will probably focus on a particular subset of the entire
- species you are interested in &ndash; your population.</p>
- <p>Populations are a way to organise the species data so as to link data to
- specific know populations for a particular species, e.g. The BXD
- population of mice (Mus musculus)</p>
- <p>In older GeneNetwork documentation, you might run into the term
- <em>InbredSet</em>. Should you run into it, it is a term that we've
- deprecated that essentially just means the population.</p>
-
- <h2>Samples</h2>
-
- <p>These are the samples or individuals (sometimes cases) that were involved
- in the experiment, and from whom the data was derived.</p>
-
- <h2>Genotype Data</h2>
-
- <p>This section will allow you to view and upload the genetic markers for
- your species, and the genotype encodings used for your particular
- population.</p>
- <p>While, technically, genetic markers relate to the species in general, and
- not to a particular population, the data (allele information) itself
- relates to the particular population it was generated from &ndash;
- specifically, to the actual individuals used in the experiment.</p>
- <p>This is the reason why the genotype data information comes under the
- population, and will check for the prior existence of the related
- samples/individuals before attempting an upload of your data.</p>
-
- <h2>Expression Data</h2>
+ <h3 class="subheading">Species</h3>
- <p class="text-danger">
- <span class="glyphicon glyphicon-exclamation-sign"></span>
- <strong>TODO</strong>: Document this &hellip;</p>
+ <p>GeneNetwork supports genetic studies across multiple species (e.g. mice
+ [Mus musculus], human [homo sapiens], rats [Rattus norvegicus], etc.) .
+ Here you can:</p>
+ <ul>
+ <li>View all species that are currently supported</li>
+ <li>Add new species not yet in the system</li>
+ </ul>
+
+ <h3 class="subheading">Populations</h3>
+
+ <p>A "population" refers to a specific subgroup within a species that you’re
+ studying (e.g., BXD mice). Here you can:</p>
+ <ul>
+ <li>View the populations that exist for a selected species</li>
+ <li>Add new populations of study for a selected species</li>
+ </ul>
+
+ <h3 class="subheading">Samples</h3>
+
+ <p>Manage individual specimens or cases used in your experiments. These
+ include:</p>
+
+ <ul>
+ <li>Experimental subjects</li>
+ <li>Data sources (e.g., tissue samples, clinical cases)</li>
+ <li>Strain means (instead of entering multiple BXD1 individuals, for
+ example, the mean would be entered for a single BXD1 strain)</li>
+ </ul>
+
+
+ <h3 class="subheading">Genotype Data</h3>
+
+ <p>Upload and review genetic markers and allele encodings for your
+ population. Key details:</p>
+
+ <ul>
+ <li>Markers are species-level (e.g., mouse SNP databases).</li>
+ <li>Allele data is population-specific (tied to your experimental
+ samples).</li>
+ </ul>
+
+ <p><strong>Requirement</strong>: Samples must already have been registered
+ in the system before uploading genotype data.</p>
+
+ <h3 class="subheading">Phenotype Data</h3>
+
+ <p>Phenotypes are the visible traits or features of a living thing. For
+ example, phenotypes include:</p>
+
+ <ul>
+ <li>Weight</li>
+ <li>Height</li>
+ <li>Color (such as the color of fur or eyes)</li>
+ </ul>
+
+ <p>This part of the system will allow you to upload and manage the values
+ for different phenotypes from various samples in your studies.</p>
+
+ <!--
- <h2>Phenotype Data</h2>
+ <h3 class="subheading">Expression Data</h3>
<p class="text-danger">
<span class="glyphicon glyphicon-exclamation-sign"></span>
<strong>TODO</strong>: Document this &hellip;</p>
- <h2>Individual Data</h2>
+ <h3 class="subheading">Individual Data</h3>
<p class="text-danger">
<span class="glyphicon glyphicon-exclamation-sign"></span>
<strong>TODO</strong>: Document this &hellip;</p>
- <h2>RNA-Seq Data</h2>
+ <h3 class="subheading">RNA-Seq Data</h3>
<p class="text-danger">
<span class="glyphicon glyphicon-exclamation-sign"></span>
<strong>TODO</strong>: Document this &hellip;</p>
</div>
+ -->
</div>
{%endblock%}
diff --git a/uploader/templates/login.html b/uploader/templates/login.html
index 1f71416..e76c644 100644
--- a/uploader/templates/login.html
+++ b/uploader/templates/login.html
@@ -5,7 +5,8 @@
{%block pagetitle%}log in{%endblock%}
{%block extrapageinfo%}
-<p class="text-dark text-primary">
- You <strong>do need to be logged in</strong> to upload data onto this system.
- Please do that by clicking the "Log In" button at the top of the page.</p>
+<p class="text-dark">
+ You <strong>need to
+ <a href="{{authserver_authorise_uri()}}"
+ title="Sign in to the system">sign in</a></strong> to use this system.</p>
{%endblock%}
diff --git a/uploader/templates/phenotypes/view-dataset.html b/uploader/templates/phenotypes/view-dataset.html
index 4e1be6b..4f2b79b 100644
--- a/uploader/templates/phenotypes/view-dataset.html
+++ b/uploader/templates/phenotypes/view-dataset.html
@@ -64,7 +64,7 @@
<table id="tbl-phenotypes-list" class="table">
<thead>
<tr>
- <th>#</th>
+ <th></th>
<th>Record</th>
<th>Description</th>
</tr>
diff --git a/uploader/templates/platforms/list-platforms.html b/uploader/templates/platforms/list-platforms.html
index 718dd1d..a6bcfdc 100644
--- a/uploader/templates/platforms/list-platforms.html
+++ b/uploader/templates/platforms/list-platforms.html
@@ -58,7 +58,7 @@
<table class="table">
<thead>
<tr>
- <th>#</th>
+ <th></th>
<th>Platform Name</th>
<th><a href="https://www.ncbi.nlm.nih.gov/geo/browse/?view=platforms&tax={{species.TaxonomyId}}"
title="Gene Expression Omnibus: Platforms section"
diff --git a/uploader/templates/populations/list-populations.html b/uploader/templates/populations/list-populations.html
index 7c7145f..f780e94 100644
--- a/uploader/templates/populations/list-populations.html
+++ b/uploader/templates/populations/list-populations.html
@@ -51,7 +51,7 @@
<caption>Populations for {{species.FullName}}</caption>
<thead>
<tr>
- <th>#</th>
+ <th></th>
<th>Name</th>
<th>Full Name</th>
<th>Description</th>
diff --git a/uploader/templates/populations/macro-select-population.html b/uploader/templates/populations/macro-select-population.html
index af4fd3a..ef74ac3 100644
--- a/uploader/templates/populations/macro-select-population.html
+++ b/uploader/templates/populations/macro-select-population.html
@@ -1,29 +1,32 @@
{%macro select_population_form(form_action, populations)%}
-<form method="GET" action="{{form_action}}">
+<form method="GET" action="{{form_action}}" class="form-horizontal">
<legend>Select Population</legend>
<div class="form-group">
- <label for="select-population" class="form-label">Select Population</label>
- <select id="select-population"
- name="population_id"
- class="form-control"
- required="required">
- <option value="">Select Population</option>
- {%for family in populations%}
- <optgroup {%if family[0][1] is not none%}
- label="{{family[0][1]}}"
- {%else%}
- label="Undefined"
- {%endif%}>
- {%for population in family[1]%}
- <option value="{{population.Id}}">{{population.FullName}}</option>
+ <label for="select-population" class="control-label col-sm-2">
+ Population</label>
+ <div class="col-sm-10">
+ <select id="select-population"
+ name="population_id"
+ class="form-control"
+ required="required">
+ <option value="">Select Population</option>
+ {%for family in populations%}
+ <optgroup {%if family[0][1] is not none%}
+ label="{{family[0][1]}}"
+ {%else%}
+ label="Undefined"
+ {%endif%}>
+ {%for population in family[1]%}
+ <option value="{{population.Id}}">{{population.FullName}}</option>
+ {%endfor%}
+ </optgroup>
{%endfor%}
- </optgroup>
- {%endfor%}
- </select>
+ </select>
+ </div>
</div>
- <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
<input type="submit" value="Select" class="btn btn-primary" />
</div>
</form>
diff --git a/uploader/templates/samples/list-samples.html b/uploader/templates/samples/list-samples.html
index 13e5cec..185e784 100644
--- a/uploader/templates/samples/list-samples.html
+++ b/uploader/templates/samples/list-samples.html
@@ -73,7 +73,7 @@
<table class="table">
<thead>
<tr>
- <th>#</th>
+ <th></th>
<th>Name</th>
<th>Auxilliary Name</th>
<th>Symbol</th>
diff --git a/uploader/templates/species/list-species.html b/uploader/templates/species/list-species.html
index 85c9d40..64084b0 100644
--- a/uploader/templates/species/list-species.html
+++ b/uploader/templates/species/list-species.html
@@ -29,7 +29,7 @@
<caption>Available Species</caption>
<thead>
<tr>
- <th>#</td>
+ <th></td>
<th title="A common, layman's name for the species.">Common Name</th>
<th title="The scientific name for the species">Organism Name</th>
<th title="An identifier for the species in the NCBI taxonomy database">
diff --git a/uploader/templates/species/macro-select-species.html b/uploader/templates/species/macro-select-species.html
index dd086c0..36ed102 100644
--- a/uploader/templates/species/macro-select-species.html
+++ b/uploader/templates/species/macro-select-species.html
@@ -1,29 +1,31 @@
{%macro select_species_form(form_action, species)%}
{%if species | length > 0%}
-<form method="GET" action="{{form_action}}">
+<form method="GET" action="{{form_action}}" class="form-horizontal">
<div class="form-group">
- <label for="select-species" class="form-label">Species</label>
- <select id="select-species"
- name="species_id"
- class="form-control"
- required="required">
- <option value="">Select Species</option>
- {%for group in species%}
- {{group}}
- <optgroup {%if group[0][1] is not none%}
- label="{{group[0][1].capitalize()}}"
- {%else%}
- label="Undefined"
- {%endif%}>
- {%for aspecies in group[1]%}
- <option value="{{aspecies.SpeciesId}}">{{aspecies.MenuName}}</option>
+ <label for="select-species" class="control-label col-sm-2">Species</label>
+ <div class="col-sm-10">
+ <select id="select-species"
+ name="species_id"
+ class="form-control"
+ required="required">
+ <option value="">Select Species</option>
+ {%for group in species%}
+ {{group}}
+ <optgroup {%if group[0][1] is not none%}
+ label="{{group[0][1].capitalize()}}"
+ {%else%}
+ label="Undefined"
+ {%endif%}>
+ {%for aspecies in group[1]%}
+ <option value="{{aspecies.SpeciesId}}">{{aspecies.MenuName}}</option>
+ {%endfor%}
+ </optgroup>
{%endfor%}
- </optgroup>
- {%endfor%}
- </select>
+ </select>
+ </div>
</div>
- <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
<input type="submit" value="Select" class="btn btn-primary" />
</div>
</form>