def index():
redirect('/list/general_overview')
+@route('/list_bs/<page>')
+@view('pv_overview_bootstrap.jinja2')
+def list_pvs_bs(page):
+ if page not in CONFIG['pages']:
+ return abort(404, 'Page not found')
+ return {'config': CONFIG, 'req_page': page}
+
@route('/list/<page>')
@view('pv_overview.jinja2')
def list_pvs(page):
.invalid_alarm .indicator,
.minor_alarm .indicator,
.major_alarm .indicator,
-.disconnected .indicator {
+.disconnected .indicator,
+.invalid_alarm.indicator,
+.minor_alarm.indicator,
+.major_alarm.indicator,
+.disconnected.indicator {
border: 4px solid;
}
content: "- invalid -";
color: #0091FF;
}
-.invalid_alarm .indicator {
+.invalid_alarm .indicator,
+.invalid_alarm.indicator {
border-color: #0091FF;
}
content: "- MINOR -";
color: #FF6F00;
}
-.minor_alarm .indicator {
+.minor_alarm .indicator,
+.minor_alarm.indicator {
border-color: #FF6F00;
}
content: "- MAJOR -";
color: #FF0000;
}
-.major_alarm .indicator {
+.major_alarm .indicator,
+.major_alarm.indicator {
border-color: #FF0000;
}
content: "- disconnected -";
color: #FF0000;
}
-.disconnected .indicator {
+.disconnected .indicator,
+.disconnected.indicator {
border-color: #EBFF00;
}
--- /dev/null
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>{% block title %}{% endblock %} - DASHBOARD</title>
+ <!-- Required meta tags -->
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+ <!-- Bootstrap CSS -->
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
+
+ <!-- Custom CSS -->
+ <link rel="stylesheet" href="/static/css/style.css">
+
+ <style>
+ /* Bootstrap Navbar Requires: */
+ body {
+ padding-top: 70px;
+ }
+ </style>
+
+ {% block header %}
+ <!-- Custom Head Section -->
+ {% endblock %}
+ </head>
+ <body>
+ <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
+ <a class="navbar-brand" href="/">DASHBOARD</a>
+ <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarsExampleDefault">
+ <ul class="navbar-nav mr-auto">
+ <li class="nav-item active">
+ <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled" href="#">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="http://example.com" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
+ <div class="dropdown-menu" aria-labelledby="dropdown01">
+ <a class="dropdown-item" href="#">Action</a>
+ <a class="dropdown-item" href="#">Another action</a>
+ <a class="dropdown-item" href="#">Something else here</a>
+ </div>
+ </li>
+ </ul>
+ <form class="form-inline my-2 my-lg-0">
+ <input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
+ </form>
+ </div>
+ </nav>
+
+ <div class="container">
+
+ <div>
+ <h1>{{ page_title }}</h1>
+ <!-- <p class="lead">Use this document as a way to quickly start any new project.<br> All you get is this text and a mostly barebones HTML document.</p> -->
+ </div>
+ {% block content %}{% endblock %}
+
+ </div><!-- /.container -->
+
+ <!-- Optional JavaScript -->
+ <!-- jQuery first, then Popper.js, then Bootstrap JS -->
+ <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
+ <!--<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>-->
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
+ <script type="text/javascript" src="/static/js/script.js"></script>
+ <script type="text/javascript">
+ {% block js_end_of_page %}
+ {% endblock %}
+ </script>
+
+ </body>
+</html>
--- /dev/null
+{% extends "base_bootstrap.jinja2" %}
+
+{% block title %}{{ config.pages[req_page].name }}{% endblock %}
+
+{% block header %}
+<meta http-equiv="refresh" content="15">
+<link rel="stylesheet" href="/static/css/sparkline.css">
+<script src="https://d3js.org/d3.v4.min.js"></script>
+<script src="/static/js/sparkline.js"></script>
+<style>
+.pv-block {
+ border-radius: 10px;
+ border: 1.5px solid #ddd;
+ margin-bottom: 20px;
+ padding: 10px;
+}
+</style>
+{% endblock %}
+
+{% block content %}
+ <div id="PVs">
+ {% set page = config.pages[req_page] %}
+ {% for group in page.groups %}
+ {% set this_group = config.groups[group] %}
+ <div id="{{ this_group.name }}">
+ <h2>{{ this_group.name }}</h2>
+ {% for pv_name in this_group.PVs %}
+ {% set PV = config.PVs[config.PV_lookup[pv_name]] %}
+ {% if loop.index0 % 3 == 0 %}
+ <div class="row">
+ {% endif %}
+ <div class="col-md-4">
+ <div class="pv-block value indicator {{ PV.classes }}" style="cursor: pointer;" title="{{ PV.alias }}">
+ <div class="error"></div>
+ <div class="pvname">{{ PV.name }}</div>
+ <div class="value-unit-box">
+ <span class="value">
+ {% if 'switch' in PV.classes %}
+ <label class="toggle">
+ <input type="checkbox" disabled readonly {{ 'checked' if 'ON' in PV.value else '' }}>
+ <span data-unchecked="OFF" data-checked="ON"></span>
+ </label>
+ {% else %}
+ {% if PV.precision is number %}
+ {{ ("%."+PV.precision|string +"f") % PV.value }}
+ {% else %}
+ {{ PV.value }}
+ {% endif %}
+ {% endif %}
+ </span>
+ <span class="unit">{{ PV.unit }}</span>
+ </div>
+ <div id="sparkline-{{ PV.name|replace(':','-') }}" class="sparkline"></div></td>
+ </div>
+ </div>
+ {% if (loop.index0 % 3 == 2) or loop.last %}
+ </div>
+ {% endif %}
+ {% endfor %}
+ </div>
+ {% endfor %}
+ </div>
+{% endblock %}
+
+
+{% block js_end_of_page %}
+/*
+$(function() {
+ // on page load
+ updateSparklines();
+});
+*/
+updateSparklines();
+{% endblock %}