mirror of
https://github.com/bckelley/cgm-remote-monitor.git
synced 2026-08-24 03:14:12 -05:00
* Change incompatible module and fix a memory leak in the process * Fix fonts, allow websocket * Oops fix a brainfart with using the hostname * Don't inlude null hostname * Update the shrinkwrap * Instantiate new cache if new instance of profile code is created. Calculate IOB with three digit precision to keep tests happy (and this is roughly the precision we're operating at anyway). * - implement @jweismann suggestions https://github.com/nightscout/cgm-remote-monitor/pull/4449#issuecomment-469868508 - add frameAncestors, baseUri and formAction protection * update README and run doctoc * fix reportOnly * add objectSrc * Use modern CSS loading * Change CSS to use the "official" async loading across the board (which hopefully plays nicer with CSP) * first release candiate for 0.11.2 with Minimed EU Server and Guardian Connect integration - integrates https://github.com/mddub/minimed-connect-to-nightscout/pull/11 into Nightscout * bump node 10 LTS version * increase logging, fix /swagger.yaml * fix typo * set version to rc2, update mongodb to 3.2.2 * add SECURE_CSP_REPORT_ONLY (default false). * npm update and revert to requiring Node versions without security issues.
107 lines
4.3 KiB
Plaintext
107 lines
4.3 KiB
Plaintext
|
|
<script>
|
|
/*! loadCSS. [c]2017 Filament Group, Inc. MIT License */
|
|
/* This file is meant as a standalone workflow for
|
|
- testing support for link[rel=preload]
|
|
- enabling async CSS loading in browsers that do not support rel=preload
|
|
- applying rel preload css once loaded, whether supported or not.
|
|
*/
|
|
(function( w ){
|
|
"use strict";
|
|
// rel=preload support test
|
|
if( !w.loadCSS ){
|
|
w.loadCSS = function(){};
|
|
}
|
|
// define on the loadCSS obj
|
|
var rp = loadCSS.relpreload = {};
|
|
// rel=preload feature support test
|
|
// runs once and returns a function for compat purposes
|
|
rp.support = (function(){
|
|
var ret;
|
|
try {
|
|
ret = w.document.createElement( "link" ).relList.supports( "preload" );
|
|
} catch (e) {
|
|
ret = false;
|
|
}
|
|
return function(){
|
|
return ret;
|
|
};
|
|
})();
|
|
|
|
// if preload isn't supported, get an asynchronous load by using a non-matching media attribute
|
|
// then change that media back to its intended value on load
|
|
rp.bindMediaToggle = function( link ){
|
|
// remember existing media attr for ultimate state, or default to 'all'
|
|
var finalMedia = link.media || "all";
|
|
|
|
function enableStylesheet(){
|
|
link.media = finalMedia;
|
|
}
|
|
|
|
// bind load handlers to enable media
|
|
if( link.addEventListener ){
|
|
link.addEventListener( "load", enableStylesheet );
|
|
} else if( link.attachEvent ){
|
|
link.attachEvent( "onload", enableStylesheet );
|
|
}
|
|
|
|
// Set rel and non-applicable media type to start an async request
|
|
// note: timeout allows this to happen async to let rendering continue in IE
|
|
setTimeout(function(){
|
|
link.rel = "stylesheet";
|
|
link.media = "only x";
|
|
});
|
|
// also enable media after 3 seconds,
|
|
// which will catch very old browsers (android 2.x, old firefox) that don't support onload on link
|
|
setTimeout( enableStylesheet, 3000 );
|
|
};
|
|
|
|
// loop through link elements in DOM
|
|
rp.poly = function(){
|
|
// double check this to prevent external calls from running
|
|
if( rp.support() ){
|
|
return;
|
|
}
|
|
var links = w.document.getElementsByTagName( "link" );
|
|
for( var i = 0; i < links.length; i++ ){
|
|
var link = links[ i ];
|
|
// qualify links to those with rel=preload and as=style attrs
|
|
if( link.rel === "preload" && link.getAttribute( "as" ) === "style" && !link.getAttribute( "data-loadcss" ) ){
|
|
// prevent rerunning on link
|
|
link.setAttribute( "data-loadcss", true );
|
|
// bind listeners to toggle media back
|
|
rp.bindMediaToggle( link );
|
|
}
|
|
}
|
|
};
|
|
|
|
// if unsupported, run the polyfill
|
|
if( !rp.support() ){
|
|
// run once at least
|
|
rp.poly();
|
|
|
|
// rerun poly on an interval until onload
|
|
var run = w.setInterval( rp.poly, 500 );
|
|
if( w.addEventListener ){
|
|
w.addEventListener( "load", function(){
|
|
rp.poly();
|
|
w.clearInterval( run );
|
|
} );
|
|
} else if( w.attachEvent ){
|
|
w.attachEvent( "onload", function(){
|
|
rp.poly();
|
|
w.clearInterval( run );
|
|
} );
|
|
}
|
|
}
|
|
|
|
|
|
// commonjs
|
|
if( typeof exports !== "undefined" ){
|
|
exports.loadCSS = loadCSS;
|
|
}
|
|
else {
|
|
w.loadCSS = loadCSS;
|
|
}
|
|
}( typeof global !== "undefined" ? global : this ) );
|
|
</script> |