mirror of
https://github.com/bckelley/cgm-remote-monitor.git
synced 2026-08-24 03:14:12 -05:00
Move app caching to a service worker (#5504)
* Move app caching to a webworker * Code cleanup * Code cleanup * Make Codacy happy * More parentheses
This commit is contained in:
@@ -7,6 +7,7 @@ const bodyParser = require('body-parser');
|
||||
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const ejs = require('ejs');
|
||||
|
||||
function create (env, ctx) {
|
||||
var app = express();
|
||||
@@ -92,6 +93,15 @@ function create (env, ctx) {
|
||||
}
|
||||
app.locals.cachebuster = cacheBuster;
|
||||
|
||||
app.get("/sw.js", (req, res) => {
|
||||
res.setHeader('Content-Type', 'application/javascript');
|
||||
res.send(ejs.render(fs.readFileSync(
|
||||
require.resolve(`${__dirname}/views/service-worker.js`),
|
||||
{ encoding: 'utf-8' }),
|
||||
{ locals: app.locals}
|
||||
));
|
||||
});
|
||||
|
||||
if (ctx.bootErrors && ctx.bootErrors.length > 0) {
|
||||
app.get('*', require('./lib/server/booterror')(ctx));
|
||||
return app;
|
||||
@@ -178,12 +188,6 @@ function create (env, ctx) {
|
||||
|
||||
app.use("/clock", clockviews);
|
||||
|
||||
app.get("/appcache/*", (req, res) => {
|
||||
res.render("nightscout.appcache", {
|
||||
locals: app.locals
|
||||
});
|
||||
});
|
||||
|
||||
app.use('/api', bodyParser({
|
||||
limit: 1048576 * 50
|
||||
}), apiRoot);
|
||||
|
||||
@@ -26,10 +26,10 @@
|
||||
<meta name="theme-color" content="#333333">
|
||||
|
||||
|
||||
<link rel="preload" href="/css/main.css?v=<%= locals.cachebuster %>" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/main.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/drawer.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/admin.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/ui-darkness/jquery-ui.min.css?v=<%= locals.cachebuster %>" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/ui-darkness/jquery-ui.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<% include preloadCSS %>
|
||||
</head>
|
||||
<body>
|
||||
@@ -39,8 +39,8 @@
|
||||
|
||||
<%- include('partials/authentication-status') %>
|
||||
|
||||
<script src="<%= locals.bundle %>/js/bundle.app.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="/socket.io/socket.io.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="/admin/js/admin.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="<%= locals.bundle %>/js/bundle.app.js"></script>
|
||||
<script src="/socket.io/socket.io.js"></script>
|
||||
<script src="/admin/js/admin.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<div id="staleTime"></div>
|
||||
</div>
|
||||
</main>
|
||||
<script src="<%= locals.bundle %>/js/bundle.clock.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="<%= locals.bundle %>/js/bundle.clock.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var clockFace = "<%= face %>"; // can now be used in scripts
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
<meta name="msapplication-config" content="/browserconfig.xml">
|
||||
<meta name="theme-color" content="#333333">
|
||||
|
||||
<link rel="preload" href="/css/main.css?v=<%= locals.cachebuster %>" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/main.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/dropdown.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/drawer.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/food.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/ui-darkness/jquery-ui.min.css?v=<%= locals.cachebuster %>" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/ui-darkness/jquery-ui.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<% include preloadCSS %>
|
||||
|
||||
</head>
|
||||
@@ -112,8 +112,8 @@
|
||||
|
||||
<%- include('partials/authentication-status') %>
|
||||
|
||||
<script src="<%= locals.bundle %>/js/bundle.app.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="/socket.io/socket.io.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="/food/js/food.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="<%= locals.bundle %>/js/bundle.app.js"></script>
|
||||
<script src="/socket.io/socket.io.js"></script>
|
||||
<script src="/food/js/food.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+119
-99
@@ -1,9 +1,8 @@
|
||||
<!DOCTYPE html>
|
||||
<html<%if (locals.mode == 'production') { %>
|
||||
manifest="appcache/nightscout-<%= locals.cachebuster %>.appcache"
|
||||
<% } %>>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, maximum-scale=1, initial-scale=1, user-scalable=0" />
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, maximum-scale=1, initial-scale=1, user-scalable=0">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<link rel="apple-touch-startup-image" href="images/launch.png">
|
||||
<meta name="apple-mobile-web-app-title" content="Nightscout">
|
||||
@@ -29,28 +28,26 @@
|
||||
<meta name="msapplication-TileImage" content="/images/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="/browserconfig.xml">
|
||||
<meta name="theme-color" content="#333333">
|
||||
<link rel="preload" href="css/ui-darkness/jquery-ui.min.css?v=<%= locals.cachebuster %>" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="css/jquery.tooltips.css?v=<%= locals.cachebuster %>" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="css/main.css?v=<%= locals.cachebuster %>" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="css/ui-darkness/jquery-ui.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="css/jquery.tooltips.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="css/main.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
|
||||
<style media="screen" type="text/css">
|
||||
|
||||
#centerMessagePanel
|
||||
{
|
||||
position:fixed;
|
||||
top:0;
|
||||
left:0;
|
||||
bottom:0;
|
||||
right:0;
|
||||
<style media="screen" type="text/css">
|
||||
#centerMessagePanel {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: #000000;
|
||||
z-index: 1000;
|
||||
}
|
||||
}
|
||||
|
||||
#loadingMessage {
|
||||
#loadingMessage {
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
@@ -58,15 +55,15 @@
|
||||
top: 30%;
|
||||
left: 0;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.spinner {
|
||||
.spinner {
|
||||
margin: 100px auto 0;
|
||||
width: 70px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.spinner > div {
|
||||
.spinner>div {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
background-color: #333;
|
||||
@@ -75,24 +72,24 @@
|
||||
display: inline-block;
|
||||
-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
|
||||
animation: sk-bouncedelay 1.4s infinite ease-in-out both;
|
||||
}
|
||||
}
|
||||
|
||||
.spinner .bounce1 {
|
||||
.spinner .bounce1 {
|
||||
-webkit-animation-delay: -0.32s;
|
||||
animation-delay: -0.32s;
|
||||
}
|
||||
}
|
||||
|
||||
.spinner .bounce2 {
|
||||
.spinner .bounce2 {
|
||||
-webkit-animation-delay: -0.16s;
|
||||
animation-delay: -0.16s;
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes sk-bouncedelay {
|
||||
@-webkit-keyframes sk-bouncedelay {
|
||||
0%, 80%, 100% { -webkit-transform: scale(0) }
|
||||
40% { -webkit-transform: scale(1.0) }
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sk-bouncedelay {
|
||||
@keyframes sk-bouncedelay {
|
||||
0%, 80%, 100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
@@ -101,28 +98,30 @@
|
||||
transform: scale(1.0);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<% include preloadCSS %>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
</style>
|
||||
<% include preloadCSS %>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="centerMessagePanel">
|
||||
<div id="loadingMessage">
|
||||
<p><img src="images/launch.png"></p>
|
||||
<p id="loadingMessageText">Loading the client</p>
|
||||
<div class="spinner">
|
||||
<div class="spinner">
|
||||
<div class="bounce1"></div>
|
||||
<div class="bounce2"></div>
|
||||
<div class="bounce3"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container loading" id="container">
|
||||
<%- include('partials/toolbar') %>
|
||||
|
||||
<div id="notification" role="region" aria-label="Notification">
|
||||
<a href="#" aria-label="cancel" ><span></span><i class="icon-cancel-circled"></i></a>
|
||||
<a href="#" aria-label="cancel"><span></span><i class="icon-cancel-circled"></i></a>
|
||||
</div>
|
||||
<div class="primary" >
|
||||
<div class="primary">
|
||||
<div class="bgStatus current">
|
||||
<div class="bgButton" aria-live="assertive" role="contentinfo" aria-label="Blood Sugar">
|
||||
<span class="bgSpan">
|
||||
@@ -164,7 +163,7 @@
|
||||
</div>
|
||||
|
||||
<div id="drawer">
|
||||
<form id="settings-form" role="form" >
|
||||
<form id="settings-form" role="form">
|
||||
<ul class="navigation" role="navigation" aria-label="Settings">
|
||||
<li><a id="reportlink" href="report" target="reports" class="translate">Reports</a></li>
|
||||
<li><a id="editprofilelink" href="profile" target="profileeditor" class="translate">Profile Editor</a></li>
|
||||
@@ -181,13 +180,13 @@
|
||||
<legend class="translate icon-cog">Settings</legend>
|
||||
<dl class="radio">
|
||||
<dt class="translate">Units</dt>
|
||||
<dd><input type="radio" name="units-browser" id="mgdl-browser" value="mg/dl" checked /><label for="mgdl-browser">mg/dL</label></dd>
|
||||
<dd><input type="radio" name="units-browser" id="mmol-browser" value="mmol" /><label for="mmol-browser">mmol/L</label></dd>
|
||||
<dd><input type="radio" name="units-browser" id="mgdl-browser" value="mg/dl" checked><label for="mgdl-browser">mg/dL</label></dd>
|
||||
<dd><input type="radio" name="units-browser" id="mmol-browser" value="mmol"><label for="mmol-browser">mmol/L</label></dd>
|
||||
</dl>
|
||||
<dl class="radio">
|
||||
<dt class="translate">Date format</dt>
|
||||
<dd><input type="radio" name="timeformat-browser" id="12-browser" value="12" checked /><label for="12-browser" class="translate">12 hours</label></dd>
|
||||
<dd><input type="radio" name="timeformat-browser" id="24-browser" value="24" /><label for="24-browser" class="translate">24 hours</label></dd>
|
||||
<dd><input type="radio" name="timeformat-browser" id="12-browser" value="12" checked><label for="12-browser" class="translate">12 hours</label></dd>
|
||||
<dd><input type="radio" name="timeformat-browser" id="24-browser" value="24"><label for="24-browser" class="translate">24 hours</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt class="translate">Language</dt>
|
||||
@@ -218,45 +217,45 @@
|
||||
</dl>
|
||||
<dl class="toggle">
|
||||
<dt><span class="translate">Enable Alarms</span> <a class="tip" original-title="When enabled an alarm may sound."><i class="icon-help-circled"></i></a></dt>
|
||||
<dd><input type="checkbox" id="alarm-urgenthigh-browser" /><label for="alarm-urgenthigh-browser" class="translate">Urgent High Alarm</label></dd>
|
||||
<dd><input type="checkbox" id="alarm-high-browser" /><label for="alarm-high-browser" class="translate">High Alarm</label></dd>
|
||||
<dd><input type="checkbox" id="alarm-low-browser" /><label for="alarm-low-browser" class="translate">Low Alarm</label></dd>
|
||||
<dd><input type="checkbox" id="alarm-urgentlow-browser" /><label for="alarm-urgentlow-browser" class="translate">Urgent Low Alarm</label></dd>
|
||||
<dd><input type="checkbox" id="alarm-urgenthigh-browser"><label for="alarm-urgenthigh-browser" class="translate">Urgent High Alarm</label></dd>
|
||||
<dd><input type="checkbox" id="alarm-high-browser"><label for="alarm-high-browser" class="translate">High Alarm</label></dd>
|
||||
<dd><input type="checkbox" id="alarm-low-browser"><label for="alarm-low-browser" class="translate">Low Alarm</label></dd>
|
||||
<dd><input type="checkbox" id="alarm-urgentlow-browser"><label for="alarm-urgentlow-browser" class="translate">Urgent Low Alarm</label></dd>
|
||||
<dd>
|
||||
<input type="checkbox" id="alarm-timeagowarn-browser"/><label for="alarm-timeagowarn-browser" class="translate">Stale Data: Warn</label>
|
||||
<input type="text" id="alarm-timeagowarnmins-browser" class="timeago-mins" value="15"/>
|
||||
<input type="checkbox" id="alarm-timeagowarn-browser"><label for="alarm-timeagowarn-browser" class="translate">Stale Data: Warn</label>
|
||||
<input type="text" id="alarm-timeagowarnmins-browser" class="timeago-mins" value="15">
|
||||
<span class="translate">mins</span>
|
||||
</dd>
|
||||
<dd>
|
||||
<input type="checkbox" id="alarm-timeagourgent-browser"/><label for="alarm-timeagourgent-browser" class="translate">Stale Data: Urgent</label>
|
||||
<input type="text" id="alarm-timeagourgentmins-browser" class="timeago-mins" value="30"/>
|
||||
<input type="checkbox" id="alarm-timeagourgent-browser"><label for="alarm-timeagourgent-browser" class="translate">Stale Data: Urgent</label>
|
||||
<input type="text" id="alarm-timeagourgentmins-browser" class="timeago-mins" value="30">
|
||||
<span class="translate">mins</span>
|
||||
</dd>
|
||||
<dd><input type="checkbox" id="alarm-pumpbatterylow-browser" /><label for="alarm-pumpbatterylow-browser" class="translate">Pump Battery Low Alarm</label></dd>
|
||||
<dd><input type="checkbox" id="alarm-pumpbatterylow-browser"><label for="alarm-pumpbatterylow-browser" class="translate">Pump Battery Low Alarm</label></dd>
|
||||
</dl>
|
||||
<dl class="toggle">
|
||||
<dt><span class="translate">Night Mode</span> <a class="tip" original-title="When enabled the page will be dimmed from 10pm - 6am."><i class="icon-help-circled"></i></a></dt>
|
||||
<dd><input type="checkbox" name="nightmode-browser" id="nightmode-browser" /><label for="nightmode-browser" class="translate">Enable</label></dd>
|
||||
<dd><input type="checkbox" name="nightmode-browser" id="nightmode-browser"><label for="nightmode-browser" class="translate">Enable</label></dd>
|
||||
</dl>
|
||||
<dl class="toggle">
|
||||
<dt><span class="translate">Edit Mode</span> <a class="tip" original-title="When enabled icon to start edit mode is visible"><i class="icon-help-circled"></i></a></dt>
|
||||
<dd><input type="checkbox" name="editmode-browser" id="editmode-browser" /><label for="editmode-browser" class="translate">Enable</label></dd>
|
||||
<dd><input type="checkbox" name="editmode-browser" id="editmode-browser"><label for="editmode-browser" class="translate">Enable</label></dd>
|
||||
</dl>
|
||||
<dl id="show-rawbg-option" class="toggle">
|
||||
<dt><span class="translate">Show Raw BG Data</span> <a class="tip" original-title="When enabled small white dots will be displayed for raw BG data"><i class="icon-help-circled"></i></a></dt>
|
||||
<dd><input type="radio" name="show-rawbg" id="show-rawbg-never" value="never"/><label for="show-rawbg-never" class="translate">Never</label></dd>
|
||||
<dd><input type="radio" name="show-rawbg" id="show-rawbg-always" value="always"/><label for="show-rawbg-always" class="translate">Always</label></dd>
|
||||
<dd><input type="radio" name="show-rawbg" id="show-rawbg-noise" value="noise"/><label for="show-rawbg-noise" class="translate">When there is noise</label></dd>
|
||||
<dd><input type="radio" name="show-rawbg" id="show-rawbg-never" value="never"><label for="show-rawbg-never" class="translate">Never</label></dd>
|
||||
<dd><input type="radio" name="show-rawbg" id="show-rawbg-always" value="always"><label for="show-rawbg-always" class="translate">Always</label></dd>
|
||||
<dd><input type="radio" name="show-rawbg" id="show-rawbg-noise" value="noise"><label for="show-rawbg-noise" class="translate">When there is noise</label></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt class="translate">Custom Title</dt>
|
||||
<dd><input type="text" id="customTitle" value="Nightscout" /></dd>
|
||||
<dd><input type="text" id="customTitle" value="Nightscout"></dd>
|
||||
</dl>
|
||||
<dl class="radio">
|
||||
<dt class="translate">Theme</dt>
|
||||
<dd><input type="radio" name="theme-browser" id="theme-default-browser" value="default" checked /><label for="theme-default-browser" class="translate">Default</label></dd>
|
||||
<dd><input type="radio" name="theme-browser" id="theme-colors-browser" value="colors" /><label for="theme-colors-browser" class="translate">Colors</label></dd>
|
||||
<dd><input type="radio" name="theme-browser" id="theme-colorblindfriendly-browser" value="colorblindfriendly" /><label for="theme-colorblindfriendly-browser" class="translate">Colorblind-friendly colors</label></dd>
|
||||
<dd><input type="radio" name="theme-browser" id="theme-default-browser" value="default" checked><label for="theme-default-browser" class="translate">Default</label></dd>
|
||||
<dd><input type="radio" name="theme-browser" id="theme-colors-browser" value="colors"><label for="theme-colors-browser" class="translate">Colors</label></dd>
|
||||
<dd><input type="radio" name="theme-browser" id="theme-colorblindfriendly-browser" value="colorblindfriendly"><label for="theme-colorblindfriendly-browser" class="translate">Colorblind-friendly colors</label></dd>
|
||||
</dl>
|
||||
<dl id="show-plugins" class="toggle">
|
||||
<dt class="translate">Show Plugins</dt>
|
||||
@@ -280,11 +279,11 @@
|
||||
<div>Copyright © 2017 <a href="https://github.com/nightscout/cgm-remote-monitor/graphs/contributors" target="_blank">Nightscout contributors</a></div>
|
||||
</p>
|
||||
<div class="links">
|
||||
<a href="https://github.com/nightscout/cgm-remote-monitor/releases" target="_blank">Release Notes</a><br />
|
||||
<a href="http://nightscout.github.io/pages/update-fork/">Check for Updates</a><br />
|
||||
<a href="http://github.com/nightscout/cgm-remote-monitor" target="_blank">Open Source</a><br />
|
||||
<a href="http://www.nightscout.info" target="_blank">Nightscout Info</a><br />
|
||||
<a href="https://www.facebook.com/groups/cgminthecloud/" target="_blank">CGM in the Cloud</a><br />
|
||||
<a href="https://github.com/nightscout/cgm-remote-monitor/releases" target="_blank">Release Notes</a><br>
|
||||
<a href="http://nightscout.github.io/pages/update-fork/">Check for Updates</a><br>
|
||||
<a href="http://github.com/nightscout/cgm-remote-monitor" target="_blank">Open Source</a><br>
|
||||
<a href="http://www.nightscout.info" target="_blank">Nightscout Info</a><br>
|
||||
<a href="https://www.facebook.com/groups/cgminthecloud/" target="_blank">CGM in the Cloud</a><br>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
@@ -307,58 +306,58 @@
|
||||
<legend class="translate">Targets</legend>
|
||||
<label for="targetTop" class="left-column">
|
||||
<span class="translate">Top</span>
|
||||
<input type="number" step="any" id="targetTop" />
|
||||
<input type="number" step="any" id="targetTop">
|
||||
</label>
|
||||
<label for="targetBottom" class="left-column">
|
||||
<span class="translate">Bottom</span>
|
||||
<input type="number" step="any" id="targetBottom" />
|
||||
<input type="number" step="any" id="targetBottom">
|
||||
</label>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="bg">
|
||||
<legend class="translate">Glucose Reading</legend>
|
||||
<input type="number" step="any" id="glucoseValue" pattern="[0-9.,]*" />
|
||||
<input type="number" step="any" id="glucoseValue" pattern="[0-9.,]*">
|
||||
<label><br><span class="translate">Measurement Method</span><br></label>
|
||||
<label for="meter">
|
||||
<input type="radio" name="glucoseType" id="meter" value="Finger"/>
|
||||
<input type="radio" name="glucoseType" id="meter" value="Finger">
|
||||
<span class="translate">Meter</span>
|
||||
</label>
|
||||
<label for="sensor">
|
||||
<input type="radio" name="glucoseType" id="sensor" value="Sensor"/>
|
||||
<input type="radio" name="glucoseType" id="sensor" value="Sensor">
|
||||
<span class="translate">Sensor<br></span>
|
||||
</label>
|
||||
</fieldset>
|
||||
<fieldset id="nutrition">
|
||||
<label id="carbsGivenLabel" for="carbsGiven" class="left-column short-label">
|
||||
<span class="translate">Carbs Given</span>
|
||||
<input type="number" step="any" min="0" id="carbsGiven" placeholder="Amount in grams" class="titletranslate" pattern="\d*" />
|
||||
<input type="number" step="any" min="0" id="carbsGiven" placeholder="Amount in grams" class="titletranslate" pattern="\d*">
|
||||
</label>
|
||||
<label id="proteinGivenLabel" for="proteinGiven" class="left-column short-label">
|
||||
<span class="translate">Protein</span>
|
||||
<input type="number" step="any" min="0" id="proteinGiven" placeholder="Amount in grams" class="titletranslate" pattern="\d*" />
|
||||
<input type="number" step="any" min="0" id="proteinGiven" placeholder="Amount in grams" class="titletranslate" pattern="\d*">
|
||||
</label>
|
||||
<label id="fatGivenLabel" for="fatGiven" class="left-column short-label">
|
||||
<span class="translate">Fat</span>
|
||||
<input type="number" step="any" min="0" id="fatGiven" placeholder="Amount in grams" class="titletranslate" pattern="\d*" />
|
||||
<input type="number" step="any" min="0" id="fatGiven" placeholder="Amount in grams" class="titletranslate" pattern="\d*">
|
||||
</label>
|
||||
</fieldset>
|
||||
<label id="insulinGivenLabel" for="insulinGiven" class="left-column short-label">
|
||||
<span class="translate">Insulin Given</span>
|
||||
<input type="number" step="any" min="0" id="insulinGiven" placeholder="Amount in units" class="titletranslate" pattern="[0-9.,]*" />
|
||||
<input type="number" step="any" min="0" id="insulinGiven" placeholder="Amount in units" class="titletranslate" pattern="[0-9.,]*">
|
||||
</label>
|
||||
<label id="insulinSplitLabel" for="insulinSplit" class="left-column short-label">
|
||||
<span class="translate">Split</span>
|
||||
<input type="number" step="5" min="0" max="100" style="width:50px" id="insulinSplitNow" placeholder="% now" class="titletranslate" pattern="\d*" />%
|
||||
<input type="number" step="5" min="0" max="100" style="width:50px" id="insulinSplitNow" placeholder="% now" class="titletranslate" pattern="\d*">%
|
||||
:
|
||||
<input type="number" step="5" min="0" max="100" style="width:50px" id="insulinSplitExt" placeholder="% extended" class="titletranslate" pattern="\d*" />%
|
||||
<input type="number" step="5" min="0" max="100" style="width:50px" id="insulinSplitExt" placeholder="% extended" class="titletranslate" pattern="\d*">%
|
||||
</label>
|
||||
<label id="durationLabel" for="duration" class="left-column short-label">
|
||||
<span class="translate">Duration</span>
|
||||
<input id="duration" placeholder="Duration in minutes" class="titletranslate"/>
|
||||
<input id="duration" placeholder="Duration in minutes" class="titletranslate">
|
||||
</label>
|
||||
<label id="percentLabel" for="percent" class="left-column short-label">
|
||||
<span class="translate">Percent</span>
|
||||
<input id="percent" placeholder="Basal change in %" class="titletranslate" />
|
||||
<input id="percent" placeholder="Basal change in %" class="titletranslate">
|
||||
</label>
|
||||
<label id="profileLabel" for="profile" class="left-column short-label">
|
||||
<span class="translate">Profile</span>
|
||||
@@ -366,7 +365,7 @@
|
||||
</label>
|
||||
<label id="absoluteLabel" for="absolute" class="left-column short-label">
|
||||
<span class="translate">Basal value</span>
|
||||
<input type="number" step="0.025" id="absolute" placeholder="Absolute basal value" class="titletranslate"/>
|
||||
<input type="number" step="0.025" id="absolute" placeholder="Absolute basal value" class="titletranslate">
|
||||
</label>
|
||||
<label id="preBolusLabel" for="preBolus" class="left-column short-label extra-space">
|
||||
<span class="translate">Carb Time</span>
|
||||
@@ -391,21 +390,21 @@
|
||||
|
||||
<label for="enteredBy" class="left-column extra-space">
|
||||
<span class="translate">Entered By</span>
|
||||
<input type="text" id="enteredBy" value="" />
|
||||
<input type="text" id="enteredBy" value="">
|
||||
</label>
|
||||
|
||||
<div id="eventTime">
|
||||
<span class="translate">Event Time</span>
|
||||
<label for="nowtime">
|
||||
<input type="radio" name="nowOrOther" id="nowtime" value="now" checked="checked"/>
|
||||
<input type="radio" name="nowOrOther" id="nowtime" value="now" checked="checked">
|
||||
<span class="translate">Now</span>
|
||||
</label>
|
||||
<label for="othertime">
|
||||
<input type="radio" name="nowOrOther" id="othertime" value="other"/>
|
||||
<input type="radio" name="nowOrOther" id="othertime" value="other">
|
||||
<span class="translate">Other</span>
|
||||
</label>
|
||||
<input type="date" id="eventDateValue" name="eventDateValue" value="" class="eventinput eventdate"/>
|
||||
<input type="time" id="eventTimeValue" name="eventTimeValue" value="" class="eventinput eventtime"/>
|
||||
<input type="date" id="eventDateValue" name="eventDateValue" value="" class="eventinput eventdate">
|
||||
<input type="time" id="eventTimeValue" name="eventTimeValue" value="" class="eventinput eventtime">
|
||||
</div>
|
||||
|
||||
<button type="button" class="translate">Submit Form</button>
|
||||
@@ -426,7 +425,7 @@
|
||||
<td>
|
||||
<span class="translate">BG</span>:
|
||||
<span style="float:right;">
|
||||
<input type="number" size="3" id="bc_bg" class="insulincalculationpart" pattern="[0-9.]*" >
|
||||
<input type="number" size="3" id="bc_bg" class="insulincalculationpart" pattern="[0-9.]*">
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
@@ -482,7 +481,7 @@
|
||||
<td>
|
||||
<span class="translate">Carbs</span>:
|
||||
<span style="float:right;">
|
||||
<input type="number" size="3" id="bc_carbs" value="0" class="insulincalculationpart" pattern="\d*" > g
|
||||
<input type="number" size="3" id="bc_carbs" value="0" class="insulincalculationpart" pattern="\d*"> g
|
||||
</span>
|
||||
</td>
|
||||
<td id="bc_inzulincarbstd" class="insulincalculation">
|
||||
@@ -602,7 +601,7 @@
|
||||
<span style="float:right" id="bc_carbsneeded"></span>
|
||||
</td>
|
||||
<td>
|
||||
<span style="float:right"id="bc_insulinover"></span>
|
||||
<span style="float:right" id="bc_insulinover"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="border_bottom">
|
||||
@@ -648,20 +647,20 @@
|
||||
<label for="bc_enteredBy" class="left-column extra-space">
|
||||
<span class="translate">Entered By</span>:
|
||||
</label>
|
||||
<input type="text" id="bc_enteredBy" value="" />
|
||||
<input type="text" id="bc_enteredBy" value="">
|
||||
|
||||
<div id="bc_eventTime">
|
||||
<span class="translate">Event Time</span>:
|
||||
<input type="radio" name="bc_nowOrOther" id="bc_nowtime" value="now" checked="checked"/>
|
||||
<input type="radio" name="bc_nowOrOther" id="bc_nowtime" value="now" checked="checked">
|
||||
<label for="bc_nowtime">
|
||||
<span class="translate">Now</span>
|
||||
</label>
|
||||
<input type="radio" name="bc_nowOrOther" id="bc_othertime" value="other"/>
|
||||
<input type="radio" name="bc_nowOrOther" id="bc_othertime" value="other">
|
||||
<label for="bc_othertime">
|
||||
<span class="translate">Other</span>
|
||||
</label>
|
||||
<input type="date" id="bc_eventDateValue" name="bc_eventTimeValue" value="" class="bc_eventtimeinput"/>
|
||||
<input type="time" id="bc_eventTimeValue" name="bc_eventTimeValue" value="" class="bc_eventtimeinput"/>
|
||||
<input type="date" id="bc_eventDateValue" name="bc_eventTimeValue" value="" class="bc_eventtimeinput">
|
||||
<input type="time" id="bc_eventTimeValue" name="bc_eventTimeValue" value="" class="bc_eventtimeinput">
|
||||
</div>
|
||||
<div id="bc_retro" class="translate" style="display:none;width:100%;background-color:red;text-align: center;border: 2px solid black;border-radius: 10px;margin-top:10px;">RETRO MODE</div>
|
||||
</fieldset>
|
||||
@@ -683,14 +682,35 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="audio alarms">
|
||||
<audio src="audio/alarm.mp3" preload="auto" loop="true" class="alarm mp3" type="audio/mp3"></audio>
|
||||
<audio src="audio/alarm2.mp3" preload="auto" loop="true" class="urgent alarm2 mp3" type="audio/mp3"></audio>
|
||||
</div>
|
||||
|
||||
<script src="<%= locals.bundle %>/js/bundle.app.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="socket.io/socket.io.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="js/client.js?v=<%= locals.cachebuster %>"></script>
|
||||
</body>
|
||||
<script src="<%= locals.bundle %>/js/bundle.app.js"></script>
|
||||
<script src="socket.io/socket.io.js"></script>
|
||||
<script src="js/client.js"></script>
|
||||
|
||||
<script>
|
||||
if ('serviceWorker' in navigator) {
|
||||
window.addEventListener('load', () => {
|
||||
navigator.serviceWorker.register('/sw.js', { scope: '/' }).then(function(reg) {
|
||||
console.log('Service worker registered');
|
||||
reg.addEventListener('updatefound', () => {
|
||||
console.log('Service worker update detected');
|
||||
const newWorker = reg.installing;
|
||||
newWorker.addEventListener('statechange', (state) => {
|
||||
console.log('New worker state change', state);
|
||||
});
|
||||
});
|
||||
}).catch(function(error) {
|
||||
console.log('Registration failed with ' + error);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
CACHE MANIFEST
|
||||
|
||||
/images/launch.png
|
||||
/images/apple-touch-icon-57x57.png
|
||||
/images/apple-touch-icon-60x60.png
|
||||
/images/apple-touch-icon-72x72.png
|
||||
/images/apple-touch-icon-76x76.png
|
||||
/images/apple-touch-icon-114x114.png
|
||||
/images/apple-touch-icon-120x120.png
|
||||
/images/apple-touch-icon-144x144.png
|
||||
/images/apple-touch-icon-152x152.png
|
||||
/images/apple-touch-icon-180x180.png
|
||||
/images/favicon-32x32.png
|
||||
/images/android-chrome-192x192.png
|
||||
/images/favicon-96x96.png
|
||||
/images/favicon-16x16.png
|
||||
/manifest.json
|
||||
/images/favicon.ico
|
||||
/images/mstile-144x144.png
|
||||
/css/ui-darkness/jquery-ui.min.css?v=<%= locals.cachebuster %>
|
||||
/css/jquery.tooltips.css?v=<%= locals.cachebuster %>
|
||||
/audio/alarm.mp3
|
||||
/audio/alarm2.mp3
|
||||
/css/ui-darkness/images/ui-icons_ffffff_256x240.png
|
||||
/css/ui-darkness/images/ui-icons_cccccc_256x240.png
|
||||
/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png
|
||||
/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png
|
||||
/css/main.css?v=<%= locals.cachebuster %>
|
||||
/bundle/js/bundle.app.js?v=<%= locals.cachebuster %>
|
||||
/bundle/js/bundle.clock.js?v=<%= locals.cachebuster %>
|
||||
/bundle/js/bundle.report.js?v=<%= locals.cachebuster %>
|
||||
/socket.io/socket.io.js?v=<%= locals.cachebuster %>
|
||||
/js/client.js?v=<%= locals.cachebuster %>
|
||||
/images/logo2.png
|
||||
|
||||
NETWORK:
|
||||
*
|
||||
@@ -25,10 +25,10 @@
|
||||
<meta name="msapplication-config" content="/browserconfig.xml">
|
||||
<meta name="theme-color" content="#333333">
|
||||
|
||||
<link rel="preload" href="/css/main.css?v=<%= locals.cachebuster %>" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/main.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/drawer.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/profile.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/ui-darkness/jquery-ui.min.css?v=<%= locals.cachebuster %>" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/ui-darkness/jquery-ui.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<% include preloadCSS %>
|
||||
|
||||
</head>
|
||||
@@ -166,8 +166,8 @@
|
||||
<%- include('partials/authentication-status') %>
|
||||
|
||||
<script src="/api/v1/status.js"></script>
|
||||
<script src="<%= locals.bundle %>/js/bundle.app.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="/socket.io/socket.io.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="/profile/js/profileeditor.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="<%= locals.bundle %>/js/bundle.app.js"></script>
|
||||
<script src="/socket.io/socket.io.js"></script>
|
||||
<script src="/profile/js/profileeditor.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
<meta name="msapplication-config" content="/browserconfig.xml">
|
||||
<meta name="theme-color" content="#333333">
|
||||
|
||||
<link rel="preload" href="/css/main.css?v=<%= locals.cachebuster %>" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/report.css?v=<%= locals.cachebuster %>" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/ui-lightness/jquery-ui.min.css?v=<%= locals.cachebuster %>" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/main.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/report.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<link rel="preload" href="/css/ui-lightness/jquery-ui.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<% include preloadCSS %>
|
||||
|
||||
</head>
|
||||
@@ -122,10 +122,10 @@
|
||||
|
||||
<%- include('partials/authentication-status') %>
|
||||
|
||||
<script src="<%= locals.bundle %>/js/bundle.report.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="/socket.io/socket.io.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="/report/js/report.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="/report/js/flotcandle.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="/report/js/loopalyzer.js?v=<%= locals.cachebuster %>"></script>
|
||||
<script src="<%= locals.bundle %>/js/bundle.report.js"></script>
|
||||
<script src="/socket.io/socket.io.js"></script>
|
||||
<script src="/report/js/report.js"></script>
|
||||
<script src="/report/js/flotcandle.js"></script>
|
||||
<script src="/report/js/loopalyzer.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,107 @@
|
||||
'use strict';
|
||||
|
||||
var CACHE = '<%= locals.cachebuster %>';
|
||||
|
||||
const CACHE_LIST = [
|
||||
'/',
|
||||
'/images/launch.png',
|
||||
'/images/apple-touch-icon-57x57.png',
|
||||
'/images/apple-touch-icon-60x60.png',
|
||||
'/images/apple-touch-icon-72x72.png',
|
||||
'/images/apple-touch-icon-76x76.png',
|
||||
'/images/apple-touch-icon-114x114.png',
|
||||
'/images/apple-touch-icon-120x120.png',
|
||||
'/images/apple-touch-icon-144x144.png',
|
||||
'/images/apple-touch-icon-152x152.png',
|
||||
'/images/apple-touch-icon-180x180.png',
|
||||
'/images/favicon-32x32.png',
|
||||
'/images/android-chrome-192x192.png',
|
||||
'/images/favicon-96x96.png',
|
||||
'/images/favicon-16x16.png',
|
||||
'/manifest.json',
|
||||
'/images/favicon.ico',
|
||||
'/images/mstile-144x144.png',
|
||||
'/css/ui-darkness/jquery-ui.min.css',
|
||||
'/css/jquery.tooltips.css',
|
||||
'/audio/alarm.mp3',
|
||||
'/audio/alarm2.mp3',
|
||||
'/css/ui-darkness/images/ui-icons_ffffff_256x240.png',
|
||||
'/css/ui-darkness/images/ui-icons_cccccc_256x240.png',
|
||||
'/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png',
|
||||
'/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png',
|
||||
'/css/main.css',
|
||||
'/bundle/js/bundle.app.js',
|
||||
'/bundle/js/bundle.clock.js',
|
||||
'/bundle/js/bundle.report.js',
|
||||
'/socket.io/socket.io.js',
|
||||
'/js/client.js',
|
||||
'/images/logo2.png'
|
||||
];
|
||||
|
||||
// Open a cache and use `addAll()` with an array of assets to add all of them
|
||||
// to the cache. Return a promise resolving when all the assets are added.
|
||||
function precache() {
|
||||
return caches.open(CACHE).then(function (cache) {
|
||||
return cache.addAll(CACHE_LIST);
|
||||
});
|
||||
}
|
||||
|
||||
// Open the cache where the assets were stored and search for the requested
|
||||
// resource. Notice that in case of no matching, the promise still resolves
|
||||
// but it does with `undefined` as value.
|
||||
function fromCache(request) {
|
||||
return caches.open(CACHE).then(function (cache) {
|
||||
return cache.match(request).then(function (matching) {
|
||||
return matching || Promise.reject('no-match');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Update consists in opening the cache, performing a network request and
|
||||
// storing the new response data.
|
||||
function update(request) {
|
||||
return caches.open(CACHE).then(function (cache) {
|
||||
return fetch(request).then(function (response) {
|
||||
return cache.put(request, response);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// On install, cache some resources.
|
||||
self.addEventListener('install', function(evt) {
|
||||
//console.log('The service worker is being installed.');
|
||||
evt.waitUntil(precache());
|
||||
});
|
||||
|
||||
function inCache(request) {
|
||||
let found = false;
|
||||
CACHE_LIST.forEach( function (e) {
|
||||
if (request.url.endsWith(e)) {
|
||||
found = true;
|
||||
}
|
||||
});
|
||||
return found;
|
||||
}
|
||||
|
||||
self.addEventListener('fetch', function(evt) {
|
||||
if (!evt.request.url.startsWith(self.location.origin) || CACHE === 'developmentMode' || !inCache(evt.request) || evt.request.method !== 'GET') {
|
||||
//console.log('Skipping cache for ', evt.request.url);
|
||||
return void evt.respondWith(fetch(evt.request));
|
||||
}
|
||||
//console.log('Returning cached for ', evt.request.url);
|
||||
evt.respondWith(fromCache(evt.request));
|
||||
evt.waitUntil(update(evt.request));
|
||||
});
|
||||
|
||||
self.addEventListener('activate', (event) => {
|
||||
event.waitUntil(
|
||||
caches.keys().then((cacheNames) => {
|
||||
return cacheNames.filter((cacheName) => CACHE !== cacheName);
|
||||
}).then((unusedCaches) => {
|
||||
//console.log('DESTROYING CACHE', unusedCaches.join(','));
|
||||
return Promise.all(unusedCaches.map((unusedCache) => {
|
||||
return caches.delete(unusedCache);
|
||||
}));
|
||||
}).then(() => self.clients.claim())
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user