Index: templates/viewer_base.html |
diff --git a/templates/viewer_base.html b/templates/viewer_base.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2f4f41cd7808417359c9116a2011bf22b08e0eea |
--- /dev/null |
+++ b/templates/viewer_base.html |
@@ -0,0 +1,208 @@ |
+<!DOCTYPE html> |
+<html lang="en"> |
+ <head> |
+ <meta charset="utf-8"> |
+ <title>{% block title %}Build Log{% endblock %}</title> |
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
+ <meta name="description" content=""> |
+ <meta name="author" content=""> |
+ |
+ <!-- Le styles --> |
+ <script src="http://code.jquery.com/jquery.js"></script> |
+ <script src="/static/js/bootstrap.min.js"></script> |
+ <script src="/static/js/prettify.js"></script> |
+ <style type="text/css"> |
+ body { |
+ padding-top: 60px; |
+ padding-bottom: 40px; |
+ } |
+ .sidebar-nav { |
+ padding: 9px 0; |
+ } |
+ |
+ @media (max-width: 980px) { |
+ /* Enable use of floated navbar text */ |
+ .navbar-text.pull-right { |
+ float: none; |
+ padding-left: 5px; |
+ padding-right: 5px; |
+ } |
+ } |
+ |
+ #branding { |
+ margin-left: 0; |
+ } |
+ |
+ #beta { |
+ position: relative; |
+ top: -10px; |
+ font-size: 11pt; |
+ } |
+ </style> |
+ <link href="/static/css/bootstrap.min.css" rel="stylesheet"> |
+ <link href="/static/css/bootstrap-responsive.css" rel="stylesheet"> |
+ {% block head %}{% endblock %} |
+ </head> |
+ <body> |
+ <div class="navbar navbar-fixed-top"> |
+ <div class="navbar-inner"> |
+ <ul class="nav pull-right"> |
+ <li><a id="orig_page" href="{{url}}">Original Page</a></li> |
+ </ul> |
+ <div id='navbar-container' class="container-fluid"> |
+ <button type="button" class="btn btn-navbar" |
+ data-toggle="collapse" data-target=".nav-collapse"> |
+ <span class="icon-bar"></span> |
+ <span class="icon-bar"></span> |
+ <span class="icon-bar"></span> |
+ </button> |
+ <a id="branding" class="brand" href="/buildbot/"> |
+ Buildbot Viewer<small id='beta'>Beta</small> |
+ </a> |
+ <div class="nav-collapse collapse"> |
+ <ul class="nav"> |
+ {% for crumb, link in breadcrumbs %} |
+ {% if loop.last %} |
+ <li class="active"> |
+ {% else %} |
+ <li> |
+ {% endif %} |
+ <a href="{{link}}">{{crumb}}</a> |
+ </li> |
+ {% endfor %} |
+ </ul> |
+ </div><!--/.nav-collapse --> |
+ </div> |
+ </div> |
+ </div> |
+ <div id="main-container" class="container-fluid"> |
+ {% block body %}{% endblock %} |
+ {% block footer %} |
+ <div class="row"> |
+ <hr> |
+ <div class="span4"> |
+ {% block sub_footer %}{% endblock sub_footer %} |
+ </div> |
+ <div class="span2 pull-right"> |
+ <span class="pull-right"> |
+ <a href="https://code.google.com/p/chromium/issues/entry?template=Build%20Infrastructure&comment=This+is+a+user+reported+issue+with+the+new+build.chromium.org+interface.&summary=One+liner+issue+description+here"> |
+ Report an issue |
+ </a> |
+ </span> |
+ <img alt="Chrome" data-g-event="nav-logo" data-g-label= |
+ "consumer-home" id="logo" src= |
+ "http://www.google.com/intl/en/chrome/assets/common/images/chrome_logo_2x.png"> |
+ </div> |
+ </div> |
+ {% endblock %} |
+ </div> |
+ <script> |
+ !function ($) { |
+ $(function(){ |
+ window.prettyPrint && prettyPrint() |
+ }) |
+ }(window.jQuery) |
+ |
+ // Creates a new cookie. |
+ function createCookie(name, value, day) { |
+ var date = new Date(); |
+ date.setTime(date.getTime() + (day * 24 * 60 * 60 * 1000)); |
+ var expires = "; expires=" + date.toGMTString(); |
+ document.cookie = name + "=" + value+expires + "; path=/"; |
+ } |
+ |
+ // Deletes a cookie. |
+ function eraseCookie(name) { |
+ createCookie(name, "", -1); |
+ } |
+ |
+ function update_time_ago_sec(text) { |
+ $(".time_ago").each(function(){ |
+ console.log($(this).text()); |
+ text = $(this).text(); |
+ r_mins = /(\d+) min/; |
+ r_secs = /(\d+) sec/; |
+ m_mins = r_mins.exec(text); |
+ m_secs = r_secs.exec(text); |
+ if (m_secs) { |
+ secs = parseInt(m_secs[1]); |
+ } else { |
+ return; |
+ } |
+ if (m_mins) { |
+ mins = parseInt(m_mins[1]); |
+ } else { |
+ mins = 0; |
+ } |
+ secs += 1; |
+ if (secs > 59) { |
+ mins += 1; |
+ secs = 0; |
+ } |
+ results = ""; |
+ if (mins) { |
+ if (mins == 1) { |
+ results += mins + " min "; |
+ } else { |
+ results += mins + " mins "; |
+ } |
+ } |
+ if (secs == 1) { |
+ results += secs + " sec "; |
+ } else { |
+ results += secs + " secs "; |
+ } |
+ results += "ago"; |
+ $(this).text(results); |
+ }); |
+ } |
+ |
+ function update_time_ago_min(text) { |
+ $(".time_ago").each(function(){ |
+ console.log($(this).text()); |
+ text = $(this).text(); |
+ r_hrs = /(\d+) hr/; |
+ r_mins = /(\d+) min/; |
+ r_secs = /(\d+) sec/; |
+ jrs = parseInt(r_hrs.exec(text)[1]); |
+ mins = parseInt(r_mins.exec(text)[1]); |
+ secs = parseInt(r_secs.exec(text)[1]); |
+ if (secs) { |
+ return; |
+ } |
+ mins += 1; |
+ if (mins > 59) { |
+ hrs += 1; |
+ mins = 0; |
+ } |
+ results = ""; |
+ if (hrs) { |
+ if (hrs == 1) { |
+ results += hrs + " hr "; |
+ } else { |
+ results += hrs + " hrs "; |
+ } |
+ } |
+ if (mins == 1) { |
+ results += mins + " min "; |
+ } else { |
+ results += mins + " mins "; |
+ } |
+ results += "ago"; |
+ $(this).text(results); |
+ }); |
+ } |
+ |
+ $(document).ready(function(){ |
+ createCookie('new', true, 99999); // Default to the new page. |
+ $("#orig_page").click(function(){ |
+ eraseCookie('new'); |
+ }); |
+ |
+ // Find .time_ago and makes them count down properly. |
+ setInterval(update_time_ago_sec, 1000); |
+ setInterval(update_time_ago_min, 60000); |
+ }); |
+ </script> |
+ </body> |
+</html> |