All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/20] toaster: Move build information to Bootstrap 3
@ 2016-06-09 13:24 Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 01/20] toaster: build data Breadcrumbs to Bootstrap3 Belen Barros Pena
                   ` (19 more replies)
  0 siblings, 20 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

This series completes the migration of Toaster to Bootstrap 3 (\0/), making sure all pages in the build information section display nicely.

The series is for review only: patches will be squashed before sending upstream.

Belen Barros Pena (20):
  toaster: build data Breadcrumbs to Bootstrap3
  toaster: build data Build dashboard to Bootstrap 3
  toaster: build data Left nav actions to Bootstrap 3
  toaster: build data Packages installed to Bootstrap 3
  toaster: build data Directory structure to Boostrap 3
  toaster: build data Configuration to Bootstrap 3
  toaster: build data Variables to Bootstrap 3
  toaster: build data Tasks table to Bootstrap 3
  toaster: build data Recipes table to Bootstrap 3
  toaster: build data Task details to Bootstrap 3
  toaster: build data Recipe details to Bootstrap 3
  toaster: css Remove markup
  toaster: build data Package details to Bootstrap 3
  toaster: build data Fix left navigation
  toaster: build data Format empty state in packages table
  toaster: build data Add css for highlight animation
  toaster: task filters Remove invalid option
  toaster: css Remove Bootstrap theme
  toaster: build data Unavailable artifact to Bootstrap 3
  toaster: loading notification Make it spin

 bitbake/lib/toaster/toastergui/buildtables.py      |  93 ++--
 .../toastergui/static/css/bootstrap-theme.css      | 587 ---------------------
 .../toastergui/static/css/bootstrap-theme.css.map  |   1 -
 .../toastergui/static/css/bootstrap-theme.min.css  |   6 -
 .../static/css/bootstrap-theme.min.css.map         |   1 -
 .../lib/toaster/toastergui/static/css/default.css  | 116 +++-
 .../lib/toaster/toastergui/static/js/libtoaster.js |   4 +-
 bitbake/lib/toaster/toastergui/templates/base.html |   2 +-
 .../toastergui/templates/basebuilddetailpage.html  |  30 +-
 .../toastergui/templates/basebuildpage.html        |  93 ++--
 .../toastergui/templates/basetable_bottom.html     |  24 +-
 .../toastergui/templates/basetable_top.html        | 135 ++---
 .../toastergui/templates/builddashboard.html       | 131 +++--
 .../templates/buildinfo-toastertable.html          |   4 +-
 .../toastergui/templates/configuration.html        |  14 +-
 .../toaster/toastergui/templates/configvars.html   |  83 +--
 .../toaster/toastergui/templates/customrecipe.html |   2 +-
 .../templates/detail_pagination_bottom.html        |  24 +-
 .../toastergui/templates/detail_search_header.html |  58 +-
 .../toastergui/templates/detail_sorted_header.html |   8 +-
 .../lib/toaster/toastergui/templates/dirinfo.html  |  34 +-
 .../toastergui/templates/filtersnippet.html        |  40 +-
 .../templates/package_built_dependencies.html      |  12 +-
 .../toastergui/templates/package_built_detail.html |   8 +-
 .../toastergui/templates/package_detail_base.html  |  24 +-
 .../templates/package_included_dependencies.html   |   8 +-
 .../templates/package_included_tabs.html           |   8 +-
 .../lib/toaster/toastergui/templates/recipe.html   |  98 ++--
 .../toastergui/templates/recipe_packages.html      |  21 +-
 .../toastergui/templates/recipedetails.html        |   2 +-
 .../templates/snippets/gitrev_popover.html         |   2 +-
 .../snippets/pkg_dependencies_popover.html         |   2 +-
 .../snippets/pkg_revdependencies_popover.html      |   2 +-
 .../lib/toaster/toastergui/templates/target.html   |  10 +-
 bitbake/lib/toaster/toastergui/templates/task.html | 159 ++++--
 .../toastergui/templates/unavailable_artifact.html |  10 +-
 .../toaster/toastergui/templatetags/projecttags.py |  12 +-
 bitbake/lib/toaster/toastergui/views.py            |   1 -
 38 files changed, 748 insertions(+), 1121 deletions(-)
 delete mode 100644 bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.css
 delete mode 100644 bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.css.map
 delete mode 100644 bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.min.css
 delete mode 100644 bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.min.css.map

-- 
1.9.1



^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 01/20] toaster: build data Breadcrumbs to Bootstrap3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 02/20] toaster: build data Build dashboard to Bootstrap 3 Belen Barros Pena
                   ` (18 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the breadcrumbs in the build data pages display correctly with
Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 .../toastergui/templates/basebuilddetailpage.html  | 30 ++++++++++++----------
 .../toastergui/templates/basebuildpage.html        |  2 +-
 2 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/templates/basebuilddetailpage.html b/bitbake/lib/toaster/toastergui/templates/basebuilddetailpage.html
index 3a4c383..4d50667 100644
--- a/bitbake/lib/toaster/toastergui/templates/basebuilddetailpage.html
+++ b/bitbake/lib/toaster/toastergui/templates/basebuilddetailpage.html
@@ -5,21 +5,23 @@
 
 <div class="row">
   <!-- Breadcrumbs -->
-  <ul class="breadcrumb" id="breadcrumb">
-    <li><a href="{% project_url build.project %}">{{build.project.name}}</a></li>
-    {% if not build.project.is_default %}
-    <li><a href="{% url 'projectbuilds' build.project.id %}">Builds</a></li>
-    {% endif %}
-    <li><a href="{%url 'builddashboard' build.pk%}">{{build.get_sorted_target_list.0.target}} {%if build.target_set.all.count > 1%}(+{{build.target_set.all.count|add:"-1"}}){%endif%} {{build.machine}} ({{build.completed_on|date:"d/m/y H:i"}})</a></li>
-    {% block localbreadcrumb %}{% endblock %}
-  </ul>
-  <script>
+	<div class="col-md-12">
+		<ul class="breadcrumb" id="breadcrumb">
+			<li><a href="{% project_url build.project %}">{{build.project.name}}</a></li>
+			{% if not build.project.is_default %}
+			<li><a href="{% url 'projectbuilds' build.project.id %}">Builds</a></li>
+			{% endif %}
+			<li><a href="{%url 'builddashboard' build.pk%}">{{build.get_sorted_target_list.0.target}} {%if build.target_set.all.count > 1%}(+{{build.target_set.all.count|add:"-1"}}){%endif%} {{build.machine}} ({{build.completed_on|date:"d/m/y H:i"}})</a></li>
+			{% block localbreadcrumb %}{% endblock %}
+		</ul>
+		<script>
 $( function () {
-    $('#breadcrumb > li').append('<span class="divider">&rarr;</span>');
-    $('#breadcrumb > li:last').addClass("active");
-    $('#breadcrumb > li:last > span').remove();
-    });
-  </script>
+	$('#breadcrumb > li').append('<span class="divider">&rarr;</span>');
+	$('#breadcrumb > li:last').addClass("active");
+	$('#breadcrumb > li:last > span').remove();
+	});
+		</script>
+	</div>
 </div>
 
 <!-- Begin container -->
diff --git a/bitbake/lib/toaster/toastergui/templates/basebuildpage.html b/bitbake/lib/toaster/toastergui/templates/basebuildpage.html
index c002e42..755c538 100644
--- a/bitbake/lib/toaster/toastergui/templates/basebuildpage.html
+++ b/bitbake/lib/toaster/toastergui/templates/basebuildpage.html
@@ -7,7 +7,7 @@
 
 <div class="row">
   <!-- breadcrumbs -->
-  <div class="section">
+  <div class="col-md-12">
     <ul class="breadcrumb" id="breadcrumb">
       <li><a href="{% project_url build.project %}">{{build.project.name}}</a></li>
       {% if not build.project.is_default %}
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 02/20] toaster: build data Build dashboard to Bootstrap 3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 01/20] toaster: build data Breadcrumbs to Bootstrap3 Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 03/20] toaster: build data Left nav actions " Belen Barros Pena
                   ` (17 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the build dashboard page displays correctly with Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 .../lib/toaster/toastergui/static/css/default.css  |  31 ++++-
 .../toastergui/templates/basebuildpage.html        |   2 +-
 .../toastergui/templates/builddashboard.html       | 131 ++++++++++-----------
 .../toaster/toastergui/templates/customrecipe.html |   2 +-
 .../toastergui/templates/recipedetails.html        |   2 +-
 5 files changed, 93 insertions(+), 75 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css
index 30328fd..c275dbb 100644
--- a/bitbake/lib/toaster/toastergui/static/css/default.css
+++ b/bitbake/lib/toaster/toastergui/static/css/default.css
@@ -24,9 +24,9 @@ img.logo { height: 30px; vertical-align: bottom; }
 
 /* Increase bottom margin of definition lists inside popovers for the Toaster version information in the top navbar, and also inside the right hand columns of our details pages */
 .popover-content dd,
-.well dd { margin-bottom: 15px; }
+.item-info dd { margin-bottom: 15px; }
 
-/* Style the horizonal definition lists */
+/* Style the horizontal definition lists */
 .dl-horizontal dt { width: 200px; line-height: 25px; }
 .dl-horizontal dd { margin-left: 220px; line-height: 25px; }
 
@@ -246,3 +246,30 @@ code { color: #333; background-color: transparent; }
 
 /* Style the Toaster screenshot in the landing page */
 .img-thumbnail { padding: 0; }
+
+/* Set the layout for the build information pages */
+
+#nav { margin-top: 10px; }
+.page-header.build-data { margin-top: 0px; }
+.build-data > h1 { margin-top: 8px; }
+
+/* Style the build outcome information in the build dashboard */
+.log { margin-left: 30px; }
+.show-warnings { font-weight: 700; color: #8a6d3b; }
+.show-warnings:hover { color: #66512c; } 
+
+/* Style the errors and warnings information in the build dashboard */
+#errors .panel-heading { background-color: transparent; color: #843534; }
+#warnings .panel-heading { background-color: transparent; color: #8a6d3b; }
+#warnings .panel-heading a:hover { color: #66512c; }
+h2.panel-title { font-size: 30px; }
+.alert-danger pre,
+.alert-warning pre { background-color: transparent; border: none; }
+.alert-danger pre { color: #a94442; }
+#error-info pre,
+#warning-info pre { white-space: pre-wrap; }
+.alert-warning pre { color: #8a6d3b; } 
+
+/* Style the wells in the build dashboard */
+.dashboard-section h3 { margin-top: 10px; margin-bottom: 20px; }
+.col-md-4.dashboard-section dd { margin-bottom: 10px; }
diff --git a/bitbake/lib/toaster/toastergui/templates/basebuildpage.html b/bitbake/lib/toaster/toastergui/templates/basebuildpage.html
index 755c538..6162606 100644
--- a/bitbake/lib/toaster/toastergui/templates/basebuildpage.html
+++ b/bitbake/lib/toaster/toastergui/templates/basebuildpage.html
@@ -44,7 +44,7 @@
   <div class="row">
     <!-- begin left sidebar container -->
     <div id="nav" class="col-md-2">
-      <ul class="nav nav-list well" id="build-menu">
+      <ul class="nav nav-pills nav-stacked" id="build-menu">
         <li
           {% if request.resolver_match.url_name == 'builddashboard'  %}
             class="active"
diff --git a/bitbake/lib/toaster/toastergui/templates/builddashboard.html b/bitbake/lib/toaster/toastergui/templates/builddashboard.html
index 2329603..fc0dcfd 100644
--- a/bitbake/lib/toaster/toastergui/templates/builddashboard.html
+++ b/bitbake/lib/toaster/toastergui/templates/builddashboard.html
@@ -14,57 +14,49 @@
 {% block buildinfomain %}
 <!-- page title -->
 <div class="col-md-10">
- <div class="page-header">
+ <div class="page-header build-data">
      <h1>{{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}}</h1>
  </div>
 
 <!-- build result bar -->
-  <div class="alert {%if build.outcome == build.SUCCEEDED%}alert-success{%elif build.outcome == build.FAILED%}alert-error{%else%}alert-info{%endif%}">
-    <div class="lead">
-            <span><strong>
-                {%if build.outcome == build.SUCCEEDED%}Completed{%elif build.outcome == build.FAILED%}Failed{%else%}{%endif%}
-              </strong> on
-            {{build.completed_on|date:"d/m/y H:i"}}
-</span>
-{% if  build.warnings.count or build.errors.count %}
-&nbsp;with
-{% endif %}
-{%if build.outcome == build.SUCCEEDED or build.outcome == build.FAILED %}
-{% if  build.errors.count %}
-     <span > <i class="icon-minus-sign red"></i><strong><a href="#errors" class="error show-errors"> {{build.errors.count}} error{{build.errors.count|pluralize}}</a></strong></span>
-{% endif %}
-{% if  build.warnings.count %}
-{% if  build.errors.count %}
-    and
-{% endif %}
-    <span > <i class="icon-warning-sign yellow"></i><strong><a href="#warnings" class="warning show-warnings"> {{build.warnings.count}} warning{{build.warnings.count|pluralize}}</a></strong></span>
-{% endif %}
-            <span class="pull-right">Build time: <a href="{% url 'buildtime' build.pk %}">{{ build.timespent_seconds|sectohms }}</a>
-            {% if build.cooker_log_path %}
-                <a class="btn {%if build.outcome == build.SUCCEEDED%}btn-success{%else%}btn-danger{%endif%} pull-right log" href="{% url 'build_artifact' build.id "cookerlog" build.id %}">Download build log</a>
-            {% endif %}
-            </span>
-
-{%endif%}
-    </div>
-  </div>
+  <div class="alert {%if build.outcome == build.SUCCEEDED%}alert-success{%elif build.outcome == build.FAILED%}alert-danger{%else%}alert-info{%endif%}">
+		<span><strong>{%if build.outcome == build.SUCCEEDED%}Completed{%elif build.outcome == build.FAILED%}Failed{%else%}{%endif%}</strong> on {{build.completed_on|date:"d/m/y H:i"}}</span>
+		{% if  build.warnings.count or build.errors.count %}
+		<span>with</span>
+		{% endif %}
+		{%if build.outcome == build.SUCCEEDED or build.outcome == build.FAILED %}
+			{% if  build.errors.count %}
+			<a href="#errors" class="alert-link show-errors"> {{build.errors.count}} error{{build.errors.count|pluralize}}</a>
+			{% endif %}
+			{% if  build.warnings.count %}
+				{% if  build.errors.count %}and{% endif %}
+				<a href="#warnings" class="show-warnings"> {{build.warnings.count}} warning{{build.warnings.count|pluralize}}</a>
+			{% endif %}
+			{% if build.cooker_log_path %}
+			<a class="alert-link pull-right log" href="{% url 'build_artifact' build.id "cookerlog" build.id %}">Download build log</a>
+			{% endif %}
+			<span class="pull-right">
+				Build time:
+				<a class="alert-link" href="{% url 'buildtime' build.pk %}">{{ build.timespent_seconds|sectohms }}</a>
+			</span>
+		{%endif%}
+</div>
 
 {% if build.errors.count %}
-<div class="panel-group" id="errors">
-  <div class="panel panel-default">
+  <div class="panel panel-default" id="errors">
     <div class="panel-heading">
-      <a class="panel-title error toggle-errors" href="#">
-         <h2 id="error-toggle">
-           <i class="icon-minus-sign"></i>
+      <h2 class="panel-title">
+         <span class="glyphicon glyphicon-minus-sign"></span>
+         <a data-toggle="collapse" href="#error-info" id="error-toggle">
            {{build.errors.count}} error{{build.errors.count|pluralize}}
-         </h2>
-      </a>
+         </a>
+      </h2>
     </div>
-    <div class="panel-collapse collapse in" id="collapse-errors">
+    <div class="panel-collapse collapse in" id="error-info">
       <div class="panel-body">
         <div class="col-md-10">
           {% for error in build.errors %}
-            <div class="alert alert-error" data-error="{{ error.id }}">
+            <div class="alert alert-danger" data-error="{{ error.id }}">
               <pre>{{error.message}}</pre>
             </div>
           {% endfor %}
@@ -72,7 +64,6 @@
       </div>
     </div>
   </div>
-</div>
 {% endif %}
 
 {%if build.outcome == build.SUCCEEDED%}
@@ -81,9 +72,8 @@
     <h2>Images</h2>
     {% for target in targets %}
         {% if target.target.is_image %}
-    <div class="well dashboard-section">
-        <h3><a href="{% url 'target' build.pk target.target.pk %}">{{target.target}}</a>
-                </h3>
+    <div class="well well-transparent dashboard-section">
+        <h3><a href="{% url 'target' build.pk target.target.pk %}">{{target.target}}</a></h3>
         <dl class="dl-horizontal">
             <dt>Packages included</dt>
             <dd><a href="{% url 'target' build.pk target.target.pk %}">{{target.npkg}}</a></dd>
@@ -100,7 +90,7 @@
                       <p>
                       This is probably because valid image and license manifest
                       files from a previous build already exist in your
-                      <code>.../poky/build/tmp/deploy</code>
+                      <code>build/tmp/deploy</code>
                       directory. You can
                       also <a href="{% url 'targetpkg' build.pk target.target.pk %}">view the
                         license manifest information</a> in Toaster.
@@ -110,7 +100,7 @@
                 </div>
         {% else %}
             <dt>
-                <i class="icon-question-sign get-help" title="The location in disk of the license manifest, a document listing all packages installed in your image and their licenses"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The location in disk of the license manifest, a document listing all packages installed in your image and their licenses"></span>
 
                 License manifest
             </dt>
@@ -118,11 +108,11 @@
                 <a href="{% url 'target' build.pk target.target.pk %}">View in Toaster</a> |
                 <a href="{% url 'build_artifact' build.pk 'licensemanifest' target.target.pk %}">Download</a></dd>
             <dt>
-                <i class="icon-question-sign get-help" title="Image files are stored in <code>/build/tmp/deploy/images/</code>"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="Image files are stored in <code>build/tmp/deploy/images/</code>"></span>
                 Image files
             </dt>
             <dd>
-                <ul>
+                <ul class="list-unstyled">
                     {% for i in target.imageFiles %}
                         <li>
                             <a href="{% url 'build_artifact' build.pk 'imagefile' i.id %}">
@@ -148,10 +138,10 @@
 {% if build.buildartifact_set.all.count > 0 %}
 <h2>Other artifacts</h2>
 
-    <div class="well dashboard-section">
+    <div class="well well-transparent dashboard-section">
         <dl class="dl-horizontal">
             <dt>
-                <i class="icon-question-sign get-help" title="Build artifacts discovered in <i>tmp/deploy/images</i>. Usually kernel images and kernel modules."></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="Build artifacts discovered in <i>tmp/deploy/images</i>. Usually kernel images and kernel modules."></span>
                 Other artifacts</dt>
             <dd><div>
               {% for ba in build.buildartifact_set.all|dictsort:"file_name" %}
@@ -172,51 +162,51 @@
   <div class="row">
     <div class="col-md-4 dashboard-section">
       <div class="well well-transparent">
-        <h4><a href="{%url 'configuration' build.pk%}">Configuration</a></h4>
+        <h3><a href="{%url 'configuration' build.pk%}">Configuration</a></h3>
             <dl>
         <dt>Machine</dt><dd>{{build.machine}}</dd>
         <dt>Distro</dt><dd>{{build.distro}}</dd>
-        <dt>Layers</dt>{% for i in build.layer_version_build.all|dictsort:"layer.name" %}<dd>{{i.layer.name}}</dd>{%endfor%}
+        <dt>Layers</dt><dd><ul class="list-unstyled">{% for i in build.layer_version_build.all|dictsort:"layer.name" %}<li>{{i.layer.name}}</li>{%endfor%}</ul></dd>
             </dl>
       </div>
     </div>
     <div class="col-md-4 dashboard-section">
       <div class="well well-transparent">
-        <h4><a href="{%url 'tasks' build.pk%}">Tasks</a></h4>
+        <h3><a href="{%url 'tasks' build.pk%}">Tasks</a></h3>
             <dl>
             {% query build.task_build outcome=4 order__gt=0 as exectask%}
             {% if exectask.count > 0 %}
                 <dt>Failed tasks</dt>
                 <dd>
                 {% if exectask.count == 1 %}
-                    <a class="error" href="{% url "task" build.id exectask.0.id %}">
+                    <a class="text-danger" href="{% url "task" build.id exectask.0.id %}">
                         {{exectask.0.recipe.name}}
                         <span class="task-name">{{exectask.0.task_name}}</span>
                     </a>
 
                         <a href="{% url 'build_artifact' build.id "tasklogfile" exectask.0.id %}">
-                            <i class="icon-download-alt" title="" data-original-title="Download task log file"></i>
+                            <span class="glyphicon glyphicon-download-alt get-help" title="Download task log file"></i>
                         </a>
 
                 {% elif exectask.count > 1%}
-                    <a class="error" href="{% url "tasks" build.id %}?filter=outcome%3A4">{{exectask.count}}</a>
+                    <a class="text-danger" href="{% url "tasks" build.id %}?filter=outcome%3A4">{{exectask.count}}</a>
                 {% endif %}
                 </dd>
             {% endif %}
         <dt>Total number of tasks</dt><dd><a href="{% url 'tasks' build.pk %}">{% query build.task_build order__gt=0 as alltasks %}{{alltasks.count}}</a></dd>
         <dt>
             Tasks executed
-            <i class="icon-question-sign get-help" title="'Executed' tasks are those that need to be run in order to generate the task output"></i>
+            <span class="glyphicon glyphicon-question-sign get-help" title="'Executed' tasks are those that need to be run in order to generate the task output"></span>
         </dt>
         <dd><a href="{% url 'tasks' build.pk %}?filter=task_executed%3A1&amp;count=25&amp;search=&amp;page=1&amp;orderby=order%3A%2B">{% query build.task_build task_executed=1 order__gt=0 as exectask%}{{exectask.count}}</a></dd>
         <dt>
             Tasks not executed
-            <i class="icon-question-sign get-help" title="'Not executed' tasks don't need to run because their outcome is provided by another task"></i>
+            <span class="glyphicon glyphicon-question-sign get-help" title="'Not executed' tasks don't need to run because their outcome is provided by another task"></span>
         </dt>
         <dd><a href="{% url 'tasks' build.pk %}?filter=task_executed%3A0&amp;count=25&amp;search=&amp;page=1&amp;orderby=order%3A%2B">{% query build.task_build task_executed=0 order__gt=0 as noexectask%}{{noexectask.count}}</a></dd>
         <dt>
             Reuse
-            <i class="icon-question-sign get-help" title="The percentage of 'not executed' tasks over the total number of tasks, which is a measure of the efficiency of your build"></i>
+            <span class="glyphicon glyphicon-question-sign get-help" title="The percentage of 'not executed' tasks over the total number of tasks, which is a measure of the efficiency of your build"></span>
         </dt>
         <dd>
 {% query build.task_build order__gt=0 as texec %}
@@ -232,7 +222,7 @@
     </div>
     <div class="col-md-4 dashboard-section">
       <div class="well well-transparent">
-        <h4><a href="{% url 'recipes' build.pk %}">Recipes</a> & <a href="{% url 'packages' build.pk %}">Packages</a></h4>
+        <h3><a href="{% url 'recipes' build.pk %}">Recipes</a> & <a href="{% url 'packages' build.pk %}">Packages</a></h3>
             <dl>
         <dt>Recipes built</dt><dd><a href="{% url 'recipes' build.pk %}">{{recipecount}}</a></dd>
         <dt>Packages built</dt><dd><a href="{% url 'packages' build.pk %}">{{packagecount}}</a></dd>
@@ -242,17 +232,14 @@
 </div>
 
 {% if build.warnings.count %}
-<div class="panel-group" id="warnings">
-  <div class="panel panel-default">
+  <div class="panel panel-default" id="warnings">
     <div class="panel-heading">
-      <a class="panel-title warning toggle-warnings" href="#">
-        <h2 id="warning-toggle">
-          <i class="icon-warning-sign"></i>
-          {{build.warnings.count}} warning{{build.warnings.count|pluralize}}
-        </h2>
-      </a>
+      <h2 class="panel-title">
+          <span class="glyphicon glyphicon-warning-sign"></span>
+          <a id="warning-toggle" href="#warning-info" data-toggle="collapse">{{build.warnings.count}} warning{{build.warnings.count|pluralize}}</a>
+      </h2>
     </div>
-    <div class="panel-collapse collapse" id="collapse-warnings">
+    <div class="panel-collapse collapse" id="warning-info">
       <div class="panel-body">
         <div class="col-md-10">
           {% for warning in logmessages %}{% if warning.level == 1 %}
@@ -264,7 +251,6 @@
       </div>
     </div>
   </div>
-</div>
 {% endif %}
 
 </div> <!-- end 10 column row -->
@@ -273,8 +259,13 @@
     $(document).ready(function() {
         //show warnings section when requested from the previous page
         if (location.href.search('#warnings') > -1) {
-            $('#collapse-warnings').addClass('in');
+            $('#warning-info').addClass('in');
         }
+	
+	//show warnings section when requested from the build outcome
+	$(".show-warnings").click(function() {
+	    $('#warning-info').addClass('in');
+	});
     });
 </script>
 
diff --git a/bitbake/lib/toaster/toastergui/templates/customrecipe.html b/bitbake/lib/toaster/toastergui/templates/customrecipe.html
index d904961..f2a8fd2 100644
--- a/bitbake/lib/toaster/toastergui/templates/customrecipe.html
+++ b/bitbake/lib/toaster/toastergui/templates/customrecipe.html
@@ -158,7 +158,7 @@
     <div class="well">
       <h2>About {{recipe.name}}</h2>
 
-      <dl>
+      <dl class="item-info">
         <dt>
         Approx. packages included
         <span class="glyphicon glyphicon-question-sign get-help" title="" data-original-title="The number of packages included is based on information from previous builds and from parsing layers, so we can never be sure it is 100% accurate"></span>
diff --git a/bitbake/lib/toaster/toastergui/templates/recipedetails.html b/bitbake/lib/toaster/toastergui/templates/recipedetails.html
index 19b18ff..66c1f7b 100644
--- a/bitbake/lib/toaster/toastergui/templates/recipedetails.html
+++ b/bitbake/lib/toaster/toastergui/templates/recipedetails.html
@@ -118,7 +118,7 @@
   <div class="col-md-4">
     <div class="well">
       <h2>About {{recipe.name}}</h2>
-      <dl>
+      <dl class="item-info">
         <dt>
         Approx. packages included
         <span class="glyphicon glyphicon-question-sign get-help" title="The number of packages included is based on information from previous builds and from parsing layers, so we can never be sure it is 100% accurate"></span>
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 03/20] toaster: build data Left nav actions to Bootstrap 3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 01/20] toaster: build data Breadcrumbs to Bootstrap3 Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 02/20] toaster: build data Build dashboard to Bootstrap 3 Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 04/20] toaster: build data Packages installed " Belen Barros Pena
                   ` (16 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the actions at the bottom of the left navigation (download
build log, edit custom image and new custom image) display correclty
with Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 .../toastergui/templates/basebuildpage.html        | 67 +++++++++-------------
 1 file changed, 26 insertions(+), 41 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/templates/basebuildpage.html b/bitbake/lib/toaster/toastergui/templates/basebuildpage.html
index 6162606..d9adcd7 100644
--- a/bitbake/lib/toaster/toastergui/templates/basebuildpage.html
+++ b/bitbake/lib/toaster/toastergui/templates/basebuildpage.html
@@ -49,7 +49,7 @@
           {% if request.resolver_match.url_name == 'builddashboard'  %}
             class="active"
           {% endif %} >
-          <a class="nav-parent" href="{% url 'builddashboard' build.pk %}">Build summary</a>
+          <a  href="{% url 'builddashboard' build.pk %}">Build summary</a>
         </li>
         {% if build.target_set.all.0.is_image and build.outcome == 0 %}
           <li class="nav-header">Images</li>
@@ -72,56 +72,42 @@
           <li><a href="{% url 'cputime' build.pk %}">CPU usage</a></li>
           <li><a href="{% url 'diskio' build.pk %}">Disk I/O</a></li>
 
-        <li class="divider"></li>
-
-        <li>
-          <p class="navbar-btn">
-            <a class="btn btn-block" href="{% url 'build_artifact' build.id 'cookerlog' build.id %}">
-              Download build log
-            </a>
-          </p>
-        </li>
+	<li class="nav-header">Actions</li>
+       	<a class="btn btn-default btn-block navbar-btn" href="{% url 'build_artifact' build.id 'cookerlog' build.id %}">Download build log</a>
 
         {% with build.get_custom_image_recipes as custom_image_recipes %}
           {% if custom_image_recipes.count > 0 %}
             <!-- edit custom image built during this build -->
-            <li>
-              <p class="navbar-btn" data-role="edit-custom-image-trigger">
-                <button class="btn btn-block">Edit custom image</button>
-                {% include 'editcustomimage_modal.html' %}
-                <script>
-                  var editableCustomImageRecipes = {{ custom_image_recipes | objects_to_dictionaries:"id,name" | json }};
+              <button class="btn btn-default btn-block navbar-btn" data-role="edit-custom-image-trigger">Edit custom image</button>
+              {% include 'editcustomimage_modal.html' %}
+              <script>
+                var editableCustomImageRecipes = {{ custom_image_recipes | objects_to_dictionaries:"id,name" | json }};
 
-                  $(document).ready(function () {
-                    var editCustomImageTrigger = $('[data-role="edit-custom-image-trigger"]');
-                    var editCustomImageModal = $('#edit-custom-image-modal');
+                $(document).ready(function () {
+                  var editCustomImageTrigger = $('[data-role="edit-custom-image-trigger"]');
+                  var editCustomImageModal = $('#edit-custom-image-modal');
 
-                    // edit custom image which was built during this build
-                    editCustomImageTrigger.click(function () {
-                      // single editable custom image: redirect to the edit page
-                      // for that image
-                      if (editableCustomImageRecipes.length === 1) {
-                        var url = '{% url "customrecipe" build.project.id custom_image_recipes.first.id %}';
-                        document.location.href = url;
-                      }
-                      // multiple editable custom images: show modal to select
-                      // one of them for editing
-                      else {
-                        editCustomImageModal.modal('show');
-                      }
-                    });
+                  // edit custom image which was built during this build
+                  editCustomImageTrigger.click(function () {
+                    // single editable custom image: redirect to the edit page
+                    // for that image
+                    if (editableCustomImageRecipes.length === 1) {
+                      var url = '{% url "customrecipe" build.project.id custom_image_recipes.first.id %}';
+                      document.location.href = url;
+                    }
+                    // multiple editable custom images: show modal to select
+                    // one of them for editing
+                    else {
+                      editCustomImageModal.modal('show');
+                    }
                   });
-                </script>
-              </p>
-            </li>
+                });
+              </script>
           {% endif %}
         {% endwith %}
 
-        <li>
           <!-- new custom image from image recipe in this build -->
-          <p class="navbar-btn" data-role="new-custom-image-trigger">
-            <button class="btn btn-block">New custom image</button>
-          </p>
+          <button class="btn btn-default btn-block navbar-btn" data-role="new-custom-image-trigger">New custom image</button>
           {% include 'newcustomimage_modal.html' %}
           <script>
             // imageRecipes includes both custom image recipes and built-in
@@ -145,7 +131,6 @@
               });
             });
           </script>
-        </li>
       </ul>
 
     </div>
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 04/20] toaster: build data Packages installed to Bootstrap 3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (2 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 03/20] toaster: build data Left nav actions " Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-10 11:18   ` Michael Wood
  2016-06-09 13:24 ` [PATCH 05/20] toaster: build data Directory structure to Boostrap 3 Belen Barros Pena
                   ` (15 subsequent siblings)
  19 siblings, 1 reply; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the table showing the list of packages installed in an
image displays correctly with Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 bitbake/lib/toaster/toastergui/buildtables.py                | 12 ++++++------
 bitbake/lib/toaster/toastergui/static/css/default.css        |  8 +++++++-
 bitbake/lib/toaster/toastergui/static/js/libtoaster.js       |  4 +---
 .../toastergui/templates/snippets/gitrev_popover.html        |  2 +-
 .../templates/snippets/pkg_dependencies_popover.html         |  2 +-
 .../templates/snippets/pkg_revdependencies_popover.html      |  2 +-
 bitbake/lib/toaster/toastergui/templates/target.html         | 10 +++++-----
 7 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/buildtables.py b/bitbake/lib/toaster/toastergui/buildtables.py
index e237e4e..5d00aa4 100644
--- a/bitbake/lib/toaster/toastergui/buildtables.py
+++ b/bitbake/lib/toaster/toastergui/buildtables.py
@@ -75,8 +75,8 @@ class BuiltPackagesTableBase(tables.PackagesTable):
                     {%% endif %%}
                     ''' % {'value': val})
 
-        add_pkg_link_to = ['name', 'version', 'size', 'license']
-        add_recipe_link_to = ['recipe__name', 'recipe__version']
+        add_pkg_link_to = ['name']
+        add_recipe_link_to = ['recipe__name']
 
         # Add the recipe and pkg build links to the required columns
         for column in self.columns:
@@ -160,7 +160,7 @@ class InstalledPackagesTable(BuildTablesMixin, BuiltPackagesTableBase):
     """ Show all packages installed in an image """
     def __init__(self, *args, **kwargs):
         super(InstalledPackagesTable, self).__init__(*args, **kwargs)
-        self.title = "Installed Packages"
+        self.title = "Packages Included"
         self.default_orderby = "name"
 
     def make_package_list(self, target):
@@ -213,11 +213,11 @@ class InstalledPackagesTable(BuildTablesMixin, BuiltPackagesTableBase):
              ' extra.target_id data.pk %}">{{data.name}}</a>'
              '{% if data.installed_name and data.installed_name !='
              ' data.name %}'
-             '<span class="muted"> as {{data.installed_name}}</span>'
-             ' <i class="icon-question-sign get-help hover-help"'
+             '<span class="text-muted"> as {{data.installed_name}}</span>'
+             ' <span class="glyphicon glyphicon-question-sign get-help hover-help"'
              ' title="{{data.name}} was renamed at packaging time and'
              ' was installed in your image as {{data.installed_name}}'
-             '"></i>{% endif %} ')
+             '"></span>{% endif %} ')
 
         for column in self.columns:
             if column['static_data_name'] == 'name':
diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css
index c275dbb..d808ab0 100644
--- a/bitbake/lib/toaster/toastergui/static/css/default.css
+++ b/bitbake/lib/toaster/toastergui/static/css/default.css
@@ -22,6 +22,9 @@ img.logo { height: 30px; vertical-align: bottom; }
 /* Increase popovers width to fit commit SHAs */
 .popover { max-width: 350px; }
 
+/* Set a limit to popover height to handle long dependency lists */
+.popover-content { max-height: 350px; overflow: scroll; }
+
 /* Increase bottom margin of definition lists inside popovers for the Toaster version information in the top navbar, and also inside the right hand columns of our details pages */
 .popover-content dd,
 .item-info dd { margin-bottom: 15px; }
@@ -55,7 +58,7 @@ img.logo { height: 30px; vertical-align: bottom; }
 #edit-columns-button { margin-right: 30px; }
 .navbar-default[id^="table-chrome-"] { background-color: transparent; }
 [id^="table-chrome-collapse-"] .navbar-form { margin-left: -15px; }
-.dropdown-menu.editcol { padding-left: 10px; min-width: 180px; }
+.dropdown-menu.editcol { padding-left: 10px; min-width: 200px; }
 span[class^="remove-search-btn-"] { position: absolute; right: 5px; top: 0; bottom: 0; height: 14px; margin: auto; font-size: 14px; cursor: pointer; color: #777;}
 span[class^="remove-search-btn-"]:hover { color: #333; }
 #no-results-special-selectpackagestable .form-inline { margin-top: 20px; }
@@ -273,3 +276,6 @@ h2.panel-title { font-size: 30px; }
 /* Style the wells in the build dashboard */
 .dashboard-section h3 { margin-top: 10px; margin-bottom: 20px; }
 .col-md-4.dashboard-section dd { margin-bottom: 10px; }
+
+/* Make the help in tables insivisble until you hover over the right cell */ 
+.hover-help { visibility: hidden; }
diff --git a/bitbake/lib/toaster/toastergui/static/js/libtoaster.js b/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
index e4e4f6c..eafe70d 100644
--- a/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
+++ b/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
@@ -541,9 +541,7 @@ $(document).ready(function() {
       delay: { show : 300 }
     });
 
-    // show help bubble only on hover inside tables
-    $(".hover-help").css("visibility","hidden");
-
+    // show help bubble on hover inside tables
     $("table").on("mouseover", "th, td", function () {
         $(this).find(".hover-help").css("visibility","visible");
     });
diff --git a/bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html b/bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html
index 281a3bd..c1e3dab 100644
--- a/bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html
+++ b/bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html
@@ -1,6 +1,6 @@
 {% load projecttags  %}
 {% if vcs_ref|is_shaid %}
-<a class="btn" data-content="<ul class='unstyled'> <li>{{vcs_ref}}</li> </ul>">
+<a class="btn btn-default" data-content="{{vcs_ref}}">
  {{vcs_ref|truncatechars:10}}
 </a>
 {% else %}
diff --git a/bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html b/bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html
index 5be409c..273437e 100644
--- a/bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html
+++ b/bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html
@@ -5,7 +5,7 @@
 {% with count_package=package_deps.packages|length %}
 
 {% if count_package > 0 %}
-  <a data-content='<ul class="unstyled">
+  <a data-content='<ul class="list-unstyled">
   {% for dep in package_deps.packages %}
      <li>
       {% if extra.add_links %}
diff --git a/bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html b/bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html
index 65c2b29..e6ef816 100644
--- a/bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html
+++ b/bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html
@@ -5,7 +5,7 @@
 {% with count_package=package_deps.packages|length %}
 
 {% if count_package > 0 %}
-  <a data-content='<ul class="unstyled">
+  <a data-content='<ul class="list-unstyled">
   {% for dep in package_deps.packages|dictsort:"package.name" %}
      <li>
       {% if extra.add_links %}
diff --git a/bitbake/lib/toaster/toastergui/templates/target.html b/bitbake/lib/toaster/toastergui/templates/target.html
index 0b2fe99..1924a0d 100644
--- a/bitbake/lib/toaster/toastergui/templates/target.html
+++ b/bitbake/lib/toaster/toastergui/templates/target.html
@@ -18,7 +18,7 @@
 
 {% block buildinfomain %}
 <div class="col-md-10">
-    <div class="page-header">
+    <div class="page-header build-data">
         <h1>
             {% if request.GET.search and objects.paginator.count > 0 %}
                 {{objects.paginator.count}} package{{objects.paginator.count|pluralize}} found
@@ -30,16 +30,16 @@
         </h1>
     </div>
 <div id="navTab">
-    <ul class="nav nav-pills">
+    <ul class="nav nav-tabs">
         <li class="active">
             <a href="#target">
-            <i class="icon-question-sign get-help" title="Of all the packages built, the subset installed in the root file system of this image"></i>
+            <span class="glyphicon glyphicon-question-sign get-help" title="Of all the packages built, the subset installed in the root file system of this image"></span>
                 Packages included ({{target.package_count}} - {{packages_sum|filtered_filesizeformat}})
             </a>
         </li>
         <li>
             <a href="{% url 'dirinfo' build.id target.id %}">
-                <i class="icon-question-sign get-help" title="The directories and files in the root file system of this image"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The directories and files in the root file system of this image"></span>
                 Directory structure
             </a>
         </li>
@@ -51,6 +51,6 @@
         {% include "toastertable.html" %}
         {% endwith %}
     </div> <!-- tabpane -->
-	</div> <!--navTab -->>
+	</div> <!--navTab -->
 <!-- col-md-10 -->
 {% endblock buildinfomain %}
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 05/20] toaster: build data Directory structure to Boostrap 3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (3 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 04/20] toaster: build data Packages installed " Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 06/20] toaster: build data Configuration to Bootstrap 3 Belen Barros Pena
                   ` (14 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the table showing the rootfs directoy structure displays
correctly with Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 .../lib/toaster/toastergui/templates/dirinfo.html  | 27 ++++++++++------------
 1 file changed, 12 insertions(+), 15 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/templates/dirinfo.html b/bitbake/lib/toaster/toastergui/templates/dirinfo.html
index df06a94..458e933 100644
--- a/bitbake/lib/toaster/toastergui/templates/dirinfo.html
+++ b/bitbake/lib/toaster/toastergui/templates/dirinfo.html
@@ -59,9 +59,6 @@
     function formatRow(o) {
         /* setup tr-wide formatting */
         var tr = '<tr class="';
-        if (o.link_to != null) {
-            tr += 'muted ';
-        }
         if (o.isdir && o.childcount) {
             tr += 'branch" data-tt-branch="true" ';
         }
@@ -75,7 +72,7 @@
         tr += '>';
 
         /* setup td specific formatting */
-        var link_to = td(o.link_to);
+				var link_to = '<td class="text-muted">' + o.link_to + '</td>';
         var size = '<td class = "sizecol">' + o.size + '</td>'
         var permission = td(o.permission);
         var owner = td(o.owner);
@@ -96,7 +93,7 @@
             if (o.childcount) {
                 name += '<a href="">';
             }
-            name += '<i class="icon-folder-close"></i>';
+            name += '<span class="glyphicon glyphicon-folder-close"></span>';
             name += '&nbsp;' + o.name;
             if (o.childcount) {
                 name += '</a>';
@@ -110,10 +107,10 @@
                   namespan = 3;
                 }
                 var colspan = 'colspan="' + namespan + '"';
-                name = '<td ' + colspan + '><i class="glyphicon glyphicon-file"></i>';
+                name = '<td ' + colspan + '><span class="glyphicon glyphicon-file"></span>';
             }
             else {
-                name = '<td><i class="icon-hand-right"></i>';
+                name = '<td class="text-muted"><span class="glyphicon glyphicon-hand-right"></span>';
             }
             name += '&nbsp;' + o.name;
             name += '</td>';
@@ -134,10 +131,10 @@
             package += '</a>';
             if (o.installed_package != o.package) {
                 /* make class muted and add hover help */
-                package += '<span class="muted"> as ' + o.installed_package + ' </span>';
-                package += '<i class="icon-question-sign get-help hover-help" ';
+                package += '<span class="text-muted"> as ' + o.installed_package + ' </span>';
+                package += '<span class="glyphicon glyphicon-question-sign get-help hover-help" ';
                 package += 'title="' + o.package + ' was renamed at packaging time and was installed in your image as ' + o.installed_package + '">';
-                package += '</i>';
+                package += '</span>';
             }
         }
         package = td(package);
@@ -186,20 +183,20 @@
 
 <div class="col-md-10">
 
-    <div class="page-header">
+    <div class="page-header build-data">
         <h1> {{target.target}} </h1>
     </div>
 
-    <ul class="nav nav-pills">
-        <li class="">
+    <ul class="nav nav-tabs">
+        <li>
             <a href="{% url 'target' build.id target.id %}">
-            <i class="icon-question-sign get-help" title="Of all the packages built, the subset installed in the root file system of this image"></i>
+            <span class="glyphicon glyphicon-question-sign get-help" title="Of all the packages built, the subset installed in the root file system of this image"></span>
                 Packages included ({{target.package_count}} - {{packages_sum|filtered_filesizeformat}})
             </a>
         </li>
         <li class="active">
             <a href="{% url 'dirinfo' build.id target.id %}">
-                <i class="icon-question-sign get-help" title="The directories and files in the root file system of this image"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The directories and files in the root file system of this image"></span>
                 Directory structure
             </a>
         </li>
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 06/20] toaster: build data Configuration to Bootstrap 3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (4 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 05/20] toaster: build data Directory structure to Boostrap 3 Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 07/20] toaster: build data Variables " Belen Barros Pena
                   ` (13 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the page showing the build configuration summary displays
correctly with Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 bitbake/lib/toaster/toastergui/templates/configuration.html | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/templates/configuration.html b/bitbake/lib/toaster/toastergui/templates/configuration.html
index 83bc5b2..1032ebe 100644
--- a/bitbake/lib/toaster/toastergui/templates/configuration.html
+++ b/bitbake/lib/toaster/toastergui/templates/configuration.html
@@ -14,13 +14,13 @@
 <!-- page title -->
 <div class="col-md-10">
 
- <div class="page-header">
+ <div class="page-header build-data">
      <h1>Configuration</h1>
  </div>
 
 <!-- configuration table -->
 <div id="navTab">
-<ul class="nav nav-pills">
+<ul class="nav nav-tabs">
     <li class="active"><a href="#">Summary</a></li>
     <li class=""><a href="{% url 'configvars' build.id %}">BitBake variables</a></li>
 </ul>
@@ -39,13 +39,13 @@
       {%if TUNE_FEATURES %}<dt>Tune features</dt><dd>{{TUNE_FEATURES}}</dd> {% endif %}
       {%if TARGET_FPU %}<dt>Target FPU</dt><dd>{{TARGET_FPU}}</dd> {% endif %}
       {%if targets.all %}<dt>Target(s)</dt>
-          <dd> <ul> {% for target in targets.all %}
+          <dd> <ul class="list-unstyled"> {% for target in targets.all %}
                <li>{{target.target}}{%if forloop.counter > 1 %}<br>{% endif %}</li>
           {% endfor %} </ul> </dd> {% endif %}
     </dl>
     <h3>Layers</h3>
     <div class="row">
-      <div class="col-md-9">
+      <div class="col-md-9 table-responsive">
         <table class="table table-bordered table-hover">
           <thead>
             <tr>
@@ -58,7 +58,7 @@
           <tr>
             <td>{{lv.layer.name}}</td>
             <td>{{lv.branch}}</td>
-            <td> <a class="btn" data-content="<ul class='list-unstyled'>
+            <td> <a class="btn btn-default" data-content="<ul class='list-unstyled'>
                   <li>{{lv.commit}}</li> </ul>">
                 {{lv.commit|truncatechars:13}}
             </a></td>
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 07/20] toaster: build data Variables to Bootstrap 3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (5 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 06/20] toaster: build data Configuration to Bootstrap 3 Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 08/20] toaster: build data Tasks table " Belen Barros Pena
                   ` (12 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the page showing the variable history displays correctly with
Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 .../lib/toaster/toastergui/static/css/default.css  |  26 +++-
 .../toastergui/templates/basetable_bottom.html     |  24 ++--
 .../toastergui/templates/basetable_top.html        | 135 ++++++++++++---------
 .../toaster/toastergui/templates/configvars.html   |  79 +++++++-----
 .../toastergui/templates/filtersnippet.html        |  40 +++---
 bitbake/lib/toaster/toastergui/views.py            |   1 -
 6 files changed, 179 insertions(+), 126 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css
index d808ab0..fe2c4c2 100644
--- a/bitbake/lib/toaster/toastergui/static/css/default.css
+++ b/bitbake/lib/toaster/toastergui/static/css/default.css
@@ -25,6 +25,13 @@ img.logo { height: 30px; vertical-align: bottom; }
 /* Set a limit to popover height to handle long dependency lists */
 .popover-content { max-height: 350px; overflow: scroll; }
 
+/* Set a limit to modal dialogs height to handle long variable history */
+[id^="variable-"] .modal-content { max-height: 550px; overflow-y: scroll; }
+
+/* Make sure long values in variable history do not make the modal dialogs
+ * scroll horizontally */
+[id^="variable-"] .modal-content p { word-break: break-all; }
+
 /* Increase bottom margin of definition lists inside popovers for the Toaster version information in the top navbar, and also inside the right hand columns of our details pages */
 .popover-content dd,
 .item-info dd { margin-bottom: 15px; }
@@ -51,18 +58,20 @@ img.logo { height: 30px; vertical-align: bottom; }
 
 /* Styles for our table controls */
 .form-control[id^="search-input-"],
-.form-control[id^="new-search-input-"] { width: 30em; }
+.form-control[id^="new-search-input-"],
+#search{ width: 30em; }
 #search-input-selectpackagestable,
 #search-input-packagestable,
-.form-control[id^="no-results-search-input-"]{ width: 20em; }
+.form-control[id^="no-results-search-input-"] { width: 20em; }
 #edit-columns-button { margin-right: 30px; }
-.navbar-default[id^="table-chrome-"] { background-color: transparent; }
+.navbar-default[id^="table-chrome-"],
+#variables .navbar-default { background-color: transparent; }
 [id^="table-chrome-collapse-"] .navbar-form { margin-left: -15px; }
 .dropdown-menu.editcol { padding-left: 10px; min-width: 200px; }
 span[class^="remove-search-btn-"] { position: absolute; right: 5px; top: 0; bottom: 0; height: 14px; margin: auto; font-size: 14px; cursor: pointer; color: #777;}
 span[class^="remove-search-btn-"]:hover { color: #333; }
-#no-results-special-selectpackagestable .form-inline { margin-top: 20px; }
-[id^="pagination-"] .pagination,
+#no-results-special-selectpackagestable .form-inline { margin-top: 20px; } 
+[id^="pagination-"] .pagination, 
 [id^="pagination-"] .navbar-form { margin-top: 0; }
 [id^="table-chrome-"] .navbar-form { margin-left: -15px; margin-right: -15px; }
 [id^="table-chrome-"] .detail-page-contols { padding-left: 0; padding-right: 0; }
@@ -208,6 +217,13 @@ td > .tooltip-inner,
 #recipestable .get_description_or_summary { width: 40%; }
 #machinestable .name { white-space: nowrap; }
 #machinestable .description { width: 45%; }
+#otable .variable_value,
+#otable .file { word-break: break-all; width: 25%; }
+[id^="variable-"] .file { word-break: break-all; }
+
+/* For the tables still not ported to ToasterTables, style the table headings
+ * that are not sortable */
+th > span.text-muted { font-weight: normal; }
 
 /* Override the rather ugly default code styles */
 code { color: #333; background-color: transparent; }
diff --git a/bitbake/lib/toaster/toastergui/templates/basetable_bottom.html b/bitbake/lib/toaster/toastergui/templates/basetable_bottom.html
index 96f405c..7fc3138 100644
--- a/bitbake/lib/toaster/toastergui/templates/basetable_bottom.html
+++ b/bitbake/lib/toaster/toastergui/templates/basetable_bottom.html
@@ -2,7 +2,7 @@
     </table>
 
 <!-- Show pagination controls -->
-<div>
+<div id="pagination-basetable_bottom">
    <!--span class="help-inline">Showing {{objects.start_index}} to {{objects.end_index}} out of {{objects.paginator.count}} entries.</span-->
 
    <ul class="pagination">
@@ -20,16 +20,18 @@
   <li class="disabled"><a href="#">&raquo;</a></li>
 {%endif%}
   </ul>
-  <div class="pull-right">
-    <span class="help-inline">Show rows:</span>
-    <select class="pagesize">
-      {% with "10 25 50 100 150" as list%}
-        {% for i in list.split %}
-            <option value="{{i}}">{{i}}</option>
-        {% endfor %}
-      {% endwith %}
-    </select>
-   </div>
+  <form class="navbar-form navbar-right">
+      <div class="form-group">
+          <label>Show rows:</label>
+          <select class="form-control pagesize">
+              {% with "10 25 50 100 150" as list%}
+              {% for i in list.split %}
+              <option value="{{i}}">{{i}}</option>
+              {% endfor %}
+              {% endwith %}
+          </select>
+      </div>   
+  </form>
 </div>
 
 <!-- Update page display settings -->
diff --git a/bitbake/lib/toaster/toastergui/templates/basetable_top.html b/bitbake/lib/toaster/toastergui/templates/basetable_top.html
index 6731ff2..61785f0 100644
--- a/bitbake/lib/toaster/toastergui/templates/basetable_top.html
+++ b/bitbake/lib/toaster/toastergui/templates/basetable_top.html
@@ -159,68 +159,83 @@
     </script>
 
 <!-- control header -->
-<div class="navbar">
-    <div class="navbar-inner">
-        <form class="navbar-search" id="searchform">
-          <div class="input-append">
-            <input id="search" name="search" type="text" placeholder="Search {%if object_search_display %}{{object_search_display}}{%else%}{{objectname}}{%endif%}" value="{%if request.GET.search %}{{request.GET.search}}{% endif %}"/>{% if request.GET.search %}<a href="javascript:$('#search').val('');searchform.submit()" class="input-append-addon btn" tabindex="-1"><i class="glyphicon glyphicon-remove"></i></a>{%endif%}
-            <input type="hidden" name="orderby" value="{{request.GET.orderby}}">
-            <input type="hidden" name="page" value="1">
-            <button class="btn" id="search-button" type="submit" value="Search">Search</button>
-          </div>
+<div class="navbar navbar-default">
+	<div class="container-fluid">
+		<div class="navbar-header">
+			<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#table-chrome-collapse-variablehistory" aria-expanded="false">
+				<span class="sr-only">Toggle table options</span>
+				<span class="icon-bar"></span>
+				<span class="icon-bar"></span>
+				<span class="icon-bar"></span>
+			</button>
+		</div>
+    <div class="collapse navbar-collapse" id="table-chrome-collapse-variablehistory">
+        <form class="navbar-form navbar-left" id="searchform">
+          <div class="form-group">
+						<div class="btn-group">
+							<input class="form-control" id="search" name="search" type="text" placeholder="Search {%if object_search_display %}{{object_search_display}}{%else%}{{objectname}}{%endif%}" value="{%if request.GET.search %}{{request.GET.search}}{% endif %}"/>
+							{% if request.GET.search %}<a href="javascript:$('#search').val('');searchform.submit()" tabindex="-1"><span class="remove-search-btn-variables glyphicon glyphicon-remove-circle"></span></a>{%endif%}
+						</div>
+					</div>
+          <input type="hidden" name="orderby" value="{{request.GET.orderby}}">
+          <input type="hidden" name="page" value="1">
+          <button class="btn btn-default" id="search-button" type="submit" value="Search">Search</button>
         </form>
-        <div class="pull-right">
-{% if tablecols %}
-            <div class="btn-group">
-                <button id="edit-columns-button" class="btn dropdown-toggle" data-toggle="dropdown">Edit columns
-                    <span class="caret"></span>
-                </button>
+        <form class="navbar-form navbar-right">
+					<div class="form-group">
+						<label>Show rows:</label>
+							<select class="pagesize form-control">
+              {% with "10 25 50 100 150" as list%}
+								{% for i in list.split %}
+									<option value="{{i}}">{{i}}</option>
+                {% endfor %}
+              {% endwith %}
+              </select>
+					</div>
+        </form>
+
+        <div class="btn-group navbar-right">
+				{% if tablecols %}
+					<button id="edit-columns-button" class="btn btn-default navbar-btn dropdown-toggle" data-toggle="dropdown">Edit columns
+						<span class="caret"></span>
+					</button>
 <!--
 	{{tablecols|sortcols}}
 -->
-                <ul id='editcol' class="dropdown-menu">
-                  {% for i in tablecols|sortcols %}
-                    <li>
-                        <label {% if not i.clclass %} class="checkbox muted" {%else%} class="checkbox" {%endif%}>
-                            <input type="checkbox" class="chbxtoggle"
-                                   {% if i.clclass %}
-                                       id="{{i.clclass}}"
-                                       value="ct{{i.name}}"
-                                       {% if not i.hidden %}
-                                           checked="checked"
-                                       {%endif%}
-                                       onclick="showhideTableColumn(
-                                           $(this).attr('id'),
-                                           $(this).is(':checked'),
-                                           {% if i.ordericon %}
-                                              '{{i.orderkey}}'
-                                           {% else %}
-                                              undefined
-                                           {% endif %}
-                                       )"
-                                   {%else%}
-                                       checked disabled
-                                   {% endif %}/>   {{i.name}}
-                        </label>
-                    </li>
-                  {% endfor %}
-                </ul>
-            </div>
-{% endif %}
-            <div style="display:inline">
-                <span class="divider-vertical"></span>
-                <span class="help-inline" style="padding-top:5px;">Show rows:</span>
-                <select style="margin-top:5px;margin-bottom:0px;" class="pagesize">
-                  {% with "10 25 50 100 150" as list%}
-                    {% for i in list.split %}
-                        <option value="{{i}}">{{i}}</option>
-                    {% endfor %}
-                  {% endwith %}
-                </select>
-           </div>
+					<ul id="editcol" class="dropdown-menu editcol">
+					{% for i in tablecols|sortcols %}
+						<li>
+							<div class="checkbox">
+								<label {% if not i.clclass %} class="muted" {%endif%}>
+									<input type="checkbox" class="chbxtoggle"
+									{% if i.clclass %}
+										id="{{i.clclass}}"
+										value="ct{{i.name}}"
+										{% if not i.hidden %}
+											checked="checked"
+										{%endif%}
+										onclick="showhideTableColumn(
+											$(this).attr('id'),
+											$(this).is(':checked'),
+											{% if i.ordericon %}
+												'{{i.orderkey}}'
+											{% else %}
+												undefined
+											{% endif %}
+										)"
+									{%else%}
+										checked disabled
+									{% endif %}/>{{i.name}}
+								</label>
+							</div>
+						</li>
+					{% endfor %}
+					</ul>
+				{% endif %}
         </div>
-    </div> <!-- navbar-inner -->
-</div>
+    </div> <!-- navbar-collapse -->
+	</div> <!-- container-fluid -->
+</div> <!-- navbar-default -->
 
 <!-- the actual rows of the table -->
     <table class="table table-bordered table-hover tablesorter" id="otable">
@@ -228,11 +243,11 @@
         <!-- Table header row; generated from "tablecols" entry in the context dict -->
         <tr>
             {% for tc in tablecols %}<th class="{%if tc.dclass%}{{tc.dclass}}{%endif%} {% if tc.clclass %}{{tc.clclass}}{% endif %}">
-                {%if tc.qhelp%}<i class="icon-question-sign get-help" title="{{tc.qhelp}}"></i>{%endif%}
-                {%if tc.orderfield%}<a {%if tc.ordericon%} class="sorted" {%endif%}href="javascript:reload_params({'page': 1, 'orderby' : '{{tc.orderfield}}' })">{{tc.name}}</a>{%else%}<span class="muted">{{tc.name}}</span>{%endif%}
+                {%if tc.qhelp%}<span class="glyphicon glyphicon-question-sign get-help" title="{{tc.qhelp}}"></span>{%endif%}
+                {%if tc.orderfield%}<a {%if tc.ordericon%} class="sorted" {%endif%}href="javascript:reload_params({'page': 1, 'orderby' : '{{tc.orderfield}}' })">{{tc.name}}</a>{%else%}<span class="text-muted">{{tc.name}}</span>{%endif%}
                 {%if tc.ordericon%} <i class="icon-caret-{{tc.ordericon}}"></i>{%endif%}
                 {%if tc.filter%}<div class="btn-group pull-right">
-                    <a href="#filter_{{tc.filter.class}}" role="button" class="btn btn-mini {%if request.GET.filter%}{{tc.filter.options|filtered_icon:request.GET.filter}} {%endif%}" {%if request.GET.filter and tc.filter.options|filtered_tooltip:request.GET.filter %} title="<p>{{tc.filter.options|filtered_tooltip:request.GET.filter}}</p><p><a class='btn btn-sm btn-primary' href=javascript:reload_params({'filter':''})>Show all {% if filter_search_display %}{{filter_search_display}}{% else %}{{objectname}}{% endif %}</a></p>" {%endif%} data-toggle="modal"> <i class="glyphicon glyphicon-filter filtered"></i> </a>
+                    <a href="#filter_{{tc.filter.class}}" role="button" class="btn btn-xs {%if request.GET.filter%}{{tc.filter.options|filtered_icon:request.GET.filter}} {%endif%}" {%if request.GET.filter and tc.filter.options|filtered_tooltip:request.GET.filter %} title="<p>{{tc.filter.options|filtered_tooltip:request.GET.filter}}</p><p><a class='btn btn-sm btn-primary' href=javascript:reload_params({'filter':''})>Show all {% if filter_search_display %}{{filter_search_display}}{% else %}{{objectname}}{% endif %}</a></p>" {%endif%} data-toggle="modal"> <span class="glyphicon glyphicon-filter filtered"></span> </a>
                 </div>{%endif%}
             </th>{% endfor %}
         </tr>
diff --git a/bitbake/lib/toaster/toastergui/templates/configvars.html b/bitbake/lib/toaster/toastergui/templates/configvars.html
index f100b24..563e8c7 100644
--- a/bitbake/lib/toaster/toastergui/templates/configvars.html
+++ b/bitbake/lib/toaster/toastergui/templates/configvars.html
@@ -13,7 +13,7 @@
 {% block buildinfomain %}
 <!-- page title -->
 <div class="col-md-10">
- <div class="page-header">
+ <div class="page-header build-data">
  <h1>
   {% if request.GET.filter and objects.paginator.count > 0 or request.GET.search and objects.paginator.count > 0 %}
       {{objects.paginator.count}} variable{{objects.paginator.count|pluralize}} found
@@ -27,7 +27,7 @@
 
 <!-- configuration table -->
 <div id="navTab">
-  <ul class="nav nav-pills">
+  <ul class="nav nav-tabs">
     <li class=""><a href="{% url 'configuration' build.id %}">Summary</a></li>
     <li class="active"><a href="#" >BitBake variables</a></li>
   </ul>
@@ -36,11 +36,20 @@
   <div id="variables" class="tab-pane">
 
   {% if objects.paginator.count == 0 %}
-    <div class="alert">
-      <form class="no-results input-append" id="searchform">
-          <input id="search" name="search" class="input-xxlarge" type="text" value="{% if request.GET.search %}{{request.GET.search}}{% endif %}"/>{% if request.GET.search %}<a href="javascript:$('#search').val('');searchform.submit()" class="input-append-addon btn" tabindex="-1"><i class="glyphicon glyphicon-remove"></i></a>{% endif %}
-          <button class="btn" type="submit" value="Search">Search</button>
-          <button class="btn btn-link" onclick="javascript:$('#search').val('');searchform.submit()">Show all variables</button>
+    <div class="alert alert-warning">
+      <form class="no-results form-inline" id="searchform">
+				<div class="form-group">
+					<div class="btn-group">
+						<input class="form-control" id="search" name="search" type="text" value="{% if request.GET.search %}{{request.GET.search}}{% endif %}"/>
+						{% if request.GET.search %}
+							<a href="javascript:$('#search').val('');searchform.submit()" tabindex="-1">
+								<span class="remove-search-btn-variables glyphicon glyphicon-remove-circle"></span>
+							</a>
+						{% endif %}
+					</div>
+				</div>
+				<button class="btn btn-default" type="submit" value="Search">Search</button>
+        <button class="btn btn-link" onclick="javascript:$('#search').val('');searchform.submit()">Show all variables</button>
       </form>
     </div>
 
@@ -50,24 +59,26 @@
   {% for variable in objects %}
     <tr class="data">
         <td class="variable_name"><a data-toggle="modal" href="#variable-{{variable.pk}}">{{variable.variable_name}}</a></td>
-        <td class="variable_value"><a data-toggle="modal" href="#variable-{{variable.pk}}">{{variable.variable_value|truncatechars:153}}</a></td>
-        <td class="file"><a data-toggle="modal" href="#variable-{{variable.pk}}">
+        <td class="variable_value">{{variable.variable_value|truncatechars:153}}</td>
+        <td class="file">
             {% if variable.vhistory.all %}
                 {% for path in variable.vhistory.all|filter_setin_files:file_filter %}
                     {{path}}<br/>
                 {% endfor %}
             {% endif %}
-        </a></td>
+        </td>
         <td class="description">
             {% if variable.description %}
                 {{variable.description}}
                 <a href="http://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#var-{{variable.variable_name|variable_parent_name}}" target="_blank">
-                <i class="glyphicon glyphicon-share get-info"></i></a>
+                <span class="glyphicon glyphicon-new-window get-info"></span></a>
             {% endif %}
         </td>
     </tr>
 {% endfor %}
-
+	</tbody>
+</table>
+</div> <! -- table-responsive -->
 {% include "basetable_bottom.html" %}
 {% endif %}
 </div> <!-- endvariables -->
@@ -75,7 +86,7 @@
 <!-- file list popups -->
 {% for variable in objects %}
     {% if variable.vhistory.count %}
-    <div id="variable-{{variable.pk}}" class="modal in fade" tabindex="-1" role="dialog">
+    <div id="variable-{{variable.pk}}" class="modal fade" tabindex="-1" role="dialog">
       <div class="modal-dialog">
 	<div class="modal-content">
 	  <div class="modal-header">
@@ -95,34 +106,36 @@
 	    <span>{{variable.variable_value|string_slice:':570'}}
 	      <span class="full"> {{variable.variable_value|string_slice:'570:'}}
 	      </span>
-	      <a class="btn btn-mini full-show">...</a>
+	      <a href="#" class="full-show">...</a>
 	    </span>
 	    </p>
-	    <a class="btn btn-mini full-hide">Collapse variable value <i class="icon-caret-up"></i>
+	    <a href="#" class="full-hide">Collapse variable value <i class="icon-caret-up"></i>
 	    </a>
 	    {% endif %}
 	    {% else %}
 	    <div class="alert alert-info">The value of <strong>{{variable.variable_name}}</strong> is an empty string</div>
 	    {% endif %}
 	    <h4>The value was set in the following configuration files:</h4>
-	    <table class="table table-bordered table-hover">
-	      <thead>
-		<tr>
-		  <th>Order</th>
-		  <th>Configuration file</th>
-		  <th>Operation</th>
-		  <th>Line number</th>
-		</tr>
-	      </thead>
-	      <tbody>
-		{% for vh in variable.vhistory.all %}
-		<tr>
-		  <td>{{forloop.counter}}</td><td>{{vh.file_name}}</td><td>{{vh.operation}}</td><td>{{vh.line_number}}</td>
-		</tr>
-		{%endfor%}
-	      </tbody>
-	    </table>
-	  </div>
+			<div class="table-responsive">
+				<table class="table table-bordered table-hover">
+					<thead>
+						<tr>
+							<th>Order</th>
+							<th>Configuration file</th>
+							<th>Operation</th>
+							<th>Line</th>
+						</tr>
+					</thead>
+					<tbody>
+					{% for vh in variable.vhistory.all %}
+					<tr>
+						<td>{{forloop.counter}}</td><td class="file">{{vh.file_name}}</td><td>{{vh.operation}}</td><td>{{vh.line_number}}</td>
+					</tr>
+					{%endfor%}
+					</tbody>
+				</table>
+			</div>
+		</div>
 	</div><!-- /.modal-content -->
       </div><!-- /.modal-dialog -->
     </div><!-- /.modal -->
diff --git a/bitbake/lib/toaster/toastergui/templates/filtersnippet.html b/bitbake/lib/toaster/toastergui/templates/filtersnippet.html
index 4c2c53e..9f86eaa 100644
--- a/bitbake/lib/toaster/toastergui/templates/filtersnippet.html
+++ b/bitbake/lib/toaster/toastergui/templates/filtersnippet.html
@@ -17,25 +17,27 @@
 	</div>
 	<div class="modal-body">
 	  <p>{{f.label}}</p>
-	  <label class="radio">
-	    <input type="radio" name="filter" {%if request.GET.filter%}{{f.options|check_filter_status:request.GET.filter}} {%else%} checked {%endif%} value="" data-key="{{key}}">  All {%if filter_search_display%}{{filter_search_display|title}}{%else%}{{objectname|title}}{%endif%}
-	  </label>
+		<div class="radio">
+			<label>
+				<input type="radio" name="filter" {%if request.GET.filter%}{{f.options|check_filter_status:request.GET.filter}} {%else%} checked {%endif%} value="" data-key="{{key}}">  All {%if filter_search_display%}{{filter_search_display|title}}{%else%}{{objectname|title}}{%endif%}
+			</label>
+		</div>
 	  {% for option in f.options %}
+			<div class="radio">
 	  {% if option.1 == 'daterange' %}
-	  <div class="form-inline">
-	    <label class="radio">
+	    <label>
 	      <input type="radio" name="filter" id="filter_value_{{key}}" {%if key == daterange_selected %}checked{%endif%} value="{{option.1}}" data-key="{{key}}"> {{option.0}}
-	      {% else %}
+				{% else %}
 	      {% if 1 %}
-	      <label class="radio">
-		<input type="radio" name="filter" {%if request.GET.filter == option.1 %}checked{%endif%}  value="{{option.1}}" data-key="{{key}}"> {{option.0}}
+	      <label>
+					<input type="radio" name="filter" {%if request.GET.filter == option.1 %}checked{%endif%}  value="{{option.1}}" data-key="{{key}}"> {{option.0}}
 		{% comment "do not disable radio selections by count for now" %}{% else %}
-		<label class="radio muted">
+		<label class="text-muted">
 		  <input type="radio" name="filter" disabled {%if request.GET.filter == option.1 %}checked{%endif%}  value="{{option.1}}" data-key="{{key}}"> {{option.0}}
 		  {% endcomment %}{% endif %}
 		  {% endif %}
 		  {% if option.3 %}<i class="icon-question-sign get-help" data-placement="right" title="{{option.3}}"></i>{% endif %}
-		</label>
+	</label></div>
 		{% if option.1 == 'daterange' %}
 		<input type="text" id="date_from_{{key}}" name="date_from_{{key}}" disabled class="input-sm" /><label class="help-inline">to</label>
 		<input type="text" id="date_to_{{key}}" name="date_to_{{key}}" disabled class="input-sm"  />
@@ -50,12 +52,18 @@
 	  {% endif %}
 	</div>
 	<div class="modal-footer">
-	  <button type="submit" class="btn btn-primary" data-key="{{key}}">Apply</button>
-	  {% if request.GET.filter %}
-	  {% if request.GET.filter|string_remove_regex:':.*' != f.options.0.1|string_remove_regex:':.*' %}
-	  <span class="help-inline pull-left">You can only apply one filter to the table. This filter will override the current filter.</span>
-	  {% endif %}
-	  {% endif %}
+		<div class="row">
+			<div class="col-md-6">
+				<button type="submit" class="btn btn-primary" data-key="{{key}}">Apply</button>
+			</div>
+			<div class="col-md-6">
+				{% if request.GET.filter %}
+				{% if request.GET.filter|string_remove_regex:':.*' != f.options.0.1|string_remove_regex:':.*' %}
+				<p class="text-right text-muted">You can only apply one filter to the table. This filter will override the current filter.</p>
+				{% endif %}
+				{% endif %}
+			</div>
+		</div>	
 	</div>
       </form>
     </div><!-- /.modal-content -->
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index 1f908ea..f05677e 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -898,7 +898,6 @@ def configvars(request, build_id):
                 },
                 {'name': 'Value',
                  'qhelp': "The value assigned to the variable",
-                 'dclass': "span4",
                 },
                 {'name': 'Set in file',
                  'qhelp': "The last configuration file that touched the variable value",
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 08/20] toaster: build data Tasks table to Bootstrap 3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (6 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 07/20] toaster: build data Variables " Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-10 11:53   ` Michael Wood
  2016-06-09 13:24 ` [PATCH 09/20] toaster: build data Recipes " Belen Barros Pena
                   ` (11 subsequent siblings)
  19 siblings, 1 reply; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the tasks table and all build performance tables display
correctly with Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 bitbake/lib/toaster/toastergui/buildtables.py      | 39 +++++++++++-----------
 .../templates/buildinfo-toastertable.html          |  4 +--
 2 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/buildtables.py b/bitbake/lib/toaster/toastergui/buildtables.py
index 5d00aa4..b92d405 100644
--- a/bitbake/lib/toaster/toastergui/buildtables.py
+++ b/bitbake/lib/toaster/toastergui/buildtables.py
@@ -426,9 +426,7 @@ class BuildTasksTable(BuildTablesMixin):
             '</a>'
 
         recipe_version_tmpl =\
-            '<a href="{% url "recipe" extra.build.pk data.recipe.pk %}">'\
-            '{{data.recipe.version}}'\
-            '</a>'
+            '{{data.recipe.version}}'
 
         def task_link_tmpl(val):
             return ('<a name="task-{{data.order}}"'
@@ -438,7 +436,13 @@ class BuildTasksTable(BuildTablesMixin):
 
         self.add_column(title="Order",
                         static_data_name="order",
-                        static_data_template=task_link_tmpl('{{data.order}}'),
+                        static_data_template='{{data.order}}',
+                        orderable=True)
+
+        self.add_column(title="Task",
+                        static_data_name="task_name",
+                        static_data_template=task_link_tmpl(
+                            "{{data.task_name}}"),
                         orderable=True)
 
         self.add_column(title="Recipe",
@@ -450,31 +454,24 @@ class BuildTasksTable(BuildTablesMixin):
                         static_data_name='recipe__version',
                         static_data_template=recipe_version_tmpl)
 
-        self.add_column(title="Task",
-                        static_data_name="task_name",
-                        static_data_template=task_link_tmpl(
-                            "{{data.task_name}}"),
-                        orderable=True)
-
         self.add_column(title="Executed",
                         static_data_name="task_executed",
-                        static_data_template=task_link_tmpl(
-                            "{{data.get_executed_display}}"),
+                        static_data_template='{{data.get_executed_display}}',
                         filter_name='execution_outcome',
                         orderable=True)
 
         self.static_context_extra['OUTCOME_FAILED'] = Task.OUTCOME_FAILED
-        outcome_tmpl = task_link_tmpl("{{data.outcome_text}}")
+        outcome_tmpl = '{{data.outcome_text}}'
         outcome_tmpl = ('%s '
                         '{%% if data.outcome = extra.OUTCOME_FAILED %%}'
                         '<a href="{%% url "build_artifact" extra.build.pk '
                         '          "tasklogfile" data.pk %%}">'
-                        ' <i class="icon-download-alt" '
-                        '    title="Download task log file"></i>'
+                        ' <span class="glyphicon glyphicon-download-alt get-help" '
+                        '    title="Download task log file"></span>'
                         '</a> {%% endif %%}'
-                        '<i class="icon-question-sign get-help '
+                        '<span class="glyphicon glyphicon-question-sign get-help '
                         'hover-help" style="visibility: hidden;" '
-                        'title="{{data.get_outcome_help}}"></i>'
+                        'title="{{data.get_outcome_help}}"></span>'
                         ) % outcome_tmpl
 
         self.add_column(title="Outcome",
@@ -483,10 +480,11 @@ class BuildTasksTable(BuildTablesMixin):
                         filter_name="task_outcome",
                         orderable=True)
 
+        self.toggle_columns['sstate_result'] = len(self.columns)
+
         self.add_column(title="Cache attempt",
                         static_data_name="sstate_result",
-                        static_data_template=task_link_tmpl(
-                            "{{data.sstate_text}}"),
+                        static_data_template='{{data.sstate_text}}',
                         filter_name="sstate_outcome",
                         orderable=True)
 
@@ -542,6 +540,7 @@ class BuildTimeTable(BuildTasksTable):
         super(BuildTimeTable, self).setup_columns(**kwargs)
 
         self.columns[self.toggle_columns['order']]['hidden'] = True
+        self.columns[self.toggle_columns['sstate_result']]['hidden'] = True
         self.columns[self.toggle_columns['elapsed_time']]['hidden'] = False
 
 
@@ -556,6 +555,7 @@ class BuildCPUTimeTable(BuildTasksTable):
         super(BuildCPUTimeTable, self).setup_columns(**kwargs)
 
         self.columns[self.toggle_columns['order']]['hidden'] = True
+        self.columns[self.toggle_columns['sstate_result']]['hidden'] = True
         self.columns[self.toggle_columns['cpu_time_sys']]['hidden'] = False
         self.columns[self.toggle_columns['cpu_time_user']]['hidden'] = False
 
@@ -571,4 +571,5 @@ class BuildIOTable(BuildTasksTable):
         super(BuildIOTable, self).setup_columns(**kwargs)
 
         self.columns[self.toggle_columns['order']]['hidden'] = True
+        self.columns[self.toggle_columns['sstate_result']]['hidden'] = True
         self.columns[self.toggle_columns['disk_io']]['hidden'] = False
diff --git a/bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html b/bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html
index 52cc056..eb4c656 100644
--- a/bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html
+++ b/bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html
@@ -11,10 +11,10 @@
 {% endblock %}
 
 {% block buildinfomain %}
-<div class="span10">
+<div class="col-md-10">
 {# xhr_table_url is just the current url so leave it blank #}
 {% with xhr_table_url='' %}
-  <div class="page-header">
+  <div class="page-header build-data">
      <h1>
        {{title}} (<span class="table-count-{{table_name}}">0</span>) </h2>
      </h1>
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 09/20] toaster: build data Recipes table to Bootstrap 3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (7 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 08/20] toaster: build data Tasks table " Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 10/20] toaster: build data Task details " Belen Barros Pena
                   ` (10 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the recipes built table displays correctly with Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 bitbake/lib/toaster/toastergui/buildtables.py | 30 +++++++++++++--------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/buildtables.py b/bitbake/lib/toaster/toastergui/buildtables.py
index b92d405..03142f8 100644
--- a/bitbake/lib/toaster/toastergui/buildtables.py
+++ b/bitbake/lib/toaster/toastergui/buildtables.py
@@ -246,9 +246,7 @@ class BuiltRecipesTable(BuildTablesMixin):
             '</a>'
 
         recipe_version_tmpl =\
-            '<a href="{% url "recipe" extra.build.pk data.pk %}">'\
-            '{{data.version}}'\
-            '</a>'
+            '{{data.version}}'
 
         recipe_file_tmpl =\
             '{{data.file_path}}'\
@@ -265,10 +263,10 @@ class BuiltRecipesTable(BuildTablesMixin):
         {% with deps=data.r_dependencies_recipe.all %}
         {% with count=deps|length %}
         {% if count %}
-        <a class="btn" title="
+        <a class="btn btn-default" title="
         <a href='{% url "recipe" extra.build.pk data.pk %}#dependencies'>
         {{data.name}}</a> dependencies"
-        data-content="<ul class='unstyled'>
+        data-content="<ul class='list-unstyled'>
         {% for dep in deps|dictsort:"depends_on.name"%}
         <li><a href='{% url "recipe" extra.build.pk dep.depends_on.pk %}'>
         {{dep.depends_on.name}}</a></li>
@@ -283,11 +281,11 @@ class BuiltRecipesTable(BuildTablesMixin):
         {% with revs=data.r_dependencies_depends.all %}
         {% with count=revs|length %}
         {% if count %}
-        <a class="btn"
+        <a class="btn btn-default"
         title="
         <a href='{% url "recipe" extra.build.pk data.pk %}#brought-in-by'>
         {{data.name}}</a> reverse dependencies"
-        data-content="<ul class='unstyled'>
+        data-content="<ul class='list-unstyled'>
         {% for dep in revs|dictsort:"recipe.name" %}
         <li>
         <a href='{% url "recipe" extra.build.pk dep.recipe.pk %}'>
@@ -313,24 +311,24 @@ class BuiltRecipesTable(BuildTablesMixin):
 
         self.add_column(title="Dependencies",
                         static_data_name="dependencies",
-                        static_data_template=depends_on_tmpl,
-                        hidden=True)
+                        static_data_template=depends_on_tmpl)
 
         self.add_column(title="Reverse dependencies",
                         static_data_name="revdeps",
                         static_data_template=rev_depends_tmpl,
                         help_text='Recipe build-time reverse dependencies'
-                        ' (i.e. the recipes that depend on this recipe)',
-                        hidden=True)
+                        ' (i.e. the recipes that depend on this recipe)')
 
         self.add_column(title="Recipe file",
                         field_name="file_path",
                         static_data_name="file_path",
-                        static_data_template=recipe_file_tmpl)
+                        static_data_template=recipe_file_tmpl,
+                        hidden=True)
 
         self.add_column(title="Section",
                         field_name="section",
-                        orderable=True)
+                        orderable=True,
+                        hidden=True)
 
         self.add_column(title="License",
                         field_name="license",
@@ -347,11 +345,13 @@ class BuiltRecipesTable(BuildTablesMixin):
 
         self.add_column(title="Layer branch",
                         field_name="layer_version__branch",
-                        orderable=True)
+                        orderable=True,
+                        hidden=True)
 
         self.add_column(title="Layer commit",
                         static_data_name="commit",
-                        static_data_template=git_rev_template)
+                        static_data_template=git_rev_template,
+                        hidden=True)
 
 
 class BuildTasksTable(BuildTablesMixin):
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 10/20] toaster: build data Task details to Bootstrap 3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (8 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 09/20] toaster: build data Recipes " Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 11/20] toaster: build data Recipe " Belen Barros Pena
                   ` (9 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the task details page displays correctly with Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 bitbake/lib/toaster/toastergui/templates/task.html | 159 +++++++++++++++------
 1 file changed, 112 insertions(+), 47 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/templates/task.html b/bitbake/lib/toaster/toastergui/templates/task.html
index 77391b4..86789bd 100644
--- a/bitbake/lib/toaster/toastergui/templates/task.html
+++ b/bitbake/lib/toaster/toastergui/templates/task.html
@@ -13,19 +13,20 @@
 
 <div class="row">
   <div class="col-md-12">
-    <div class="page-header">
+    <div class="page-header build-data">
         <h1><a href="{%url 'recipe' build.pk task.recipe.pk %}">{{task.recipe.name}}_{{task.recipe.version}}</a> {{task.task_name}}</h1>
     </div>
 
 {# Outcome section #}
 <h2 {{ task|task_color:True }}>
     {{task.get_outcome_display}}
-    <i class="icon-question-sign get-help heading-help" title="{{task.get_outcome_help}}"></i>
+    <span class="glyphicon glyphicon-question-sign get-help" title="{{task.get_outcome_help}}"></i>
 </h2>
 {%if task.task_executed %}
     {# executed tasks outcome #}
     {% if task.logfile %}
-            <a class="btn btn-lg" href="{% url 'build_artifact' build.id "tasklogfile" task.pk %}" style="margin:15px;">Download task log</a>
+            <a class="btn btn-default btn-lg" href="{% url 'build_artifact' build.id
+                "tasklogfile" task.pk %}">Download task log</a>
     {% endif %}
         {# show stack trace for failed task #}
         {% if task.outcome == task.OUTCOME_FAILED and log_head %}
@@ -41,31 +42,55 @@
 {# not executed tasks outcome #}
     {% if task.outcome == task.OUTCOME_PREBUILT %}
         {% if not showing_matches %}
-            <a class="btn" href="javascript:reload_params({'show_matches' : 'true' })">Match to tasks in previous builds <i class="icon-question-sign get-help" style="margin-top:20px;" title="This shows you a list of tasks from previous builds with the same signature generated from the same inputs as used in the prebuilt task. Any of them could be the task that generated the output this prebuilt task is reusing"></i></a>
+            <a class="btn btn-default"
+                href="javascript:reload_params({'show_matches' : 'true'
+        })">Match to tasks in previous builds <span class="glyphicon
+glyphicon-question-sign get-help" title="This shows you a list of tasks from
+previous builds with the same signature generated from the same inputs as used
+in the prebuilt task. Any of them could be the task that generated the output
+this prebuilt task is reusing"></span></a>
         {% elif matching_tasks %}
             <h3 class="details">Prebuilt task could be based on
-                <i class="icon-question-sign get-help heading-help" title="This table shows a list of tasks from previous builds with the same signature generated from the same inputs as used in the prebuilt task. Any of them could be the task that generated the output this prebuilt task is reusing"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="This
+                    table shows a list of tasks from previous builds with the
+                same signature generated from the same inputs as used in the
+            prebuilt task. Any of them could be the task that generated the
+        output this prebuilt task is reusing"></span>
             </h3>
+        <div class="table-responsive">
             <table class="table table-bordered table-hover">
                 <thead>
                     <th>
-                        <i class="icon-question-sign get-help" title="The name of the recipe to which each task applies"></i>
+                        <span class="glyphicon glyphicon-question-sign
+                            get-help" title="The name of the recipe to which
+                        each task applies"></span>
                         Recipe
                     </th>
                     <th>
-                        <i class="icon-question-sign get-help" title="The name of the task"></i>
+                        <span class="glyphicon glyphicon-question-sign get-help" title="The name
+                            of the task"></span>
                         Task
                     </th>
                     <th>
-                        <i class="icon-question-sign get-help" title="This value tells you if a task had to run (executed) in order to generate the task output, or if the output was provided by another task and therefore the task didn't need to run (not executed)"></i>
+                        <span class="glyphicon glyphicon-question-sign get-help" title="This
+                            value tells you if a task had to run (executed) in
+                        order to generate the task output, or if the output was
+                    provided by another task and therefore the task didn't need
+                to run (not executed)"></span>
                         Executed
                     </th>
                     <th>
-                        <i class="icon-question-sign get-help" title="This column tells you if 'executed' tasks succeeded or failed. The column also tells you why 'not executed' tasks did not need to run"></i>
+                        <span class="glyphicon glyphicon-question-sign
+                            get-help" title="This column tells you if
+                        'executed' tasks succeeded or failed. The column also
+                    tells you why 'not executed' tasks did not need to
+                run"></span>
                         Outcome
                     </th>
                     <th>
-                        <i class="icon-question-sign get-help" title="The date and time the build finished"></i>
+                        <span class="glyphicon glyphicon-question-sign
+                            get-help" title="The date and time the build
+                        finished"></span>
                         Build completed on
                     </th>
                 </thead>
@@ -73,27 +98,34 @@
                     {% for match in matching_tasks %}
                         <tr {{ match|task_color }}>
                             <td>
-                                <a href="{%url "task" match.build.pk match.pk%}">{{match.recipe.name}}</a>
+                                {{match.recipe.name}}
                             </td>
                             <td>
                                 <a href="{%url "task" match.build.pk match.pk%}">{{match.task_name}}</a>
                                 {% if task.get_description %}
-                                    <i class="icon-question-sign get-help hover-help" title="{{task.get_description}}"></i>
+                                    <span class="glyphicon
+                                        glyphicon-question-sign get-help
+                                    hover-help"
+                                title="{{task.get_description}}"></span>
                                 {% endif %}
                             </td>
                             <td>
-                                <a href="{%url "task" match.build.pk match.pk%}">{{match.get_executed_display}}</a>
+                                {{match.get_executed_display}}
                             </td>
                             <td>
-                                <a href="{%url "task" match.build.pk match.pk%}">{{match.get_outcome_display}} </a><i class="icon-question-sign get-help hover-help" title="{{match.get_outcome_help}}"></i>
+                                {{match.get_outcome_display}}
+                                <span class="glyphicon glyphicon-question-sign
+                                get-help hover-help"
+                            title="{{match.get_outcome_help}}"></span>
                             </td>
                             <td>
-                                <a href="{%url "task" match.build.pk match.pk%}">{{match.build.completed_on|date:"d/m/y H:i"}}</a>
+                                {{match.build.completed_on|date:"d/m/y H:i"}}
                             </td>
                         </tr>
                     {% endfor %}
                 </tbody>
             </table>
+        </div>
         {% else %}
             <p class="alert">
                 <strong> We have found no tasks matching this prebuilt task</strong><br/>
@@ -103,10 +135,11 @@
     {% elif task.outcome == task.OUTCOME_COVERED %}
         <dl class="dl-horizontal">
             <dt>
-                <i class="icon-question-sign get-help" title="The task(s) providing the outcome of this task"></i> Task covered by
+                <span class="glyphicon glyphicon-question-sign get-help" title="The task(s)
+                    providing the outcome of this task"></span> Task covered by
             </dt>
             <dd>
-                <ul>
+                <ul class="list-unstyled">
                   {% for t in covered_by %}
                     <li>
                       <a href="{%url 'task' t.build.pk t.pk%}"
@@ -123,7 +156,8 @@
     {%elif task.outcome == task.OUTCOME_CACHED%}
             {% for t in task.get_related_setscene %}
                 {% if forloop.last %}
-                    <a class="btn btn-lg" href="{% url 'build_artifact' build.id "tasklogfile" t.pk %}" style="margin:15px;">Download task log</a>
+                    <a class="btn btn-default btn-lg" href="{% url
+                        'build_artifact' build.id "tasklogfile" t.pk %}">Download task log</a>
                 {% endif %}
             {% endfor %}
 
@@ -138,17 +172,25 @@
     {% if task.task_executed %}
     <h2>
         Executed
-        <i class="icon-question-sign get-help heading-help" title="'Executed' tasks are those that need to run in order to generate the task output"></i>
+        <span class="glyphicon glyphicon-question-sign get-help"
+            title="'Executed' tasks are those that need to run in order to
+        generate the task output"></span>
     {% else %}
-    <h2 class="muted">
+    <h2>
         Not Executed
-        <i class="icon-question-sign get-help heading-help" title="'Not executed' tasks don't need to run because their outcome is provided by another task"></i>
+        <span class="glyphicon glyphicon-question-sign get-help" title="'Not
+            executed' tasks don't need to run because their outcome is provided
+        by another task"></span>
     {% endif %}
     </h2>
 
 <dl class="dl-horizontal">
     <dt>
-        <i class="icon-question-sign get-help" title="To make builds more efficient, the build system detects changes in the 'inputs' to a given task by creating a 'task signature'. If the signature changes, the build system assumes the inputs have changed and the task needs to be rerun"></i>
+        <span class="glyphicon glyphicon-question-sign get-help" title="To make builds more
+            efficient, the build system detects changes in the 'inputs' to a
+        given task by creating a 'task signature'. If the signature changes,
+    the build system assumes the inputs have changed and the task needs to be
+rerun"></span>
         Task inputs signature
     </dt>
     <dd>
@@ -157,19 +199,29 @@
     {% if task.sstate_result != task.SSTATE_NA %}
   </dl>
         <div class="alert alert-info">Attempting to restore output from sstate cache
-            <i class="icon-question-sign get-help get-help-blue" title="The build system is searching for the task output in your <code>sstate-cache</code> directory and mirrors. If the build system finds the task output, it will reuse it instead of building it from scratch by running the real task. Reusing the task output makes the build faster"></i>
+            <span class="glyphicon glyphicon-question-sign get-help
+                get-help-blue" title="The build system is searching for the
+                task output in your <code>sstate-cache</code> directory and
+                mirrors. If the build system finds the task output, it will reuse it
+                instead of building it from scratch by running the real task. Reusing the
+                task output makes the build faster"></span>
         </div>
         <dl class="dl-horizontal">
             <dt>
-                <i class="icon-question-sign get-help" title="The name of the file searched for in your <code>sstate-cache</code> directory and mirrors"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The name of the
+                    file searched for in your <code>sstate-cache</code>
+                    directory and mirrors"></span>
                 File searched for
             </dt>
             <dd><code>{{task.path_to_sstate_obj}}</code></dd>
             <dt>
-                <i class="icon-question-sign get-help" title="The locations searched for the above file (i.e. your <code>sstate-cache</code> directory and any mirrors you have set up)"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The locations
+                    searched for the above file (i.e. your
+                    <code>sstate-cache</code> directory and any mirrors you have
+                    set up)"></span>
                 URI(s) searched
             </dt>
-            <dd><ul>{% for uri in uri_list %}<li><code>{{uri}}</code></li>{% endfor %}</ul></dd>
+            <dd><ul class="list-unstyled">{% for uri in uri_list %}<li><code>{{uri}}</code></li>{% endfor %}</ul></dd>
         </dl>
     {% endif %}
     {% if task.sstate_result == task.SSTATE_MISS %}
@@ -177,7 +229,7 @@
             <strong>File not in sstate cache.</strong> Running the real task instead.
         </div>
     {% elif task.sstate_result == task.SSTATE_FAILED%}
-        <div class="alert">
+        <div class="alert alert-warning">
             <strong>Failed</strong> to restore output from sstate cache. The file was found but could not be unpacked.
         </div>
         <dl class="dl-horizontal">
@@ -193,13 +245,16 @@
     {% endif %}
     <dl class="dl-horizontal">
     <dt>
-        <i class="icon-question-sign get-help" title="The running sequence of each task in the build"></i>
+        <span class="glyphicon glyphicon-question-sign get-help" title="The
+            running sequence of each task in the build"></span>
         Task order
     </dt>
     <dd><a href="{%url "tasks" build.pk %}?page={{task_in_tasks_table_pg}}&limit=25#task-{{task.order}}">{{task.order}}</a></dd>
     {% if task.task_executed %}
         <dt>
-            <i class="icon-question-sign get-help" title="Indicates if this task executes a Python or Shell function(s)"></i>
+            <span class="glyphicon glyphicon-question-sign get-help"
+                title="Indicates if this task executes a Python or Shell
+            function(s)"></span>
             Task script type
         </dt>
         <dd>{{task.get_script_type_display}}</dd>
@@ -212,29 +267,31 @@
     <dd><code>{{task.source_url}}</code></dd>
 -->
     <dt>
-        <i class="icon-question-sign get-help" title="Task dependency chain (i.e. other tasks)"></i>
+        <span class="glyphicon glyphicon-question-sign get-help" title="Task dependency chain
+            (i.e. other tasks)"></span>
         Dependencies
     </dt>
     <dd>
-        <ul>
-            {% for dep in deps %}
-                <li><a href="{%url 'task' dep.build.pk dep.pk%}" class="task-info" title="{{dep.get_executed_display}} | {{dep.get_outcome_display}}">{{dep.recipe.name}}_{{dep.recipe.version}} <span class="task-name">{{dep.task_name}}</span></a></li>
-            {% empty %}
-                <li class="muted">This task has no dependencies</li>
-            {% endfor %}
+        <ul class="list-unstyled">
+        {% for dep in deps %}
+            <li><a href="{%url 'task' dep.build.pk dep.pk%}" class="task-info" title="{{dep.get_executed_display}} | {{dep.get_outcome_display}}">{{dep.recipe.name}}_{{dep.recipe.version}} <span class="task-name">{{dep.task_name}}</span></a></li>
+        {% empty %}
+            <li class="text-muted" style="margin-bottom: -10px;">This task has no dependencies</li>
+        {% endfor %}
         </ul>
     </dd>
     <dt>
-        <i class="icon-question-sign get-help" title="Tasks that depend on this task"></i>
+        <span class="glyphicon glyphicon-question-sign get-help" title="Tasks that depend on this
+            task"></span>
         Reverse dependencies
     </dt>
     <dd>
-        <ul>
-            {% for dep in rdeps %}
-                <li><a href="{%url 'task' dep.build.pk dep.pk%}" class="task-info" title="{{dep.get_executed_display}} | {{dep.get_outcome_display}}">{{dep.recipe.name}}_{{dep.recipe.version}} <span class="task-name">{{dep.task_name}}</span></a></li>
-            {% empty %}
-                <li class="muted">This task has no reverse dependencies</li>
-            {% endfor %}
+        <ul class="list-unstyled">
+        {% for dep in rdeps %}
+            <li><a href="{%url 'task' dep.build.pk dep.pk%}" class="task-info" title="{{dep.get_executed_display}} | {{dep.get_outcome_display}}">{{dep.recipe.name}}_{{dep.recipe.version}} <span class="task-name">{{dep.task_name}}</span></a></li>
+        {% empty %}
+            <li class="text-muted">This task has no reverse dependencies</li>
+        {% endfor %}
         </ul>
 </dl>
 
@@ -245,28 +302,36 @@
     <dl class="dl-horizontal">
         {% if task.elapsed_time %}
         <dt>
-            <i class="icon-question-sign get-help" title="How long it took the task to finish in seconds"></i>
+            <span class="glyphicon glyphicon-question-sign get-help" title="How
+                long it took the task to finish in seconds"></span>
             Time (secs)
         </dt>
         <dd>{{task.elapsed_time|format_none_and_zero|floatformat:2}}</dd>
         {% endif %}
         {% if task.cpu_time_user > 0 %}
         <dt>
-            <i class="icon-question-sign get-help" title="Total amount of time spent executing in user mode, in seconds. Note that this time can be greater than the task time due to parallel execution."></i>
+            <span class="glyphicon glyphicon-question-sign get-help" title="Total amount of time
+                spent executing in user mode, in seconds. Note that this time
+            can be greater than the task time due to parallel
+        execution."></span>
             User CPU time (secs)
         </dt>
         <dd>{{task.cpu_time_user|format_none_and_zero|floatformat:2}}</dd>
         {% endif %}
         {% if task.cpu_time_system > 0 %}
         <dt>
-            <i class="icon-question-sign get-help" title="Total amount of time spent executing in kernel mode, in seconds. Note that this time can be greater than the task time due to parallel execution."></i>
+            <span class="glyphicon glyphicon-question-sign get-help" title="Total amount of time
+                spent executing in kernel mode, in seconds. Note that this time
+            can be greater than the task time due to parallel
+        execution."></span>
             System CPU time (secs)
         </dt>
         <dd>{{task.cpu_time_system|format_none_and_zero|floatformat:2}}</dd>
         {% endif %}
         {% if task.disk_io > 0 %}
         <dt>
-            <i class="icon-question-sign get-help" title="Number of bytes written to and read from the disk during the task"></i>
+            <span class="glyphicon glyphicon-question-sign get-help" title="Number of bytes
+                written to and read from the disk during the task"></span>
             Disk I/O (bytes)
         </dt>
         <dd>{{task.disk_io|format_none_and_zero|intcomma}}</dd>
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 11/20] toaster: build data Recipe details to Bootstrap 3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (9 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 10/20] toaster: build data Task details " Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 12/20] toaster: css Remove markup Belen Barros Pena
                   ` (8 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the recipe details page displays correctly with Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 .../lib/toaster/toastergui/static/css/default.css  |  6 +-
 .../templates/detail_pagination_bottom.html        | 24 +++---
 .../toastergui/templates/detail_search_header.html | 58 +++++++------
 .../toastergui/templates/detail_sorted_header.html |  8 +-
 .../lib/toaster/toastergui/templates/recipe.html   | 98 ++++++++++++++--------
 .../toastergui/templates/recipe_packages.html      | 21 +++--
 6 files changed, 130 insertions(+), 85 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css
index fe2c4c2..adcad81 100644
--- a/bitbake/lib/toaster/toastergui/static/css/default.css
+++ b/bitbake/lib/toaster/toastergui/static/css/default.css
@@ -74,7 +74,8 @@ span[class^="remove-search-btn-"]:hover { color: #333; }
 [id^="pagination-"] .pagination, 
 [id^="pagination-"] .navbar-form { margin-top: 0; }
 [id^="table-chrome-"] .navbar-form { margin-left: -15px; margin-right: -15px; }
-[id^="table-chrome-"] .detail-page-contols { padding-left: 0; padding-right: 0; }
+[id^="table-chrome-"] .detail-page-contols,
+#packages-built .detail-page-controls { padding-left: 0; padding-right: 0; }
 
 /* Override the default font-weight for labels: it's a bit too much */
 label { font-weight: normal; }
@@ -84,6 +85,9 @@ label { font-weight: normal; }
 
 /* Table heading sortable / not sortable states */
 thead > tr > th > a { font-weight: normal; }
+				<a class="input-append-addon btn search-clear">
+					<i class="glyphicon glyphicon-remove"></i>
+				</a>
 thead > tr > th > a.sorted { font-weight: bold; color: #333; }
 
 /* Give some extra space to the 'clear filter' buttons */
diff --git a/bitbake/lib/toaster/toastergui/templates/detail_pagination_bottom.html b/bitbake/lib/toaster/toastergui/templates/detail_pagination_bottom.html
index 211548b..70404a2 100644
--- a/bitbake/lib/toaster/toastergui/templates/detail_pagination_bottom.html
+++ b/bitbake/lib/toaster/toastergui/templates/detail_pagination_bottom.html
@@ -6,7 +6,7 @@
 
 {# only paginate if 10 or more rows unfiltered, all pages #}
 {% if object_count >= 10 %}
-<div>
+<div id="pagination-detail">
   <ul class="pagination">
 {%if objects.has_previous %}
     <li><a href="javascript:reload_params({'page':{{objects.previous_page_number}}})">&laquo;</a></li>
@@ -23,16 +23,18 @@
 {%endif%}
   </ul>
 
-  <div class="pull-right">
-    <span class="help-inline">Show rows:</span>
-    <select class="pagesize">
-      {% with "10 25 50 100 150" as list%}
-        {% for i in list.split %}
-          <option value="{{i}}">{{i}}</option>
-        {% endfor %}
-      {% endwith %}
-    </select>
-  </div>
+  <form class="navbar-form navbar-right">
+		<div class=form-group">
+			<label>Show rows:</label>
+			<select class="pagesize form-control">
+				{% with "10 25 50 100 150" as list%}
+				{% for i in list.split %}
+				<option value="{{i}}">{{i}}</option>
+				{% endfor %}
+				{% endwith %}
+			</select>
+		</div>
+  </form>
 </div>
 
 <!-- Update page display settings -->
diff --git a/bitbake/lib/toaster/toastergui/templates/detail_search_header.html b/bitbake/lib/toaster/toastergui/templates/detail_search_header.html
index 996b617..193c26b 100644
--- a/bitbake/lib/toaster/toastergui/templates/detail_search_header.html
+++ b/bitbake/lib/toaster/toastergui/templates/detail_search_header.html
@@ -21,22 +21,24 @@ $(document).ready(function() {
 
 {% if objects.paginator.count > 10 or request.GET.search %}
   {% if objects.paginator.count == 0 %}
-  <div class="alert">
-    <h3>No {{search_what}} found</h3>
-    <form id="searchform" class="input-append">
+  <div class="alert alert-warning">
+    <h4>No {{search_what}} found</h4>
+    <form id="searchform" class="form-inline">
   {% else %}
-    <form id="searchform" class="navbar-search input-append pull-left">
+    <form id="searchform" class="navbar-form navbar-left detail-page-controls">
   {% endif %}
 
-      <input id="search" class="input-xlarge" type="text" placeholder="Search {{search_what}}" name="search" value="{% if request.GET.search %}{{request.GET.search}}{% endif %}">
-      <input type="hidden" value="name:+" name="orderby">
-      <input type="hidden" value="l" name="page">
-  {% if request.GET.search %}
-      <a class="input-append-addon btn search-clear">
-        <i class="glyphicon glyphicon-remove"></i>
-      </a>
-  {% endif %}
-      <button type="submit" class="btn">Search</button>
+		<div class="form-group">
+			<div class="btn-group">
+				<input id="search" class="form-control" type="text" placeholder="Search {{search_what}}" name="search" value="{% if request.GET.search %}{{request.GET.search}}{% endif %}">
+				<input type="hidden" value="name:+" name="orderby">
+				<input type="hidden" value="l" name="page">
+				{% if request.GET.search %}
+				<span class="remove-search-btn-detail-search search-clear glyphicon glyphicon-remove-circle"></span>
+				{% endif %}
+			</div>
+		</div>
+      <button type="submit" class="btn btn-default">Search</button>
   {% if objects.paginator.count == 0 %}
       <button type="submit" class="btn btn-link search-clear">
         Show all {{search_what}}
@@ -49,20 +51,22 @@ $(document).ready(function() {
   </div> {# end alert #}
 {% else %}
   {% if object_count > 10 %}
-  <div class="pull-right">
-    <span class="help-inline" style="padding-top:5px;">Show rows:</span>
-    <select style="margin-top:5px;margin-bottom:0px;" class="pagesize">
-    {% with "10 25 50 100 150" as list%}
-      {% for i in list.split %}
-        {% if request.session.limit == i %}
-      <option value="{{i}}" selected>{{i}}</option>
-        {% else %}
-      <option value="{{i}}">{{i}}</option>
-        {% endif %}
-      {% endfor %}
-    {% endwith %}
-    </select>
-  </div>
+  <form class="navbar-form navbar-right">
+		<div class="form-group">
+			<label>Show rows:</label>
+			<select class="pagesize form-control">
+				{% with "10 25 50 100 150" as list%}
+				{% for i in list.split %}
+				{% if request.session.limit == i %}
+				<option value="{{i}}" selected>{{i}}</option>
+				{% else %}
+				<option value="{{i}}">{{i}}</option>
+				{% endif %}
+				{% endfor %}
+				{% endwith %}
+			</select>
+		</div>
+  </form>
   {% endif %}
 {% endif %}
 
diff --git a/bitbake/lib/toaster/toastergui/templates/detail_sorted_header.html b/bitbake/lib/toaster/toastergui/templates/detail_sorted_header.html
index 6589b0a..fef2546 100644
--- a/bitbake/lib/toaster/toastergui/templates/detail_sorted_header.html
+++ b/bitbake/lib/toaster/toastergui/templates/detail_sorted_header.html
@@ -10,12 +10,12 @@
         <!-- Table header row; generated from "tablecols" entry in the context dict -->
         <tr>
             {% for tc in tablecols %}<th class="{%if tc.dclass%}{{tc.dclass}}{% endif %} {%if tc.class %}{{tc.clclass}}{% endif %}">
-                {%if tc.qhelp%}<i class="icon-question-sign get-help" title="{{tc.qhelp}}"></i>{%endif%}
-                {%if tc.orderfield%}<a {%if tc.ordericon%} class="sorted" {%endif%}href="javascript:reload_params({'page': 1, 'orderby' : '{{tc.orderfield}}' })">{{tc.name}}</a>{%else%}<span class="muted">{{tc.name}}</span>{%endif%}
-                {%if tc.ordericon%} <i class="icon-caret-{{tc.ordericon}}"></i>{%endif%}
+                {%if tc.qhelp%}<span class="glyphicon glyphicon-question-sign get-help" title="{{tc.qhelp}}"></span>{%endif%}
+                {%if tc.orderfield%}<a {%if tc.ordericon%} class="sorted" {%endif%}href="javascript:reload_params({'page': 1, 'orderby' : '{{tc.orderfield}}' })">{{tc.name}}</a>{%else%}<span class="text-muted">{{tc.name}}</span>{%endif%}
+                {%if tc.ordericon%} <span class="icon-caret-{{tc.ordericon}}"></span>{%endif%}
                 {% if request.GET.search and forloop.first %}
                     <span class="badge badge-info">{{objects.paginator.count}}</span>
-                {% endif %}
+									{% endif %}
                 {%if tc.filter%}<div class="btn-group pull-right">
                     <a href="#filter_{{tc.filter.class}}" role="button" class="btn btn-mini {%if request.GET.filter%}{{tc.filter.options|filtered_icon:request.GET.filter}} {%endif%}" {%if request.GET.filter and tc.filter.options|filtered_tooltip:request.GET.filter %} title="<p>{{tc.filter.options|filtered_tooltip:request.GET.filter}}</p><p><a class='btn btn-sm btn-primary' href=javascript:reload_params({'filter':''})>Show all {% if filter_search_display %}{{filter_search_display}}{% else %}{{objectname}}{% endif %}</a></p>" {%endif%} data-toggle="modal"> <i class="glyphicon glyphicon-filter filtered"></i> </a>
                 </div>{%endif%}
diff --git a/bitbake/lib/toaster/toastergui/templates/recipe.html b/bitbake/lib/toaster/toastergui/templates/recipe.html
index 2aaff6b..6c84660 100644
--- a/bitbake/lib/toaster/toastergui/templates/recipe.html
+++ b/bitbake/lib/toaster/toastergui/templates/recipe.html
@@ -14,7 +14,7 @@
 
 <div class="row">
   <div class="col-md-12">
-    <div class="page-header">
+    <div class="page-header build-data">
         <h1>{{object.name}}_{{object.version}}</h1>
     </div>
   </div>
@@ -22,28 +22,33 @@
 
 <div class="row">
   <div class="col-md-8 tabbable">
-    <ul class="nav nav-pills">
+    <ul class="nav nav-tabs">
         <li class="{{tab_states.1}}">
             <a href="#information" data-toggle="tab">
-                <i class="icon-question-sign get-help" title="Build-related information about the recipe"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="Build-related
+                    information about the recipe"></span>
                 Recipe details
             </a>
         </li>
         <li>
              <a href="{% url "recipe_packages" build.pk object.id %}">
-                <i class="icon-question-sign get-help" title="The packaged output resulting from building the recipe"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The packaged
+                    output resulting from building the recipe"></span>
                 Packages ({{package_count}})
             </a>
         </li>
         <li class="{{tab_states.3}}">
             <a href="#dependencies" data-toggle="tab">
-                <i class="icon-question-sign get-help" title="The recipe build-time dependencies (i.e. other recipes)"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The recipe
+                    build-time dependencies (i.e. other recipes)"></span>
                 Build dependencies ({{object.r_dependencies_recipe.all.count}})
             </a>
         </li>
         <li class="{{tab_states.4}}">
             <a href="#brought-in-by" data-toggle="tab">
-                <i class="icon-question-sign get-help" title="The recipe build-time reverse dependencies (i.e. the recipes that depend on this recipe)"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The recipe
+                    build-time reverse dependencies (i.e. the recipes that
+                depend on this recipe)"></span>
                 Reverse build dependencies ({{object.r_dependencies_depends.all.count}})
             </a>
         </li>
@@ -52,34 +57,39 @@
         <div class="tab-pane {{tab_states.1}}" id="information">
             <dl class="dl-horizontal">
                 <dt>
-                    <i class="icon-question-sign get-help" title="The name of the layer providing the recipe"></i>
+                    <span class="glyphicon glyphicon-question-sign get-help" title="The name of
+                        the layer providing the recipe"></span>
                     Layer
                 </dt>
                 <dd>{{layer.name}}</dd>
 
                 <dt>
-                    <i class="icon-question-sign get-help" title="Path to the recipe .bb file"></i>
+                    <span class="glyphicon glyphicon-question-sign get-help" title="Path to the
+                        recipe .bb file"></span>
                     Recipe file
                 </dt>
                 <dd><code>{{object.file_path}} {% if object.pathflags %}<i>({{object.pathflags}})</i>{% endif %}</code></dd>
                 {% if layer_version.branch %}
                 <dt>
-                    <i class="icon-question-sign get-help" title="The Git branch of the layer providing the recipe"></i>
+                    <span class="glyphicon glyphicon-question-sign get-help"
+                        title="The Git branch of the layer providing the
+                    recipe"></span>
                     Layer branch
                 </dt>
                 <dd>{{layer_version.branch}}</dd>
                 {% endif %}
                 <dt>
-                    <i class="icon-question-sign get-help" title="The Git commit of the layer providing the recipe"></i>
+                    <span class="glyphicon glyphicon-question-sign get-help" title="The Git
+                        commit of the layer providing the recipe"></span>
                     Layer commit
                 </dt>
                 <dd class="iscommit">{{layer_version.commit}}</dd>
                 {% if object.provides_set.all %}
                 <dt>
-                    <i class="icon-question-sign get-help"
+                    <span class="glyphicon glyphicon-question-sign get-help"
                      title="A list of aliases by which a particular recipe can be known. The additional aliases are
                            synonyms for the recipe and can be useful satisfying dependencies of other recipes during
-                           the build"></i>
+                           the build"></span>
                     PROVIDES
                 </dt>
                  <dd><code>{% for provider in object.provides_set.all %}{{ provider.name }}&nbsp;{% endfor %}</code></dd>
@@ -92,27 +102,42 @@
                 <strong>{{object.name}}_{{object.version}}</strong> does not have any tasks in this build.
             </div>
             {% else %}
+            <div class="table-responsive">
             <table class="table table-bordered table-hover">
                 <thead>
 		  <tr>
                     <th>
-                        <i class="icon-question-sign get-help" title="The running sequence of each task in the build"></i>
+                        <span class="glyphicon glyphicon-question-sign
+                            get-help" title="The running sequence of each task
+                            in the build"></span>
                         Order
                     </th>
                     <th>
-                        <i class="icon-question-sign get-help" title="The name of the task"></i>
+                        <span class="glyphicon glyphicon-question-sign get-help" title="The name
+                            of the task"></span>
                         Task
                     </th>
                     <th>
-                        <i class="icon-question-sign get-help" title="This value tells you if a task had to run (executed) in order to generate the task output, or if the output was provided by another task and therefore the task didn't need to run (not executed)"></i>
+                        <span class="glyphicon glyphicon-question-sign get-help" title="This
+                            value tells you if a task had to run (executed) in
+                        order to generate the task output, or if the output was
+                    provided by another task and therefore the task didn't need
+                to run (not executed)"></span>
                         Executed
                     </th>
                     <th>
-                        <i class="icon-question-sign get-help" title="This column tells you if 'executed' tasks succeeded or failed. The column also tells you why 'not executed' tasks did not need to run"></i>
+                        <span class="glyphicon glyphicon-question-sign get-help" title="This
+                            column tells you if 'executed' tasks succeeded or
+                            failed. The column also tells you why 'not executed'
+                            tasks did not need to run"></span>
                         Outcome
                     </th>
                     <th>
-                        <i class="icon-question-sign get-help" title="This column tells you if a task tried to restore output from the <code>sstate-cache</code> directory or mirrors, and reports the result: Succeeded, Failed or File not in cache"></i>
+                        <span class="glyphicon glyphicon-question-sign get-help" title="This
+                            column tells you if a task tried to restore output
+                            from the <code>sstate-cache</code> directory or
+                            mirrors, and reports the result: Succeeded, Failed or File
+                            not in cache"></span>
                         Cache attempt
                     </th>
 		  </tr>
@@ -123,26 +148,30 @@
 
                     <tr {{ task|task_color }} >
 
-                    <td><a {{ task|task_color }} href="{% url "task" build.pk task.pk %}">{{task.order}}</a></td>
+                    <td>{{task.order}}</td>
                     <td>
-                        <a {{ task|task_color }} href="{% url "task" build.pk task.pk %}">{{task.task_name}}</a>
-                        {% if task.get_description %}<i class="icon-question-sign get-help hover-help" title="" data-original-title="{{task.get_description}}"></i> {% endif %}
+                        <a href="{% url "task" build.pk task.pk %}">{{task.task_name}}</a>
+                        {% if task.get_description %}<span class="glyphicon
+                            glyphicon-question-sign get-help hover-help"
+                            title="{{task.get_description}}"></span> 
+                        {% endif %}
                     </td>
 
-                    <td><a {{ task|task_color }} href="{% url "task" build.pk task.pk %}">{{task.get_executed_display}}</a></td>
+                    <td>{{task.get_executed_display}}</td>
 
-                    <td>
-                        <a {{ task|task_color }} href="{% url "task" build.pk task.pk %}">{{task.get_outcome_display}} </a>
+                    <td>{{task.get_outcome_display}} 
                         {% if task.outcome = task.OUTCOME_FAILED %}
                             <a href="{% url 'build_artifact' build.pk "tasklogfile" task.pk %}">
-                                <i class="icon-download-alt" title="Download task log file"></i>
+                                <span class="glyphicon glyphicon-download-alt
+                                    get-help" title="Download task log
+                                file"></span>
                             </a>
                         {% endif %}
                         <i class="icon-question-sign get-help hover-help" title="{{task.get_outcome_help}}"></i>
                     </td>
                     <td>
                         {% ifnotequal task.sstate_result task.SSTATE_NA %}
-                        <a {{ task|task_color }} href="{% url "task" build.pk task.pk %}">{{task.get_sstate_result_display}}</a>
+                            {{task.get_sstate_result_display}}
                         {% endifnotequal %}
                     </td>
 
@@ -151,6 +180,7 @@
                     {% endfor %}
                 </tbody>
             </table>
+            </div>
             {% endif %}
         </div>
         <div class="tab-pane {{tab_states.3}}" id="dependencies">
@@ -177,13 +207,13 @@
                     <tr>
                         <td><a href="{% url "recipe" build.pk rr.depends_on.pk %}">{{rr.depends_on.name}}</a>
                             {% if rr.via %}
-                                <span class="muted">satisfied via {{rr.via.name}}</span>
-                                <i class="icon-question-sign get-help hover-help"
+																<span class="text-muted">satisfied via <code class="text-muted">{{rr.via.name}}</code></span>
+                                <span class="glyphicon glyphicon-question-sign get-help hover-help"
                                  title="This dependency is satisfied by the PROVIDES value
-                                       {{rr.via.name}} in the {{rr.depends_on.name}} recipe"></i>
+																 <code>{{rr.via.name}}</code> in the <code>{{rr.depends_on.name}}</code> recipe"></span>
                             {% endif %}
                         </td>
-                        <td><a href="{% url "recipe" build.pk rr.depends_on.pk %}">{{rr.depends_on.version}}</a></td>
+                        <td>{{rr.depends_on.version}}</td>
                     </tr>
                     {% endfor %}
 
@@ -216,13 +246,13 @@
                     <tr>
                         <td><a href="{% url "recipe" build.pk rr.recipe.pk %}">{{rr.recipe.name}}</a>
                         {% if rr.via %}
-                            <span class="muted"> satisfied via {{rr.via.name}}</span>
-                            <i class="icon-question-sign get-help hover-help"
+												<span class="text-muted"> satisfied via <code class="text-muted">{{rr.via.name}}</code></span>
+                            <span class="glyphicon glyphicon-question-sign get-help hover-help"
                              title="This dependency is satisfied by the PROVIDES value
-                            {{rr.via.name}} in the {{rr.depends_on.name}} recipe"></i>
+														 <code>{{rr.via.name}}</code> in the <code>{{rr.depends_on.name}}</code> recipe"></i>
                         {% endif %}
                         </td>
-                        <td><a href="{% url "recipe" build.pk rr.recipe.pk %}">{{rr.recipe.version}}</a></td>
+                        <td>{{rr.recipe.version}}</td>
                     </tr>
                     {% endfor %}
 
@@ -257,7 +287,7 @@
         {% if object.section %}
             <dt>
             Section
-            <i class="icon-question-sign get-help" title="The section in which recipes should be categorized"></i>
+            <span class="glyphicon glyphicon-question-sign get-help" title="The section in which recipes should be categorized"></span>
             </dt>
             <dd>{{object.section}}</dd>
         {% endif %}
diff --git a/bitbake/lib/toaster/toastergui/templates/recipe_packages.html b/bitbake/lib/toaster/toastergui/templates/recipe_packages.html
index 2c2efd8..700704b 100644
--- a/bitbake/lib/toaster/toastergui/templates/recipe_packages.html
+++ b/bitbake/lib/toaster/toastergui/templates/recipe_packages.html
@@ -13,7 +13,7 @@
 
 <div class="row">
   <div class="col-md-12">
-    <div class="page-header">
+    <div class="page-header build-data">
         <h1>{{recipe.name}}_{{recipe.version}}</h1>
     </div>
   </div>
@@ -21,28 +21,33 @@
 
 <div class="row">
   <div class="col-md-8 tabbable">
-    <ul class="nav nav-pills">
+    <ul class="nav nav-tabs">
         <li>
             <a href="{% url "recipe" build.pk recipe.id "1" %}">
-                <i class="icon-question-sign get-help" title="Build-related information about the recipe"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="Build-related
+                    information about the recipe"></span>
                 Recipe details
             </a>
         </li>
         <li class="active">
 			<a href="#packages-built" data-toggle="tab">
-                <i class="icon-question-sign get-help" title="The packaged output resulting from building the recipe"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The packaged
+                    output resulting from building the recipe"></span>
                 Packages ({{object_count}})
             </a>
         </li>
         <li>
             <a href="{% url "recipe" build.pk recipe.id "3" %}">
-                <i class="icon-question-sign get-help" title="The recipe build-time dependencies (i.e. other recipes)"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The recipe
+                    build-time dependencies (i.e. other recipes)"></span>
                 Build dependencies ({{recipe.r_dependencies_recipe.all.count}})
             </a>
         </li>
         <li>
             <a href="{% url "recipe" build.pk recipe.id "4" %}">
-                <i class="icon-question-sign get-help" title="The recipe build-time reverse dependencies (i.e. the recipes that depend on this recipe)"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The recipe
+                    build-time reverse dependencies (i.e. the recipes that
+                    depend on this recipe)"></span>
                 Reverse build dependencies ({{recipe.r_dependencies_depends.all.count}})
             </a>
         </li>
@@ -75,8 +80,8 @@
 
                     <tr>
                         <td><a href="{% url "package_built_detail" build.pk package.pk %}">{{package.name}}</a></td>
-                        <td><a href="{% url "package_built_detail" build.pk package.pk %}">{{package.version}}_{{package.revision}}</a></td>
-                        <td class="sizecol"><a href="{% url "package_built_detail" build.pk package.pk %}">{{package.size|filtered_filesizeformat}}</a></td>
+                        <td>{{package.version}}_{{package.revision}}</td>
+                        <td class="sizecol">{{package.size|filtered_filesizeformat}}</td>
                     </tr>
 
                         {% endfor %}
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 12/20] toaster: css Remove markup
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (10 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 11/20] toaster: build data Recipe " Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-10 13:05   ` Michael Wood
  2016-06-09 13:24 ` [PATCH 13/20] toaster: build data Package details to Bootstrap 3 Belen Barros Pena
                   ` (7 subsequent siblings)
  19 siblings, 1 reply; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Some html markup somehow made its way into our custom css file. Remove
it.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 bitbake/lib/toaster/toastergui/static/css/default.css | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css
index adcad81..1621383 100644
--- a/bitbake/lib/toaster/toastergui/static/css/default.css
+++ b/bitbake/lib/toaster/toastergui/static/css/default.css
@@ -85,9 +85,6 @@ label { font-weight: normal; }
 
 /* Table heading sortable / not sortable states */
 thead > tr > th > a { font-weight: normal; }
-				<a class="input-append-addon btn search-clear">
-					<i class="glyphicon glyphicon-remove"></i>
-				</a>
 thead > tr > th > a.sorted { font-weight: bold; color: #333; }
 
 /* Give some extra space to the 'clear filter' buttons */
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 13/20] toaster: build data Package details to Bootstrap 3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (11 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 12/20] toaster: css Remove markup Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 14/20] toaster: build data Fix left navigation Belen Barros Pena
                   ` (6 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the pages showing details about packages built and installed
display correctly with Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 .../lib/toaster/toastergui/static/css/default.css  |  3 ++-
 .../templates/package_built_dependencies.html      | 12 +++++------
 .../toastergui/templates/package_built_detail.html |  8 ++++----
 .../toastergui/templates/package_detail_base.html  | 24 +++++++++++-----------
 .../templates/package_included_dependencies.html   |  8 ++++----
 .../templates/package_included_tabs.html           |  8 ++++----
 .../toaster/toastergui/templatetags/projecttags.py | 12 +++++------
 7 files changed, 38 insertions(+), 37 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css
index 1621383..b266f66 100644
--- a/bitbake/lib/toaster/toastergui/static/css/default.css
+++ b/bitbake/lib/toaster/toastergui/static/css/default.css
@@ -111,7 +111,8 @@ tbody > tr > td > .glyphicon-minus-sign { color: #a94442; }
 h1 > .glyphicon-edit,
 p.lead .glyphicon { font-size: 16px; }
 h2 > .glyphicon-question-sign,
-h3 > .glyphicon-question-sign { font-size: 14px; }
+h3 > .glyphicon-question-sign,
+.heading-help { font-size: 14px; }
 
 /* Create a class for wells without background colour */
 .well-transparent { background-color: transparent; }
diff --git a/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html b/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html
index e53eb9d..a5d5893 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html
@@ -2,16 +2,16 @@
 {% load projecttags %}
 
 {% block tabcontent %}
-        <ul class="nav nav-pills">
+        <ul class="nav nav-tabs">
             <li class="">
                 <a href="{% url 'package_built_detail' build.id package.id %}">
-                    <i class="icon-question-sign get-help" title="Shows the files produced by this package."></i>
+                    <span class="glyphicon glyphicon-question-sign get-help" title="Shows the files produced by this package."></span>
                     Generated files ({{package.buildfilelist_package.count}})
                 </a>
             </li>
             <li class="active">
                 <a href="{% url 'package_built_dependencies' build.id package.id %}">
-                    <i class="icon-question-sign get-help" title="Shows the runtime packages required by this package."></i>
+                    <span class="glyphicon glyphicon-question-sign get-help" title="Shows the runtime packages required by this package."></span>
                     Runtime dependencies ({{dependency_count}})
                 </a>
             </li>
@@ -24,7 +24,7 @@
                 </div>
             {% else %}
                 <div class="alert alert-info">
-                    <strong>{{package.fullpackagespec}}</strong> is <strong>not included</strong> in any image. This page shows you the projected runtime dependencies if you include <strong>{{package.fullpackagespec}}</strong> in future builds.
+                    <strong>{{package.fullpackagespec}}</strong> is <strong>not included</strong> in any image. This page shows you the projected runtime dependencies if you were to include <strong>{{package.fullpackagespec}}</strong> in an image.
                 </div>
                 <table class="table table-bordered table-hover">
                     <thead>
@@ -64,7 +64,7 @@
                             <th>Version</th>
                             <th class="sizecol col-md-2">Size</th>
                             <th>
-                                <i class="icon-question-sign get-help" title="Five relationship types exist: recommends, suggests, provides, replaces and conflicts"></i>
+                                <span class="glyphicon glyphicon-question-sign get-help" title="Five relationship types exist: recommends, suggests, provides, replaces and conflicts"></span>
                                 Relationship type
                             </th>
                         </tr>
@@ -87,7 +87,7 @@
                             <td class="sizecol">{{other_dep.size|filtered_filesizeformat}}</td>
                             <td>
                                 {{other_dep.dep_type_display}}
-                                <i class="icon-question-sign get-help hover-help" title="{{other_dep.dep_type_help}}" ></i>
+                                <span class="glyphicon glyphicon-question-sign get-help hover-help" title="{{other_dep.dep_type_help}}" ></span>
                             </td>
                         </tr>
                     	{% endfor %}
diff --git a/bitbake/lib/toaster/toastergui/templates/package_built_detail.html b/bitbake/lib/toaster/toastergui/templates/package_built_detail.html
index 9be8ccb..0bdbc2a 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_built_detail.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_built_detail.html
@@ -6,13 +6,13 @@
         <!-- Generated Files -->
         {% if package.buildtargetlist_package.count == 0 %}
             {# Not included case #}
-            <ul class="nav nav-pills">
+            <ul class="nav nav-tabs">
                 <li class="active"> <a href="#">
-                    <i class="icon-question-sign get-help" title="Files added to a root file system when you include {{package.name}} in an image"></i>
+                    <span class="glyphicon glyphicon-question-sign get-help" title="Files added to a root file system when you include {{package.name}} in an image"></span>
                     Generated files ({{packageFileCount}})
                 </a></li>
                 <li class=""><a href="{% url 'package_built_dependencies' build.id package.id %}">
-                    <i class="icon-question-sign get-help" title="Projected runtime dependencies when you include {{package.name}} in an image"></i>
+                    <span class="glyphicon glyphicon-question-sign get-help" title="Projected runtime dependencies when you include {{package.name}} in an image"></span>
                     Runtime dependencies ({{dependency_count}})
                 </a></li>
             </ul>
@@ -21,7 +21,7 @@
             <!-- Package file list or if empty, alert pane -->
             {% if packageFileCount > 0 %}
                 <div class="alert alert-info">
-                    <strong>{{package.fullpackagespec}}</strong> is <strong>not included</strong> in any image. This page shows you the files added to an image root file system if you include <strong>{{package.fullpackagespec}}</strong> in future builds.
+                    <strong>{{package.fullpackagespec}}</strong> is <strong>not included</strong> in any image. This page shows you the files that would be added to an image root file system with <strong>{{package.fullpackagespec}}</strong> included in it.
                 </div>
                 {% include "tablesort.html" %}
                     <tbody>
diff --git a/bitbake/lib/toaster/toastergui/templates/package_detail_base.html b/bitbake/lib/toaster/toastergui/templates/package_detail_base.html
index 17562a8..d0e9ebf 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_detail_base.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_detail_base.html
@@ -14,8 +14,8 @@
     function fmtAliasHelp(package_name, alias, hover) {
         var r = null;
         if (alias != null && alias != '') {
-            r = '<span class="muted"> as ' + alias + '&nbsp';
-            r += '<i class="icon-question-sign get-help';
+            r = '<span class="text-muted"> as ' + alias + '&nbsp';
+            r += '<span class="glyphicon glyphicon-question-sign get-help';
             if (hover) {
                 r+= ' hover-help';
             }
@@ -23,9 +23,9 @@
                 r+= ' heading-help';
             }
             r += '"';
-            title = package_name + ' was renamed at packaging time and was installed on your system as ' + alias;
+						title = '<code>' + package_name + '</code> was renamed at packaging time and was installed on your system as <code>' + alias + '</code>';
             r += ' title="' + title + '">';
-            r += '</i>';
+						r += '</span>';
             r += '</span>';
             document.write(r);
         }
@@ -45,7 +45,7 @@
 {% block pagedetailinfomain %}
     <div class="row">
       <div class="col-md-12">
-        <div class="page-header">
+        <div class="page-header build-data">
             {% block mainheading %}
             <h1>{{package.fullpackagespec}}</h1>
             {% endblock %}
@@ -68,7 +68,7 @@
         <dl class="item-info">
             <dt>
                 Size
-                <i class="icon-question-sign get-help" title="The size of the package"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The size of the package"></span>
             </dt>
             <dd>
                 {% comment %}
@@ -85,7 +85,7 @@
 
             <dt>
                 License
-                <i class="icon-question-sign get-help" title="The license under which this package is distributed"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The license under which this package is distributed"></span>
             </dt>
             <dd>{{package.license}}</dd>
 
@@ -101,7 +101,7 @@
 
             <dt>
                 Recipe
-                <i class="icon-question-sign get-help" title="The name of the recipe building this package"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The name of the recipe building this package"></span>
             </dt>
             <dd>
                 {% if package.recipe_id > 0 %}
@@ -113,13 +113,13 @@
 
             <dt>
                 Recipe version
-                <i class="icon-question-sign get-help" title="The version of the recipe building this package"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The version of the recipe building this package"></span>
             </dt>
             <dd>{{package.recipe.version}}</dd>
 
             <dt>
                 Layer
-                <i class="icon-question-sign get-help" title="The name of the layer providing the recipe that builds this package"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The name of the layer providing the recipe that builds this package"></span>
             </dt>
             <dd>
                 {{package.recipe.layer_version.layer.name}}
@@ -136,13 +136,13 @@
             {% if package.recipe.layer_version.branch %}
             <dt>
                 Layer branch
-                <i class="icon-question-sign get-help" title="The Git branch of the layer providing the recipe that builds this package"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The Git branch of the layer providing the recipe that builds this package"></span>
             </dt>
             <dd>{{package.recipe.layer_version.branch}}</dd>
             {% endif %}
             <dt>
                 Layer commit
-                <i class="icon-question-sign get-help" title="The Git commit of the layer providing the recipe that builds this package"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The Git commit of the layer providing the recipe that builds this package"></span>
             </dt>
 
             <dd class="iscommit">{{package.recipe.layer_version.commit}}</dd>
diff --git a/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html b/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html
index 0672ba3..c1f3eec 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html
@@ -59,7 +59,7 @@
                         <th>Version</th>
                         <th class='sizecol col-md-2'>Size</th>
                         <th>
-                            <i class="icon-question-sign get-help" title="Five relationship types exist: recommends, suggests, provides, replaces and conflicts"></i>
+                            <span class="glyphicon glyphicon-question-sign get-help" title="Five relationship types exist: recommends, suggests, provides, replaces and conflicts"></span>
                             Relationship type
                         </th>
                     </tr>
@@ -86,17 +86,17 @@
                                 <td class='sizecol'>{{other_dep.size|filtered_filesizeformat}}&nbsp;</td>
                                 <td>
                                     {{other_dep.dep_type_display}}
-                                    <i class="icon-question-sign get-help hover-help" title="{{other_dep.dep_type_help}}" ></i>
+                                    <span class="glyphicon glyphicon-question-sign get-help hover-help" title="{{other_dep.dep_type_help}}" ></span>
                                 </td>
                             </tr>
                         {% else %}
-                            <tr class="muted">
+                            <tr class="text-muted">
                                 <td>{{other_dep.name}}</td>
                                 <td>{{other_dep.version}}</td>
                                 <td></td>
                                 <td>
                                     {{other_dep.dep_type_display}}
-                                    <i class="icon-question-sign get-help hover-help" title="{{other_dep.dep_type_help}}" ></i>
+                                    <span class="glyphicon glyphicon-question-sign get-help hover-help" title="{{other_dep.dep_type_help}}" ></span>
                                 </td>
                             </tr>
                         {% endif %}
diff --git a/bitbake/lib/toaster/toastergui/templates/package_included_tabs.html b/bitbake/lib/toaster/toastergui/templates/package_included_tabs.html
index 958aa88..e89fa21 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_included_tabs.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_included_tabs.html
@@ -1,12 +1,12 @@
 
-    <ul class="nav nav-pills">
+    <ul class="nav nav-tabs">
     {% if active_tab == "detail" %}
         <li class="active">
     {% else %}
         <li class="">
     {% endif %}
             <a href="{% url 'package_included_detail' build.id target.id package.id %}">
-                <i class="icon-question-sign get-help" title="The files this package adds to the image root file system"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The files this package adds to the image root file system"></span>
                 Files in root file system ({{packageFileCount}})
             </a>
         </li>
@@ -16,7 +16,7 @@
         <li class="">
     {% endif %}
             <a href="{% url 'package_included_dependencies' build.id target.id package.id %}">
-                <i class="icon-question-sign get-help" title="Package runtime dependencies"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="Package runtime dependencies"></span>
                 Runtime dependencies ({{dependency_count}})
             </a>
         </li>
@@ -26,7 +26,7 @@
         <li class="">
     {% endif %}
             <a href="{% url 'package_included_reverse_dependencies' build.id target.id package.id %}">
-                <i class="icon-question-sign get-help" title="The package runtime reverse dependencies (i.e. the packages in this image that depend on this package). Reverse dependencies reflect only the 'depends' dependency type"></i>
+                <span class="glyphicon glyphicon-question-sign get-help" title="The package runtime reverse dependencies (i.e. the packages in this image that depend on this package). Reverse dependencies reflect only the 'depends' dependency type"></span>
                 Reverse runtime dependencies ({{reverse_count}})
             </a>
         </li>
diff --git a/bitbake/lib/toaster/toastergui/templatetags/projecttags.py b/bitbake/lib/toaster/toastergui/templatetags/projecttags.py
index 119311d..dc75f22 100644
--- a/bitbake/lib/toaster/toastergui/templatetags/projecttags.py
+++ b/bitbake/lib/toaster/toastergui/templatetags/projecttags.py
@@ -112,11 +112,11 @@ def task_color(task_object, show_green=False):
         show_green argument should be True to get green color.
     """
     if not task_object.task_executed:
-        return 'class=muted'
+        return 'class=text-muted'
     elif task_object.outcome == task_object.OUTCOME_FAILED:
-        return 'class=error'
+        return 'class=text-danger'
     elif task_object.outcome == task_object.OUTCOME_SUCCESS and show_green:
-        return 'class=green'
+        return 'class=text-success'
     else:
         return ''
 
@@ -250,15 +250,15 @@ from django.utils.safestring import mark_safe
 @register.filter
 def format_vpackage_rowclass(size):
     if size == -1:
-        return mark_safe('class="muted"')
+        return mark_safe('class="text-muted"')
     return ''
 
 @register.filter
 def format_vpackage_namehelp(name):
     r =  name + '&nbsp;'
-    r += '<i class="icon-question-sign get-help hover-help"'
+    r += '<span class="glyphicon glyphicon-question-sign get-help hover-help"'
     r += ' title = "' + name + ' has not been built">'
-    r += '</i>'
+    r += '</span>'
     return mark_safe(r)
 
 @register.filter
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 14/20] toaster: build data Fix left navigation
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (12 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 13/20] toaster: build data Package details to Bootstrap 3 Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 15/20] toaster: build data Format empty state in packages table Belen Barros Pena
                   ` (5 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the current page is always highlighted in the left navigation.

Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 .../toastergui/templates/basebuildpage.html        | 22 +++++++++++++++-------
 .../toastergui/templates/configuration.html        |  4 ----
 .../toaster/toastergui/templates/configvars.html   |  4 ----
 .../lib/toaster/toastergui/templates/dirinfo.html  |  7 +++++++
 4 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/templates/basebuildpage.html b/bitbake/lib/toaster/toastergui/templates/basebuildpage.html
index d9adcd7..856259a 100644
--- a/bitbake/lib/toaster/toastergui/templates/basebuildpage.html
+++ b/bitbake/lib/toaster/toastergui/templates/basebuildpage.html
@@ -23,6 +23,9 @@
       {% block localbreadcrumb %}{% endblock %}
     </ul>
     <script>
+
+      var configVarUrl = "{% url 'configvars' build.id %}";
+
       $(document).ready(function(){
         $('#breadcrumb > li').append('<span class="divider">&rarr;</span>');
         $('#breadcrumb > li:last').addClass("active");
@@ -30,10 +33,18 @@
 
         $("#build-menu li a").each(function(){
           /* Set the page active state in the Build menu */
-          if (window.location.href.split('?')[0] === $(this).prop("href")){
+          var currentUrl = window.location.href.split('?')[0]; 
+          if (currentUrl === $(this).prop("href")){
             $(this).parent().addClass("active");
           } else {
-            $(this).parent().removeClass("active");
+            /* Special case the configvar as this is part of configuration
+             * page but is a separate url
+             */
+            if (window.location.pathname === configVarUrl){
+              $("#menu-configuration").addClass("active");
+            } else {
+              $(this).parent().removeClass("active");
+            }
           }
         });
       });
@@ -55,15 +66,12 @@
           <li class="nav-header">Images</li>
           {% block nav-target %}
             {% for t in build.get_sorted_target_list %}
-              <li><a href="{% url 'target' build.pk t.pk %}">{{t.target}}</a><li>
+            <li id="menu-{{t.target}}"><a href="{% url 'target' build.pk t.pk %}">{{t.target}}</a><li>
             {% endfor %}
           {% endblock %}
         {% endif %}
         <li class="nav-header">Build</li>
-        {% block nav-configuration %}
-          <li><a href="{% url 'configuration' build.pk %}">Configuration</a></li>
-        {% endblock %}
-
+          <li id="menu-configuration"><a href="{% url 'configuration' build.pk %}">Configuration</a></li>
           <li><a href="{% url 'tasks' build.pk %}">Tasks</a></li>
           <li><a href="{% url 'recipes' build.pk %}">Recipes</a></li>
           <li><a href="{% url 'packages' build.pk %}">Packages</a></li>
diff --git a/bitbake/lib/toaster/toastergui/templates/configuration.html b/bitbake/lib/toaster/toastergui/templates/configuration.html
index 1032ebe..1d0ec3f 100644
--- a/bitbake/lib/toaster/toastergui/templates/configuration.html
+++ b/bitbake/lib/toaster/toastergui/templates/configuration.html
@@ -6,10 +6,6 @@
 <li>Configuration</li>
 {% endblock %}
 
-{% block nav-configuration %}
-  <li class="active"><a href="{% url 'configuration' build.pk %}">Configuration</a></li>
-{% endblock %}
-
 {% block buildinfomain %}
 <!-- page title -->
 <div class="col-md-10">
diff --git a/bitbake/lib/toaster/toastergui/templates/configvars.html b/bitbake/lib/toaster/toastergui/templates/configvars.html
index 563e8c7..d3b2500 100644
--- a/bitbake/lib/toaster/toastergui/templates/configvars.html
+++ b/bitbake/lib/toaster/toastergui/templates/configvars.html
@@ -6,10 +6,6 @@
 <li>Configuration</li>
 {% endblock %}
 
-{% block nav-configuration %}
-  <li class="active"><a href="{% url 'configuration' build.pk %}">Configuration</a></li>
-{% endblock %}
-
 {% block buildinfomain %}
 <!-- page title -->
 <div class="col-md-10">
diff --git a/bitbake/lib/toaster/toastergui/templates/dirinfo.html b/bitbake/lib/toaster/toastergui/templates/dirinfo.html
index 458e933..ab89e27 100644
--- a/bitbake/lib/toaster/toastergui/templates/dirinfo.html
+++ b/bitbake/lib/toaster/toastergui/templates/dirinfo.html
@@ -18,6 +18,13 @@
 {% load projecttags %}
 
 <script type='text/javascript'>
+  var ctx = {};
+  ctx.target = "{{target.target}}";
+
+  $(document).ready(function(){
+    $("#menu-"+ctx.target).addClass("active");
+  });
+
     function setupTreetable() {
         $("#dirtable").treetable({
             expandable: true,
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 15/20] toaster: build data Format empty state in packages table
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (13 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 14/20] toaster: build data Fix left navigation Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 16/20] toaster: build data Add css for highlight animation Belen Barros Pena
                   ` (4 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

The explanatory message in the empty state of the packages built table
was missing some spaces.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 bitbake/lib/toaster/toastergui/buildtables.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/buildtables.py b/bitbake/lib/toaster/toastergui/buildtables.py
index 03142f8..121b860 100644
--- a/bitbake/lib/toaster/toastergui/buildtables.py
+++ b/bitbake/lib/toaster/toastergui/buildtables.py
@@ -134,11 +134,11 @@ class BuiltPackagesTable(BuildTablesMixin, BuiltPackagesTableBase):
         self.default_orderby = "name"
 
         self.empty_state =\
-            ('<strong>No packages were built.</strong> How did this happen?'
-             'Well, BitBake reuses as much stuff as possible.'
-             'If all of the packages needed were already built and available'
-             'in your build infrastructure, BitBake'
-             'will not rebuild any of them. This might be slightly confusing,'
+            ('<strong>No packages were built.</strong> How did this happen? '
+             'Well, BitBake reuses as much stuff as possible. '
+             'If all of the packages needed were already built and available '
+             'in your build infrastructure, BitBake '
+             'will not rebuild any of them. This might be slightly confusing, '
              'but it does make everything faster.')
 
     def setup_columns(self, *args, **kwargs):
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 16/20] toaster: build data Add css for highlight animation
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (14 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 15/20] toaster: build data Format empty state in packages table Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 17/20] toaster: task filters Remove invalid option Belen Barros Pena
                   ` (3 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

When you click on a file name that is installed in a root files system,
or in a task order number, Toaster highlights the relevant table row, so
that you know which one is the one you selected.

This patch sets the required css classes for the highlight to work.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 bitbake/lib/toaster/toastergui/static/css/default.css | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css
index b266f66..b66e748 100644
--- a/bitbake/lib/toaster/toastergui/static/css/default.css
+++ b/bitbake/lib/toaster/toastergui/static/css/default.css
@@ -297,3 +297,9 @@ h2.panel-title { font-size: 30px; }
 
 /* Make the help in tables insivisble until you hover over the right cell */ 
 .hover-help { visibility: hidden; }
+
+/* Blue hightlight animation for tasks and directory structure tables */
+.highlight { -webkit-animation: target-fade 15s 1; -moz-animation: target-fade 15s 1; animation: target-fade 15s 1; }
+@-webkit-keyframes target-fade { 0% { background-color: #D9EDF7; } 25% { background-color: #D9EDF7; } 100% { background-color: white; } }
+@-moz-keyframes target-fade { 0% { background-color: #D9EDF7; } 25% { background-color: #D9EDF7; } 100% { background-color: white; } }
+@keyframes target-fade { 0% { background-color: #D9EDF7; } 25% { background-color: #D9EDF7; } 100% { background-color: white; } }
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 17/20] toaster: task filters Remove invalid option
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (15 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 16/20] toaster: build data Add css for highlight animation Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 18/20] toaster: css Remove Bootstrap theme Belen Barros Pena
                   ` (2 subsequent siblings)
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

In the 'outcome' filter for tasks, remove the 'not applicable' option,
since it should not be exposed to users.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 bitbake/lib/toaster/toastergui/buildtables.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/bitbake/lib/toaster/toastergui/buildtables.py b/bitbake/lib/toaster/toastergui/buildtables.py
index 121b860..ed9b40e 100644
--- a/bitbake/lib/toaster/toastergui/buildtables.py
+++ b/bitbake/lib/toaster/toastergui/buildtables.py
@@ -394,6 +394,8 @@ class BuildTasksTable(BuildTablesMixin):
                                    title="Filter Task by 'Outcome'")
 
         for outcome_enum, title in Task.TASK_OUTCOME:
+            if outcome_enum is Task.OUTCOME_NA:
+                continue
             action = TableFilterActionToggle(
                 title.replace(" ", "_").lower(),
                 "%s Tasks" % title,
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 18/20] toaster: css Remove Bootstrap theme
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (16 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 17/20] toaster: task filters Remove invalid option Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 19/20] toaster: build data Unavailable artifact to Bootstrap 3 Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 20/20] toaster: loading notification Make it spin Belen Barros Pena
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

We are not using it.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 .../toastergui/static/css/bootstrap-theme.css      | 587 ---------------------
 .../toastergui/static/css/bootstrap-theme.css.map  |   1 -
 .../toastergui/static/css/bootstrap-theme.min.css  |   6 -
 .../static/css/bootstrap-theme.min.css.map         |   1 -
 4 files changed, 595 deletions(-)
 delete mode 100644 bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.css
 delete mode 100644 bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.css.map
 delete mode 100644 bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.min.css
 delete mode 100644 bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.min.css.map

diff --git a/bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.css b/bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.css
deleted file mode 100644
index ebe57fb..0000000
--- a/bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.css
+++ /dev/null
@@ -1,587 +0,0 @@
-/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-.btn-default,
-.btn-primary,
-.btn-success,
-.btn-info,
-.btn-warning,
-.btn-danger {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
-}
-.btn-default:active,
-.btn-primary:active,
-.btn-success:active,
-.btn-info:active,
-.btn-warning:active,
-.btn-danger:active,
-.btn-default.active,
-.btn-primary.active,
-.btn-success.active,
-.btn-info.active,
-.btn-warning.active,
-.btn-danger.active {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-.btn-default.disabled,
-.btn-primary.disabled,
-.btn-success.disabled,
-.btn-info.disabled,
-.btn-warning.disabled,
-.btn-danger.disabled,
-.btn-default[disabled],
-.btn-primary[disabled],
-.btn-success[disabled],
-.btn-info[disabled],
-.btn-warning[disabled],
-.btn-danger[disabled],
-fieldset[disabled] .btn-default,
-fieldset[disabled] .btn-primary,
-fieldset[disabled] .btn-success,
-fieldset[disabled] .btn-info,
-fieldset[disabled] .btn-warning,
-fieldset[disabled] .btn-danger {
-  -webkit-box-shadow: none;
-          box-shadow: none;
-}
-.btn-default .badge,
-.btn-primary .badge,
-.btn-success .badge,
-.btn-info .badge,
-.btn-warning .badge,
-.btn-danger .badge {
-  text-shadow: none;
-}
-.btn:active,
-.btn.active {
-  background-image: none;
-}
-.btn-default {
-  text-shadow: 0 1px 0 #fff;
-  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
-  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
-  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #dbdbdb;
-  border-color: #ccc;
-}
-.btn-default:hover,
-.btn-default:focus {
-  background-color: #e0e0e0;
-  background-position: 0 -15px;
-}
-.btn-default:active,
-.btn-default.active {
-  background-color: #e0e0e0;
-  border-color: #dbdbdb;
-}
-.btn-default.disabled,
-.btn-default[disabled],
-fieldset[disabled] .btn-default,
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled.focus,
-.btn-default[disabled].focus,
-fieldset[disabled] .btn-default.focus,
-.btn-default.disabled:active,
-.btn-default[disabled]:active,
-fieldset[disabled] .btn-default:active,
-.btn-default.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
-  background-color: #e0e0e0;
-  background-image: none;
-}
-.btn-primary {
-  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
-  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
-  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #245580;
-}
-.btn-primary:hover,
-.btn-primary:focus {
-  background-color: #265a88;
-  background-position: 0 -15px;
-}
-.btn-primary:active,
-.btn-primary.active {
-  background-color: #265a88;
-  border-color: #245580;
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled.focus,
-.btn-primary[disabled].focus,
-fieldset[disabled] .btn-primary.focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
-  background-color: #265a88;
-  background-image: none;
-}
-.btn-success {
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
-  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #3e8f3e;
-}
-.btn-success:hover,
-.btn-success:focus {
-  background-color: #419641;
-  background-position: 0 -15px;
-}
-.btn-success:active,
-.btn-success.active {
-  background-color: #419641;
-  border-color: #3e8f3e;
-}
-.btn-success.disabled,
-.btn-success[disabled],
-fieldset[disabled] .btn-success,
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled.focus,
-.btn-success[disabled].focus,
-fieldset[disabled] .btn-success.focus,
-.btn-success.disabled:active,
-.btn-success[disabled]:active,
-fieldset[disabled] .btn-success:active,
-.btn-success.disabled.active,
-.btn-success[disabled].active,
-fieldset[disabled] .btn-success.active {
-  background-color: #419641;
-  background-image: none;
-}
-.btn-info {
-  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
-  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
-  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #28a4c9;
-}
-.btn-info:hover,
-.btn-info:focus {
-  background-color: #2aabd2;
-  background-position: 0 -15px;
-}
-.btn-info:active,
-.btn-info.active {
-  background-color: #2aabd2;
-  border-color: #28a4c9;
-}
-.btn-info.disabled,
-.btn-info[disabled],
-fieldset[disabled] .btn-info,
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled.focus,
-.btn-info[disabled].focus,
-fieldset[disabled] .btn-info.focus,
-.btn-info.disabled:active,
-.btn-info[disabled]:active,
-fieldset[disabled] .btn-info:active,
-.btn-info.disabled.active,
-.btn-info[disabled].active,
-fieldset[disabled] .btn-info.active {
-  background-color: #2aabd2;
-  background-image: none;
-}
-.btn-warning {
-  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
-  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
-  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #e38d13;
-}
-.btn-warning:hover,
-.btn-warning:focus {
-  background-color: #eb9316;
-  background-position: 0 -15px;
-}
-.btn-warning:active,
-.btn-warning.active {
-  background-color: #eb9316;
-  border-color: #e38d13;
-}
-.btn-warning.disabled,
-.btn-warning[disabled],
-fieldset[disabled] .btn-warning,
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled.focus,
-.btn-warning[disabled].focus,
-fieldset[disabled] .btn-warning.focus,
-.btn-warning.disabled:active,
-.btn-warning[disabled]:active,
-fieldset[disabled] .btn-warning:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled].active,
-fieldset[disabled] .btn-warning.active {
-  background-color: #eb9316;
-  background-image: none;
-}
-.btn-danger {
-  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
-  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
-  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-color: #b92c28;
-}
-.btn-danger:hover,
-.btn-danger:focus {
-  background-color: #c12e2a;
-  background-position: 0 -15px;
-}
-.btn-danger:active,
-.btn-danger.active {
-  background-color: #c12e2a;
-  border-color: #b92c28;
-}
-.btn-danger.disabled,
-.btn-danger[disabled],
-fieldset[disabled] .btn-danger,
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled.focus,
-.btn-danger[disabled].focus,
-fieldset[disabled] .btn-danger.focus,
-.btn-danger.disabled:active,
-.btn-danger[disabled]:active,
-fieldset[disabled] .btn-danger:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled].active,
-fieldset[disabled] .btn-danger.active {
-  background-color: #c12e2a;
-  background-image: none;
-}
-.thumbnail,
-.img-thumbnail {
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-  background-color: #e8e8e8;
-  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
-  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
-  background-repeat: repeat-x;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  background-color: #2e6da4;
-  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
-  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
-  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
-  background-repeat: repeat-x;
-}
-.navbar-default {
-  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
-  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
-  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .active > a {
-  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
-  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
-  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
-  background-repeat: repeat-x;
-  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
-}
-.navbar-brand,
-.navbar-nav > li > a {
-  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
-}
-.navbar-inverse {
-  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
-  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
-  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  background-repeat: repeat-x;
-  border-radius: 4px;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .active > a {
-  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
-  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
-  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
-  background-repeat: repeat-x;
-  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
-}
-.navbar-inverse .navbar-brand,
-.navbar-inverse .navbar-nav > li > a {
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
-}
-.navbar-static-top,
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  border-radius: 0;
-}
-@media (max-width: 767px) {
-  .navbar .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #fff;
-    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
-    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
-    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
-    background-repeat: repeat-x;
-  }
-}
-.alert {
-  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
-}
-.alert-success {
-  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
-  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
-  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #b2dba1;
-}
-.alert-info {
-  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
-  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
-  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #9acfea;
-}
-.alert-warning {
-  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
-  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
-  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #f5e79e;
-}
-.alert-danger {
-  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
-  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
-  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #dca7a7;
-}
-.progress {
-  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
-  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
-  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar {
-  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
-  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
-  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-success {
-  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
-  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
-  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-info {
-  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
-  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
-  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-warning {
-  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
-  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
-  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-danger {
-  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
-  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
-  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
-  background-repeat: repeat-x;
-}
-.progress-bar-striped {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
-}
-.list-group {
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
-  text-shadow: 0 -1px 0 #286090;
-  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
-  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
-  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #2b669a;
-}
-.list-group-item.active .badge,
-.list-group-item.active:hover .badge,
-.list-group-item.active:focus .badge {
-  text-shadow: none;
-}
-.panel {
-  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
-}
-.panel-default > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
-  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-primary > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
-  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
-  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-success > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
-  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
-  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-info > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
-  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
-  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-warning > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
-  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
-  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
-  background-repeat: repeat-x;
-}
-.panel-danger > .panel-heading {
-  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
-  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
-  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
-  background-repeat: repeat-x;
-}
-.well {
-  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
-  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
-  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
-  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
-  background-repeat: repeat-x;
-  border-color: #dcdcdc;
-  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
-}
-/*# sourceMappingURL=bootstrap-theme.css.map */
diff --git a/bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.css.map b/bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.css.map
deleted file mode 100644
index 21e1910..0000000
--- a/bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAAA;;;;GAIG;ACeH;;;;;;EAME,yCAAA;EC2CA,4FAAA;EACQ,oFAAA;CFvDT;ACgBC;;;;;;;;;;;;ECsCA,yDAAA;EACQ,iDAAA;CFxCT;ACMC;;;;;;;;;;;;;;;;;;ECiCA,yBAAA;EACQ,iBAAA;CFnBT;AC/BD;;;;;;EAuBI,kBAAA;CDgBH;ACyBC;;EAEE,uBAAA;CDvBH;AC4BD;EErEI,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;EAuC2C,0BAAA;EAA2B,mBAAA;CDjBvE;ACpBC;;EAEE,0BAAA;EACA,6BAAA;CDsBH;ACnBC;;EAEE,0BAAA;EACA,sBAAA;CDqBH;ACfG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6BL;ACbD;EEtEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8DD;AC5DC;;EAEE,0BAAA;EACA,6BAAA;CD8DH;AC3DC;;EAEE,0BAAA;EACA,sBAAA;CD6DH;ACvDG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqEL;ACpDD;EEvEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsGD;ACpGC;;EAEE,0BAAA;EACA,6BAAA;CDsGH;ACnGC;;EAEE,0BAAA;EACA,sBAAA;CDqGH;AC/FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6GL;AC3FD;EExEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ID;AC5IC;;EAEE,0BAAA;EACA,6BAAA;CD8IH;AC3IC;;EAEE,0BAAA;EACA,sBAAA;CD6IH;ACvIG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqJL;AClID;EEzEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsLD;ACpLC;;EAEE,0BAAA;EACA,6BAAA;CDsLH;ACnLC;;EAEE,0BAAA;EACA,sBAAA;CDqLH;AC/KG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6LL;ACzKD;EE1EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ND;AC5NC;;EAEE,0BAAA;EACA,6BAAA;CD8NH;AC3NC;;EAEE,0BAAA;EACA,sBAAA;CD6NH;ACvNG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqOL;AC1MD;;EClCE,mDAAA;EACQ,2CAAA;CFgPT;ACrMD;;EE3FI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF0FF,0BAAA;CD2MD;ACzMD;;;EEhGI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFgGF,0BAAA;CD+MD;ACtMD;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EH+HA,mBAAA;ECjEA,4FAAA;EACQ,oFAAA;CF8QT;ACjND;;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,yDAAA;EACQ,iDAAA;CFwRT;AC9MD;;EAEE,+CAAA;CDgND;AC5MD;EEhII,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EHkJA,mBAAA;CDkND;ACrND;;EEhII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,wDAAA;EACQ,gDAAA;CF+ST;AC/ND;;EAYI,0CAAA;CDuNH;AClND;;;EAGE,iBAAA;CDoND;AC/LD;EAfI;;;IAGE,YAAA;IE7JF,yEAAA;IACA,oEAAA;IACA,8FAAA;IAAA,uEAAA;IACA,4BAAA;IACA,uHAAA;GH+WD;CACF;AC3MD;EACE,8CAAA;EC3HA,2FAAA;EACQ,mFAAA;CFyUT;ACnMD;EEtLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+MD;AC1MD;EEvLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuND;ACjND;EExLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+ND;ACxND;EEzLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuOD;ACxND;EEjMI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH4ZH;ACrND;EE3MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHmaH;AC3ND;EE5MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH0aH;ACjOD;EE7MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHibH;ACvOD;EE9MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHwbH;AC7OD;EE/MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH+bH;AChPD;EElLI,8MAAA;EACA,yMAAA;EACA,sMAAA;CHqaH;AC5OD;EACE,mBAAA;EC9KA,mDAAA;EACQ,2CAAA;CF6ZT;AC7OD;;;EAGE,8BAAA;EEnOE,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFiOF,sBAAA;CDmPD;ACxPD;;;EAQI,kBAAA;CDqPH;AC3OD;ECnME,kDAAA;EACQ,0CAAA;CFibT;ACrOD;EE5PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHoeH;AC3OD;EE7PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH2eH;ACjPD;EE9PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHkfH;ACvPD;EE/PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHyfH;AC7PD;EEhQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHggBH;ACnQD;EEjQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHugBH;ACnQD;EExQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFsQF,sBAAA;EC3NA,0FAAA;EACQ,kFAAA;CFqeT","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  text-shadow: 0 1px 0 #fff;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-color: #2e6da4;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n  box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n  .box-shadow(@shadow);\n\n  // Reset the shadow\n  &:active,\n  &.active {\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    .box-shadow(none);\n  }\n\n  .badge {\n    text-shadow: none;\n  }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n  #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n  .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n  background-repeat: repeat-x;\n  border-color: darken(@btn-color, 14%);\n\n  &:hover,\n  &:focus  {\n    background-color: darken(@btn-color, 12%);\n    background-position: 0 -15px;\n  }\n\n  &:active,\n  &.active {\n    background-color: darken(@btn-color, 12%);\n    border-color: darken(@btn-color, 14%);\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &,\n    &:hover,\n    &:focus,\n    &.focus,\n    &:active,\n    &.active {\n      background-color: darken(@btn-color, 12%);\n      background-image: none;\n    }\n  }\n}\n\n// Common styles\n.btn {\n  // Remove the gradient for the pressed/active state\n  &:active,\n  &.active {\n    background-image: none;\n  }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info    { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger  { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n  background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n  background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n  border-radius: @navbar-border-radius;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n  .box-shadow(@shadow);\n\n  .navbar-nav > .open > a,\n  .navbar-nav > .active > a {\n    #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n  }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n  #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n  border-radius: @navbar-border-radius;\n  .navbar-nav > .open > a,\n  .navbar-nav > .active > a {\n    #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n  }\n\n  .navbar-brand,\n  .navbar-nav > li > a {\n    text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n  }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a {\n    &,\n    &:hover,\n    &:focus {\n      color: #fff;\n      #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n    }\n  }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n  text-shadow: 0 1px 0 rgba(255,255,255,.2);\n  @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n  .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n  border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success    { .alert-styles(@alert-success-bg); }\n.alert-info       { .alert-styles(@alert-info-bg); }\n.alert-warning    { .alert-styles(@alert-warning-bg); }\n.alert-danger     { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n  #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar            { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success    { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info       { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning    { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger     { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n  #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n  border-radius: @border-radius-base;\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n  #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n  border-color: darken(@list-group-active-border, 7.5%);\n\n  .badge {\n    text-shadow: none;\n  }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n  .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading   { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading   { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading   { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading      { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading   { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading    { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n  #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n  border-color: darken(@well-bg, 10%);\n  @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n       -o-animation: @animation;\n          animation: @animation;\n}\n.animation-name(@name) {\n  -webkit-animation-name: @name;\n          animation-name: @name;\n}\n.animation-duration(@duration) {\n  -webkit-animation-duration: @duration;\n          animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n  -webkit-animation-timing-function: @timing-function;\n          animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n  -webkit-animation-delay: @delay;\n          animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n  -webkit-animation-iteration-count: @iteration-count;\n          animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n  -webkit-animation-direction: @direction;\n          animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n  -webkit-animation-fill-mode: @fill-mode;\n          animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n  -webkit-backface-visibility: @visibility;\n     -moz-backface-visibility: @visibility;\n          backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n          box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n     -moz-box-sizing: @boxmodel;\n          box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n     -moz-column-count: @column-count;\n          column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n     -moz-column-gap: @column-gap;\n          column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: @mode;\n     -moz-hyphens: @mode;\n      -ms-hyphens: @mode; // IE10+\n       -o-hyphens: @mode;\n          hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n  // Firefox\n  &::-moz-placeholder {\n    color: @color;\n    opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n  }\n  &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n  -webkit-transform: scale(@ratio);\n      -ms-transform: scale(@ratio); // IE9 only\n       -o-transform: scale(@ratio);\n          transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n  -webkit-transform: scale(@ratioX, @ratioY);\n      -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n       -o-transform: scale(@ratioX, @ratioY);\n          transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n  -webkit-transform: scaleX(@ratio);\n      -ms-transform: scaleX(@ratio); // IE9 only\n       -o-transform: scaleX(@ratio);\n          transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n  -webkit-transform: scaleY(@ratio);\n      -ms-transform: scaleY(@ratio); // IE9 only\n       -o-transform: scaleY(@ratio);\n          transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n  -webkit-transform: skewX(@x) skewY(@y);\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n       -o-transform: skewX(@x) skewY(@y);\n          transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9 only\n       -o-transform: translate(@x, @y);\n          transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n          transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees); // IE9 only\n       -o-transform: rotate(@degrees);\n          transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n      -ms-transform: rotateX(@degrees); // IE9 only\n       -o-transform: rotateX(@degrees);\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9 only\n       -o-transform: rotateY(@degrees);\n          transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n     -moz-perspective: @perspective;\n          perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n     -moz-perspective-origin: @perspective;\n          perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n     -moz-transform-origin: @origin;\n      -ms-transform-origin: @origin; // IE9 only\n          transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n  -webkit-transition: @transition;\n       -o-transition: @transition;\n          transition: @transition;\n}\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n          transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n          transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n          transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n  -webkit-transition-timing-function: @timing-function;\n          transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n     -moz-transition: -moz-transform @transition;\n       -o-transition: -o-transform @transition;\n          transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n  -webkit-user-select: @select;\n     -moz-user-select: @select;\n      -ms-user-select: @select; // IE10+\n          user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n    background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Opera 12\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n    background-repeat: repeat-x;\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n    background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\n    background-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n  filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]}
\ No newline at end of file
diff --git a/bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.min.css b/bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.min.css
deleted file mode 100644
index dc95d8e..0000000
--- a/bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.min.css
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
-/*# sourceMappingURL=bootstrap-theme.min.css.map */
\ No newline at end of file
diff --git a/bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.min.css.map b/bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.min.css.map
deleted file mode 100644
index 2c6b65a..0000000
--- a/bitbake/lib/toaster/toastergui/static/css/bootstrap-theme.min.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":";;;;AAmBA,YAAA,aAAA,UAAA,aAAA,aAAA,aAME,YAAA,EAAA,KAAA,EAAA,eC2CA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBDvCR,mBAAA,mBAAA,oBAAA,oBAAA,iBAAA,iBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBCsCA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBDlCR,qBAAA,sBAAA,sBAAA,uBAAA,mBAAA,oBAAA,sBAAA,uBAAA,sBAAA,uBAAA,sBAAA,uBAAA,+BAAA,gCAAA,6BAAA,gCAAA,gCAAA,gCCiCA,mBAAA,KACQ,WAAA,KDlDV,mBAAA,oBAAA,iBAAA,oBAAA,oBAAA,oBAuBI,YAAA,KAyCF,YAAA,YAEE,iBAAA,KAKJ,aErEI,YAAA,EAAA,IAAA,EAAA,KACA,iBAAA,iDACA,iBAAA,4CAAA,iBAAA,qEAEA,iBAAA,+CCnBF,OAAA,+GH4CA,OAAA,0DACA,kBAAA,SAuC2C,aAAA,QAA2B,aAAA,KArCtE,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAgBN,aEtEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAiBN,aEvEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAkBN,UExEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,gBAAA,gBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,iBAAA,iBAEE,iBAAA,QACA,aAAA,QAMA,mBAAA,0BAAA,yBAAA,0BAAA,yBAAA,yBAAA,oBAAA,2BAAA,0BAAA,2BAAA,0BAAA,0BAAA,6BAAA,oCAAA,mCAAA,oCAAA,mCAAA,mCAME,iBAAA,QACA,iBAAA,KAmBN,aEzEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAoBN,YE1EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,kBAAA,kBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,mBAAA,mBAEE,iBAAA,QACA,aAAA,QAMA,qBAAA,4BAAA,2BAAA,4BAAA,2BAAA,2BAAA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,+BAAA,sCAAA,qCAAA,sCAAA,qCAAA,qCAME,iBAAA,QACA,iBAAA,KA2BN,eAAA,WClCE,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBD2CV,0BAAA,0BE3FI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GF0FF,kBAAA,SAEF,yBAAA,+BAAA,+BEhGI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GFgGF,kBAAA,SASF,gBE7GI,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SH+HA,cAAA,ICjEA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBD6DV,sCAAA,oCE7GI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBD0EV,cAAA,iBAEE,YAAA,EAAA,IAAA,EAAA,sBAIF,gBEhII,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SHkJA,cAAA,IAHF,sCAAA,oCEhII,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBDgFV,8BAAA,iCAYI,YAAA,EAAA,KAAA,EAAA,gBAKJ,qBAAA,kBAAA,mBAGE,cAAA,EAqBF,yBAfI,mDAAA,yDAAA,yDAGE,MAAA,KE7JF,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,UFqKJ,OACE,YAAA,EAAA,IAAA,EAAA,qBC3HA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBDsIV,eEtLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAKF,YEvLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAMF,eExLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAOF,cEzLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAeF,UEjMI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFuMJ,cE3MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFwMJ,sBE5MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyMJ,mBE7MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0MJ,sBE9MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2MJ,qBE/MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF+MJ,sBElLI,iBAAA,yKACA,iBAAA,oKACA,iBAAA,iKFyLJ,YACE,cAAA,IC9KA,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBDgLV,wBAAA,8BAAA,8BAGE,YAAA,EAAA,KAAA,EAAA,QEnOE,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFiOF,aAAA,QALF,+BAAA,qCAAA,qCAQI,YAAA,KAUJ,OCnME,mBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,EAAA,IAAA,IAAA,gBD4MV,8BE5PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyPJ,8BE7PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0PJ,8BE9PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2PJ,2BE/PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF4PJ,8BEhQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF6PJ,6BEjQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoQJ,MExQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFsQF,aAAA,QC3NA,mBAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA,qBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA"}
\ No newline at end of file
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 19/20] toaster: build data Unavailable artifact to Bootstrap 3
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (17 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 18/20] toaster: css Remove Bootstrap theme Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  2016-06-09 13:24 ` [PATCH 20/20] toaster: loading notification Make it spin Belen Barros Pena
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

Make sure the page we show when you try to download an artifact that
doesn't exist displays properly with Bootstrap 3.

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 .../lib/toaster/toastergui/templates/unavailable_artifact.html | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/templates/unavailable_artifact.html b/bitbake/lib/toaster/toastergui/templates/unavailable_artifact.html
index 331a484..fc77e40 100644
--- a/bitbake/lib/toaster/toastergui/templates/unavailable_artifact.html
+++ b/bitbake/lib/toaster/toastergui/templates/unavailable_artifact.html
@@ -6,10 +6,12 @@
 {% block title %} Build artifact does not exist - Toaster {% endblock %}
 
 {% block pagecontent %}
-    <div class="row air">
-        <div class="alert alert-info col-md-8 lead">
-            <p>The build artifact you are trying to download does not exist.</p>
-            <p><a href="javascript:window.history.back()">Back to previous page</a></p>
+    <div class="row">
+        <div class="col-md-8">
+            <div class="alert alert-info lead top-air">
+                <p>The build artifact you are trying to download does not exist.</p>
+                <p><a href="javascript:window.history.back()">Back to previous page</a></p>
+            </div>
         </div>
     </div>
 {% endblock %}
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 20/20] toaster: loading notification Make it spin
  2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
                   ` (18 preceding siblings ...)
  2016-06-09 13:24 ` [PATCH 19/20] toaster: build data Unavailable artifact to Bootstrap 3 Belen Barros Pena
@ 2016-06-09 13:24 ` Belen Barros Pena
  19 siblings, 0 replies; 25+ messages in thread
From: Belen Barros Pena @ 2016-06-09 13:24 UTC (permalink / raw)
  To: toaster

We need some additional css to make the spinner in our loading
notification spin. If the spinner doesn't spin, is it a spinner?

Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
---
 .../lib/toaster/toastergui/static/css/default.css  | 39 +++++++++++++++++++++-
 bitbake/lib/toaster/toastergui/templates/base.html |  2 +-
 2 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css
index b66e748..6e256ee 100644
--- a/bitbake/lib/toaster/toastergui/static/css/default.css
+++ b/bitbake/lib/toaster/toastergui/static/css/default.css
@@ -255,7 +255,7 @@ code { color: #333; background-color: transparent; }
 .date-filter-controls span { margin: 0 10px; }
 
 /* Style the fixed positioned notifications */
-.loading-notification { position: fixed; z-index: 101; top: 3%; left: 40%; right: 40%; -webkit-box-shadow: 0 0 10px #c09853; -moz-box-shadow: 0 0 10px #c09853; box-shadow: 0 0 10px #c09853; } 
+#loading-notification { position: fixed; z-index: 1101; top: 3%; left: 40%; right: 40%; -webkit-box-shadow: 0 0 10px #c09853; -moz-box-shadow: 0 0 10px #c09853; box-shadow: 0 0 10px #c09853; } 
 
 .change-notification { position: fixed; z-index: 1101; top: 4%; left: 30%; right: 30%; -webkit-box-shadow: 0 0 10px #3a87ad; -moz-box-shadow: 0 0 10px #3a87ad; box-shadow: 0 0 10px #3a87ad; }
 
@@ -303,3 +303,40 @@ h2.panel-title { font-size: 30px; }
 @-webkit-keyframes target-fade { 0% { background-color: #D9EDF7; } 25% { background-color: #D9EDF7; } 100% { background-color: white; } }
 @-moz-keyframes target-fade { 0% { background-color: #D9EDF7; } 25% { background-color: #D9EDF7; } 100% { background-color: white; } }
 @keyframes target-fade { 0% { background-color: #D9EDF7; } 25% { background-color: #D9EDF7; } 100% { background-color: white; } }
+
+/* Copied in from newer version of Font-Awesome 4.3.0 */
+.fa-spin {
+  -webkit-animation: fa-spin 2s infinite linear;
+  animation: fa-spin 2s infinite linear;
+  display: inline-block;
+}
+.fa-pulse {
+  -webkit-animation: fa-spin 1s infinite steps(8);
+  animation: fa-spin 1s infinite steps(8);
+  display: inline-block;
+}
+
+@-webkit-keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+
+@keyframes fa-spin {
+  0% {
+    -webkit-transform: rotate(0deg);
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(359deg);
+    -moz-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+/* End copied in from newer version of Font-Awesome 4.3.0 */
diff --git a/bitbake/lib/toaster/toastergui/templates/base.html b/bitbake/lib/toaster/toastergui/templates/base.html
index 73e4cd8..8a9f690 100644
--- a/bitbake/lib/toaster/toastergui/templates/base.html
+++ b/bitbake/lib/toaster/toastergui/templates/base.html
@@ -62,7 +62,7 @@
   <body>
 
     {% csrf_token %}
-    <div id="loading-notification" class="alert lead text-center" style="display:none">
+    <div id="loading-notification" class="alert alert-warning lead text-center" style="display:none">
       Loading <i class="fa-pulse icon-spinner"></i>
     </div>
 
-- 
1.9.1



^ permalink raw reply related	[flat|nested] 25+ messages in thread

* Re: [PATCH 04/20] toaster: build data Packages installed to Bootstrap 3
  2016-06-09 13:24 ` [PATCH 04/20] toaster: build data Packages installed " Belen Barros Pena
@ 2016-06-10 11:18   ` Michael Wood
  2016-06-10 11:21     ` Barros Pena, Belen
  0 siblings, 1 reply; 25+ messages in thread
From: Michael Wood @ 2016-06-10 11:18 UTC (permalink / raw)
  To: toaster

On 09/06/16 14:24, Belen Barros Pena wrote:
> Make sure the table showing the list of packages installed in an
> image displays correctly with Bootstrap 3.
>
> Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
> ---
>   bitbake/lib/toaster/toastergui/buildtables.py                | 12 ++++++------
>   bitbake/lib/toaster/toastergui/static/css/default.css        |  8 +++++++-
>   bitbake/lib/toaster/toastergui/static/js/libtoaster.js       |  4 +---
>   .../toastergui/templates/snippets/gitrev_popover.html        |  2 +-
>   .../templates/snippets/pkg_dependencies_popover.html         |  2 +-
>   .../templates/snippets/pkg_revdependencies_popover.html      |  2 +-
>   bitbake/lib/toaster/toastergui/templates/target.html         | 10 +++++-----
>   7 files changed, 22 insertions(+), 18 deletions(-)
>
> diff --git a/bitbake/lib/toaster/toastergui/buildtables.py b/bitbake/lib/toaster/toastergui/buildtables.py
> index e237e4e..5d00aa4 100644
> --- a/bitbake/lib/toaster/toastergui/buildtables.py
> +++ b/bitbake/lib/toaster/toastergui/buildtables.py
> @@ -75,8 +75,8 @@ class BuiltPackagesTableBase(tables.PackagesTable):
>                       {%% endif %%}
>                       ''' % {'value': val})
>   
> -        add_pkg_link_to = ['name', 'version', 'size', 'license']
> -        add_recipe_link_to = ['recipe__name', 'recipe__version']
> +        add_pkg_link_to = ['name']
> +        add_recipe_link_to = ['recipe__name']

If you're getting rid of multiple items having links we don't need this 
to be a list any more. Will fix this up.

>   
>           # Add the recipe and pkg build links to the required columns
>           for column in self.columns:
> @@ -160,7 +160,7 @@ class InstalledPackagesTable(BuildTablesMixin, BuiltPackagesTableBase):
>       """ Show all packages installed in an image """
>       def __init__(self, *args, **kwargs):
>           super(InstalledPackagesTable, self).__init__(*args, **kwargs)
> -        self.title = "Installed Packages"
> +        self.title = "Packages Included"
>           self.default_orderby = "name"
>   
>       def make_package_list(self, target):
> @@ -213,11 +213,11 @@ class InstalledPackagesTable(BuildTablesMixin, BuiltPackagesTableBase):
>                ' extra.target_id data.pk %}">{{data.name}}</a>'
>                '{% if data.installed_name and data.installed_name !='
>                ' data.name %}'
> -             '<span class="muted"> as {{data.installed_name}}</span>'
> -             ' <i class="icon-question-sign get-help hover-help"'
> +             '<span class="text-muted"> as {{data.installed_name}}</span>'
> +             ' <span class="glyphicon glyphicon-question-sign get-help hover-help"'
>                ' title="{{data.name}} was renamed at packaging time and'
>                ' was installed in your image as {{data.installed_name}}'
> -             '"></i>{% endif %} ')
> +             '"></span>{% endif %} ')
>   
>           for column in self.columns:
>               if column['static_data_name'] == 'name':
> diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css
> index c275dbb..d808ab0 100644
> --- a/bitbake/lib/toaster/toastergui/static/css/default.css
> +++ b/bitbake/lib/toaster/toastergui/static/css/default.css
> @@ -22,6 +22,9 @@ img.logo { height: 30px; vertical-align: bottom; }
>   /* Increase popovers width to fit commit SHAs */
>   .popover { max-width: 350px; }
>   
> +/* Set a limit to popover height to handle long dependency lists */
> +.popover-content { max-height: 350px; overflow: scroll; }
> +
>   /* Increase bottom margin of definition lists inside popovers for the Toaster version information in the top navbar, and also inside the right hand columns of our details pages */
>   .popover-content dd,
>   .item-info dd { margin-bottom: 15px; }
> @@ -55,7 +58,7 @@ img.logo { height: 30px; vertical-align: bottom; }
>   #edit-columns-button { margin-right: 30px; }
>   .navbar-default[id^="table-chrome-"] { background-color: transparent; }
>   [id^="table-chrome-collapse-"] .navbar-form { margin-left: -15px; }
> -.dropdown-menu.editcol { padding-left: 10px; min-width: 180px; }
> +.dropdown-menu.editcol { padding-left: 10px; min-width: 200px; }
>   span[class^="remove-search-btn-"] { position: absolute; right: 5px; top: 0; bottom: 0; height: 14px; margin: auto; font-size: 14px; cursor: pointer; color: #777;}
>   span[class^="remove-search-btn-"]:hover { color: #333; }
>   #no-results-special-selectpackagestable .form-inline { margin-top: 20px; }
> @@ -273,3 +276,6 @@ h2.panel-title { font-size: 30px; }
>   /* Style the wells in the build dashboard */
>   .dashboard-section h3 { margin-top: 10px; margin-bottom: 20px; }
>   .col-md-4.dashboard-section dd { margin-bottom: 10px; }
> +
> +/* Make the help in tables insivisble until you hover over the right cell */
> +.hover-help { visibility: hidden; }
> diff --git a/bitbake/lib/toaster/toastergui/static/js/libtoaster.js b/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
> index e4e4f6c..eafe70d 100644
> --- a/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
> +++ b/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
> @@ -541,9 +541,7 @@ $(document).ready(function() {
>         delay: { show : 300 }
>       });
>   
> -    // show help bubble only on hover inside tables
> -    $(".hover-help").css("visibility","hidden");
> -
> +    // show help bubble on hover inside tables
>       $("table").on("mouseover", "th, td", function () {
>           $(this).find(".hover-help").css("visibility","visible");
>       });
> diff --git a/bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html b/bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html
> index 281a3bd..c1e3dab 100644
> --- a/bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html
> +++ b/bitbake/lib/toaster/toastergui/templates/snippets/gitrev_popover.html
> @@ -1,6 +1,6 @@
>   {% load projecttags  %}
>   {% if vcs_ref|is_shaid %}
> -<a class="btn" data-content="<ul class='unstyled'> <li>{{vcs_ref}}</li> </ul>">
> +<a class="btn btn-default" data-content="{{vcs_ref}}">
>    {{vcs_ref|truncatechars:10}}
>   </a>
>   {% else %}
> diff --git a/bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html b/bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html
> index 5be409c..273437e 100644
> --- a/bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html
> +++ b/bitbake/lib/toaster/toastergui/templates/snippets/pkg_dependencies_popover.html
> @@ -5,7 +5,7 @@
>   {% with count_package=package_deps.packages|length %}
>   
>   {% if count_package > 0 %}
> -  <a data-content='<ul class="unstyled">
> +  <a data-content='<ul class="list-unstyled">
>     {% for dep in package_deps.packages %}
>        <li>
>         {% if extra.add_links %}
> diff --git a/bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html b/bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html
> index 65c2b29..e6ef816 100644
> --- a/bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html
> +++ b/bitbake/lib/toaster/toastergui/templates/snippets/pkg_revdependencies_popover.html
> @@ -5,7 +5,7 @@
>   {% with count_package=package_deps.packages|length %}
>   
>   {% if count_package > 0 %}
> -  <a data-content='<ul class="unstyled">
> +  <a data-content='<ul class="list-unstyled">
>     {% for dep in package_deps.packages|dictsort:"package.name" %}
>        <li>
>         {% if extra.add_links %}
> diff --git a/bitbake/lib/toaster/toastergui/templates/target.html b/bitbake/lib/toaster/toastergui/templates/target.html
> index 0b2fe99..1924a0d 100644
> --- a/bitbake/lib/toaster/toastergui/templates/target.html
> +++ b/bitbake/lib/toaster/toastergui/templates/target.html
> @@ -18,7 +18,7 @@
>   
>   {% block buildinfomain %}
>   <div class="col-md-10">
> -    <div class="page-header">
> +    <div class="page-header build-data">
>           <h1>
>               {% if request.GET.search and objects.paginator.count > 0 %}
>                   {{objects.paginator.count}} package{{objects.paginator.count|pluralize}} found
> @@ -30,16 +30,16 @@
>           </h1>
>       </div>
>   <div id="navTab">
> -    <ul class="nav nav-pills">
> +    <ul class="nav nav-tabs">
>           <li class="active">
>               <a href="#target">
> -            <i class="icon-question-sign get-help" title="Of all the packages built, the subset installed in the root file system of this image"></i>
> +            <span class="glyphicon glyphicon-question-sign get-help" title="Of all the packages built, the subset installed in the root file system of this image"></span>
>                   Packages included ({{target.package_count}} - {{packages_sum|filtered_filesizeformat}})
>               </a>
>           </li>
>           <li>
>               <a href="{% url 'dirinfo' build.id target.id %}">
> -                <i class="icon-question-sign get-help" title="The directories and files in the root file system of this image"></i>
> +                <span class="glyphicon glyphicon-question-sign get-help" title="The directories and files in the root file system of this image"></span>
>                   Directory structure
>               </a>
>           </li>
> @@ -51,6 +51,6 @@
>           {% include "toastertable.html" %}
>           {% endwith %}
>       </div> <!-- tabpane -->
> -	</div> <!--navTab -->>
> +	</div> <!--navTab -->
>   <!-- col-md-10 -->
>   {% endblock buildinfomain %}



^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 04/20] toaster: build data Packages installed to Bootstrap 3
  2016-06-10 11:18   ` Michael Wood
@ 2016-06-10 11:21     ` Barros Pena, Belen
  0 siblings, 0 replies; 25+ messages in thread
From: Barros Pena, Belen @ 2016-06-10 11:21 UTC (permalink / raw)
  To: Wood, Michael G, toaster



On 10/06/2016 12:18, "toaster-bounces@yoctoproject.org on behalf of
Michael Wood" <toaster-bounces@yoctoproject.org on behalf of
michael.g.wood@intel.com> wrote:

>If you're getting rid of multiple items having links we don't need this
>to be a list any more. Will fix this up.

Sounds good. Thanks! It was a bit of a change in approach: I should have
given you a heads up before you migrated those tables. Sorry :/

Belén



^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 08/20] toaster: build data Tasks table to Bootstrap 3
  2016-06-09 13:24 ` [PATCH 08/20] toaster: build data Tasks table " Belen Barros Pena
@ 2016-06-10 11:53   ` Michael Wood
  0 siblings, 0 replies; 25+ messages in thread
From: Michael Wood @ 2016-06-10 11:53 UTC (permalink / raw)
  To: toaster

On 09/06/16 14:24, Belen Barros Pena wrote:
> Make sure the tasks table and all build performance tables display
> correctly with Bootstrap 3.
>
> Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
> ---
>   bitbake/lib/toaster/toastergui/buildtables.py      | 39 +++++++++++-----------
>   .../templates/buildinfo-toastertable.html          |  4 +--
>   2 files changed, 22 insertions(+), 21 deletions(-)
>
> diff --git a/bitbake/lib/toaster/toastergui/buildtables.py b/bitbake/lib/toaster/toastergui/buildtables.py
> index 5d00aa4..b92d405 100644
> --- a/bitbake/lib/toaster/toastergui/buildtables.py
> +++ b/bitbake/lib/toaster/toastergui/buildtables.py
> @@ -426,9 +426,7 @@ class BuildTasksTable(BuildTablesMixin):
>               '</a>'
>   
>           recipe_version_tmpl =\
> -            '<a href="{% url "recipe" extra.build.pk data.recipe.pk %}">'\
> -            '{{data.recipe.version}}'\
> -            '</a>'
> +            '{{data.recipe.version}}'

As you've removed the template we no longer need recipe_version_tmpl, it 
can just be changed to display the field as normal.


>   
>           def task_link_tmpl(val):
>               return ('<a name="task-{{data.order}}"'
> @@ -438,7 +436,13 @@ class BuildTasksTable(BuildTablesMixin):
>   
>           self.add_column(title="Order",
>                           static_data_name="order",
> -                        static_data_template=task_link_tmpl('{{data.order}}'),
> +                        static_data_template='{{data.order}}',
> +                        orderable=True)
> +
> +        self.add_column(title="Task",
> +                        static_data_name="task_name",
> +                        static_data_template=task_link_tmpl(
> +                            "{{data.task_name}}"),
>                           orderable=True)
>   
>           self.add_column(title="Recipe",
> @@ -450,31 +454,24 @@ class BuildTasksTable(BuildTablesMixin):
>                           static_data_name='recipe__version',
>                           static_data_template=recipe_version_tmpl)
>   
> -        self.add_column(title="Task",
> -                        static_data_name="task_name",
> -                        static_data_template=task_link_tmpl(
> -                            "{{data.task_name}}"),
> -                        orderable=True)
> -
>           self.add_column(title="Executed",
>                           static_data_name="task_executed",
> -                        static_data_template=task_link_tmpl(
> -                            "{{data.get_executed_display}}"),
> +                        static_data_template='{{data.get_executed_display}}',
>                           filter_name='execution_outcome',
>                           orderable=True)
>   
>           self.static_context_extra['OUTCOME_FAILED'] = Task.OUTCOME_FAILED
> -        outcome_tmpl = task_link_tmpl("{{data.outcome_text}}")
> +        outcome_tmpl = '{{data.outcome_text}}'
>           outcome_tmpl = ('%s '
>                           '{%% if data.outcome = extra.OUTCOME_FAILED %%}'
>                           '<a href="{%% url "build_artifact" extra.build.pk '
>                           '          "tasklogfile" data.pk %%}">'
> -                        ' <i class="icon-download-alt" '
> -                        '    title="Download task log file"></i>'
> +                        ' <span class="glyphicon glyphicon-download-alt get-help" '
> +                        '    title="Download task log file"></span>'
>                           '</a> {%% endif %%}'
> -                        '<i class="icon-question-sign get-help '
> +                        '<span class="glyphicon glyphicon-question-sign get-help '
>                           'hover-help" style="visibility: hidden;" '
> -                        'title="{{data.get_outcome_help}}"></i>'
> +                        'title="{{data.get_outcome_help}}"></span>'
>                           ) % outcome_tmpl
>   
>           self.add_column(title="Outcome",
> @@ -483,10 +480,11 @@ class BuildTasksTable(BuildTablesMixin):
>                           filter_name="task_outcome",
>                           orderable=True)
>   
> +        self.toggle_columns['sstate_result'] = len(self.columns)
> +
>           self.add_column(title="Cache attempt",
>                           static_data_name="sstate_result",
> -                        static_data_template=task_link_tmpl(
> -                            "{{data.sstate_text}}"),
> +                        static_data_template='{{data.sstate_text}}',
>                           filter_name="sstate_outcome",
>                           orderable=True)
>   
> @@ -542,6 +540,7 @@ class BuildTimeTable(BuildTasksTable):
>           super(BuildTimeTable, self).setup_columns(**kwargs)
>   
>           self.columns[self.toggle_columns['order']]['hidden'] = True
> +        self.columns[self.toggle_columns['sstate_result']]['hidden'] = True
>           self.columns[self.toggle_columns['elapsed_time']]['hidden'] = False
>   
>   
> @@ -556,6 +555,7 @@ class BuildCPUTimeTable(BuildTasksTable):
>           super(BuildCPUTimeTable, self).setup_columns(**kwargs)
>   
>           self.columns[self.toggle_columns['order']]['hidden'] = True
> +        self.columns[self.toggle_columns['sstate_result']]['hidden'] = True
>           self.columns[self.toggle_columns['cpu_time_sys']]['hidden'] = False
>           self.columns[self.toggle_columns['cpu_time_user']]['hidden'] = False
>   
> @@ -571,4 +571,5 @@ class BuildIOTable(BuildTasksTable):
>           super(BuildIOTable, self).setup_columns(**kwargs)
>   
>           self.columns[self.toggle_columns['order']]['hidden'] = True
> +        self.columns[self.toggle_columns['sstate_result']]['hidden'] = True
>           self.columns[self.toggle_columns['disk_io']]['hidden'] = False
> diff --git a/bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html b/bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html
> index 52cc056..eb4c656 100644
> --- a/bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html
> +++ b/bitbake/lib/toaster/toastergui/templates/buildinfo-toastertable.html
> @@ -11,10 +11,10 @@
>   {% endblock %}
>   
>   {% block buildinfomain %}
> -<div class="span10">
> +<div class="col-md-10">
>   {# xhr_table_url is just the current url so leave it blank #}
>   {% with xhr_table_url='' %}
> -  <div class="page-header">
> +  <div class="page-header build-data">
>        <h1>
>          {{title}} (<span class="table-count-{{table_name}}">0</span>) </h2>
>        </h1>



^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 12/20] toaster: css Remove markup
  2016-06-09 13:24 ` [PATCH 12/20] toaster: css Remove markup Belen Barros Pena
@ 2016-06-10 13:05   ` Michael Wood
  0 siblings, 0 replies; 25+ messages in thread
From: Michael Wood @ 2016-06-10 13:05 UTC (permalink / raw)
  To: toaster


OK Squashed this patch into the one above.

On 09/06/16 14:24, Belen Barros Pena wrote:
> Some html markup somehow made its way into our custom css file. Remove
> it.
>
> Signed-off-by: Belen Barros Pena <belen.barros.pena@linux.intel.com>
> ---
>   bitbake/lib/toaster/toastergui/static/css/default.css | 3 ---
>   1 file changed, 3 deletions(-)
>
> diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css
> index adcad81..1621383 100644
> --- a/bitbake/lib/toaster/toastergui/static/css/default.css
> +++ b/bitbake/lib/toaster/toastergui/static/css/default.css
> @@ -85,9 +85,6 @@ label { font-weight: normal; }
>   
>   /* Table heading sortable / not sortable states */
>   thead > tr > th > a { font-weight: normal; }
> -				<a class="input-append-addon btn search-clear">
> -					<i class="glyphicon glyphicon-remove"></i>
> -				</a>
>   thead > tr > th > a.sorted { font-weight: bold; color: #333; }
>   
>   /* Give some extra space to the 'clear filter' buttons */




^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2016-06-10 13:05 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-09 13:24 [PATCH 00/20] toaster: Move build information to Bootstrap 3 Belen Barros Pena
2016-06-09 13:24 ` [PATCH 01/20] toaster: build data Breadcrumbs to Bootstrap3 Belen Barros Pena
2016-06-09 13:24 ` [PATCH 02/20] toaster: build data Build dashboard to Bootstrap 3 Belen Barros Pena
2016-06-09 13:24 ` [PATCH 03/20] toaster: build data Left nav actions " Belen Barros Pena
2016-06-09 13:24 ` [PATCH 04/20] toaster: build data Packages installed " Belen Barros Pena
2016-06-10 11:18   ` Michael Wood
2016-06-10 11:21     ` Barros Pena, Belen
2016-06-09 13:24 ` [PATCH 05/20] toaster: build data Directory structure to Boostrap 3 Belen Barros Pena
2016-06-09 13:24 ` [PATCH 06/20] toaster: build data Configuration to Bootstrap 3 Belen Barros Pena
2016-06-09 13:24 ` [PATCH 07/20] toaster: build data Variables " Belen Barros Pena
2016-06-09 13:24 ` [PATCH 08/20] toaster: build data Tasks table " Belen Barros Pena
2016-06-10 11:53   ` Michael Wood
2016-06-09 13:24 ` [PATCH 09/20] toaster: build data Recipes " Belen Barros Pena
2016-06-09 13:24 ` [PATCH 10/20] toaster: build data Task details " Belen Barros Pena
2016-06-09 13:24 ` [PATCH 11/20] toaster: build data Recipe " Belen Barros Pena
2016-06-09 13:24 ` [PATCH 12/20] toaster: css Remove markup Belen Barros Pena
2016-06-10 13:05   ` Michael Wood
2016-06-09 13:24 ` [PATCH 13/20] toaster: build data Package details to Bootstrap 3 Belen Barros Pena
2016-06-09 13:24 ` [PATCH 14/20] toaster: build data Fix left navigation Belen Barros Pena
2016-06-09 13:24 ` [PATCH 15/20] toaster: build data Format empty state in packages table Belen Barros Pena
2016-06-09 13:24 ` [PATCH 16/20] toaster: build data Add css for highlight animation Belen Barros Pena
2016-06-09 13:24 ` [PATCH 17/20] toaster: task filters Remove invalid option Belen Barros Pena
2016-06-09 13:24 ` [PATCH 18/20] toaster: css Remove Bootstrap theme Belen Barros Pena
2016-06-09 13:24 ` [PATCH 19/20] toaster: build data Unavailable artifact to Bootstrap 3 Belen Barros Pena
2016-06-09 13:24 ` [PATCH 20/20] toaster: loading notification Make it spin Belen Barros Pena

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.