nightscout
Version:
Nightscout acts as a web-based CGM (Continuous Glucose Monitor) to allow multiple caregivers to remotely view a patients glucose data in realtime.
2 lines • 1.93 MB
JavaScript
/*! For license information please see bundle.app.js.LICENSE.txt */
(function(){var __webpack_modules__={2935:function(t,e,n){"use strict";n(89371),n(22482),n(48252),t=n.hmd(t),n(48004),n(48004),n(51127),window._=n(52077),window.d3=n(91876),n(31527),window.Storage=n(83358),n(37777),n(26595),n(35008),n(95200),window.moment=n(95653),window.Nightscout=window.Nightscout||{},window.Nightscout={client:n(63857),units:n(73561)(),admin_plugins:n(63903)()},window.Nightscout.report_plugins_preinit=n(5293),window.Nightscout.predictions=n(4815),window.Nightscout.reportclient=n(10892),window.Nightscout.profileclient=n(74529),window.Nightscout.foodclient=n(23738),console.info("Nightscout bundle ready"),void 0!==t.hot&&t.hot.accept()},18925:function(t,e,n){"use strict";var r=n(48004),i=n(78279),a={name:"cleanentriesdb",label:"Clean Mongo entries (glucose entries) database",pluginType:"admin"};t.exports=function(){return a},a.actions=[{name:"Delete all documents from entries collection older than 180 days",description:"This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.",buttonLabel:"Delete old documents",confirmText:"Delete old documents from entries collection?",preventClose:!0}],a.actions[0].init=function(t,e){var n=t.translate;r("#admin_"+a.name+"_0_status").hide();var i='<br/><label for="admin_entries_days">'+n("Number of Days to Keep:")+' <input id="admin_entries_days" value="180" size="3" min="1"/></label>';r("#admin_"+a.name+"_0_html").html(i),e&&e()},a.actions[0].code=function(t,e){var n=t.translate,o=r("#admin_"+a.name+"_0_status"),s=Number(r("#admin_entries_days").val());if(isNaN(s)||s<3)return alert(n("%1 is not a valid number - must be more than 2",{params:[r("#admin_entries_days").val()]})),void(e&&e());var u=i().subtract(s,"days");if(!t.hashauth.isAuthenticated())return alert(n("Your device is not authenticated yet")),void(e&&e());o.hide().text(n("Deleting records ...")).fadeIn("slow"),r.ajax("/api/v1/entries/?find[date][$lte]="+u.valueOf(),{method:"DELETE",headers:t.headers(),success:function(t){o.hide().text(n("%1 records deleted",{params:[t.n]})).fadeIn("slow")},error:function(){o.hide().text(n("Error")).fadeIn("slow")}}).done((function(){e&&e()})).fail((function(){e&&e()}))}},32132:function(t,e,n){"use strict";var r=n(48004),i=n(78279),a={name:"cleanstatusdb",label:"Clean Mongo status database",pluginType:"admin"};t.exports=function(){return a},a.actions=[{name:"Delete all documents from devicestatus collection",description:"This task removes all documents from devicestatus collection. Useful when uploader battery status is not properly updated.",buttonLabel:"Delete all documents",confirmText:"Delete all documents from devicestatus collection?"},{name:"Delete all documents from devicestatus collection older than 30 days",description:"This task removes all documents from devicestatus collection that are older than 30 days. Useful when uploader battery status is not properly updated.",buttonLabel:"Delete old documents",confirmText:"Delete old documents from devicestatus collection?",preventClose:!0}],a.actions[0].init=function(t,e){var n=t.translate,i=r("#admin_"+a.name+"_0_status");i.hide().text(n("Loading database ...")).fadeIn("slow"),r.ajax("/api/v1/devicestatus.json?count=500",{headers:t.headers(),success:function(t){var e=500===t.length?"500+":t.length;i.hide().text(n("Database contains %1 records",{params:[e]})).fadeIn("slow")},error:function(){i.hide().text(n("Error loading database")).fadeIn("slow")}}).done((function(){e&&e()}))},a.actions[0].code=function(t,e){var n=t.translate,i=r("#admin_"+a.name+"_0_status");if(!t.hashauth.isAuthenticated())return alert(n("Your device is not authenticated yet")),void(e&&e());i.hide().text(n("Deleting records ...")).fadeIn("slow"),r.ajax({method:"DELETE",url:"/api/v1/devicestatus/*",headers:t.headers()}).done((function(){i.hide().text(n("All records removed ...")).fadeIn("slow"),e&&e()})).fail((function(){i.hide().text(n("Error")).fadeIn("slow"),e&&e()}))},a.actions[1].init=function(t,e){var n=t.translate;r("#admin_"+a.name+"_1_status").hide();var i='<br/><label for="admin_devicestatus_days">'+n("Number of Days to Keep:")+' <input id="admin_devicestatus_days" value="30" size="3" min="1"/></label>';r("#admin_"+a.name+"_1_html").html(i),e&&e()},a.actions[1].code=function(t,e){var n=t.translate,o=r("#admin_"+a.name+"_1_status"),s=Number(r("#admin_devicestatus_days").val());if(isNaN(s)||s<1)return alert(n("%1 is not a valid number",{params:[r("#admin_devicestatus_days").val()]})),void(e&&e());var u=i().subtract(s,"days").format("YYYY-MM-DD");if(!t.hashauth.isAuthenticated())return alert(n("Your device is not authenticated yet")),void(e&&e());o.hide().text(n("Deleting records ...")).fadeIn("slow"),r.ajax("/api/v1/devicestatus/?find[created_at][$lte]="+u,{method:"DELETE",headers:t.headers(),success:function(t){o.text(n("%1 records deleted",{params:[t.n]}))},error:function(){o.hide().text(n("Error")).fadeIn("slow")}}).done((function(){e&&e()})).fail((function(){e&&e()}))}},86888:function(t,e,n){"use strict";var r=n(48004),i=n(78279),a={name:"cleantreatmentsdb",label:"Clean Mongo treatments database",pluginType:"admin"};t.exports=function(){return a},a.actions=[{name:"Delete all documents from treatments collection older than 180 days",description:"This task removes all documents from treatments collection that are older than 180 days. Useful when uploader battery status is not properly updated.",buttonLabel:"Delete old documents",confirmText:"Delete old documents from treatments collection?",preventClose:!0}],a.actions[0].init=function(t,e){var n=t.translate;r("#admin_"+a.name+"_0_status").hide();var i='<br/><label for="admin_treatments_days">'+n("Number of Days to Keep:")+' <input id="admin_treatments_days" value="180" size="3" min="1"/></label>';r("#admin_"+a.name+"_0_html").html(i),e&&e()},a.actions[0].code=function(t,e){var n=t.translate,o=r("#admin_"+a.name+"_0_status"),s=Number(r("#admin_treatments_days").val());if(isNaN(s)||s<3)return alert(n("%1 is not a valid number - must be more than 2",{params:[r("#admin_treatments_days").val()]})),void(e&&e());var u=i().subtract(s,"days").format("YYYY-MM-DD");if(!t.hashauth.isAuthenticated())return alert(n("Your device is not authenticated yet")),void(e&&e());o.hide().text(n("Deleting records ...")).fadeIn("slow"),r.ajax("/api/v1/treatments/?find[created_at][$lte]="+u,{method:"DELETE",headers:t.headers(),success:function(t){o.hide().text(n("%1 records deleted",{params:[t.n]})).fadeIn("slow")},error:function(){o.hide().text(n("Error")).fadeIn("slow")}}).done((function(){e&&e()})).fail((function(){e&&e()}))}},20787:function(t,e,n){"use strict";var r=n(48004),i={name:"futureitems",label:"Remove future items from mongo database",pluginType:"admin"};t.exports=function(){return i},i.actions=[{name:"Find and remove treatments in the future",description:"This task find and remove treatments in the future.",buttonLabel:"Remove treatments in the future"},{name:"Find and remove entries in the future",description:"This task find and remove CGM data in the future created by uploader with wrong date/time.",buttonLabel:"Remove entries in the future"}],i.actions[0].init=function(t,e){var n=t.translate,a=r("#admin_"+i.name+"_0_status");function o(t){return t||""}function s(e,i){i.append(r("<tr>").css("background-color","#0f0f0f").append(r("<td>").attr("width","20%").append(new Date(e.created_at).toLocaleString().replace(/([\d]+:[\d]{2})(:[\d]{2})(.*)/,"$1$3"))).append(r("<td>").attr("width","20%").append(e.eventType?n(t.careportal.resolveEventName(e.eventType)):"")).append(r("<td>").attr("width","10%").attr("align","center").append(e.glucose?e.glucose+" ("+n(e.glucoseType)+")":"")).append(r("<td>").attr("width","10%").attr("align","center").append(o(e.insulin))).append(r("<td>").attr("width","10%").attr("align","center").append(o(e.carbs))).append(r("<td>").attr("width","10%").append(o(e.enteredBy))).append(r("<td>").attr("width","20%").append(o(e.notes))))}a.hide().text(n("Loading database ...")).fadeIn("slow");var u=(new Date).toISOString();r.ajax("/api/v1/treatments.json?&find[created_at][$gte]="+u,{headers:t.headers(),success:function(t){i.treatmentrecords=t,a.hide().text(n("Database contains %1 future records",{params:[t.length]})).fadeIn("slow");var e=r("<table>").css("margin-top","10px");r("#admin_"+i.name+"_0_html").append(e),function(t,e){e.append(r("<tr>").css("background","#040404").append(r("<th>").css("width","80px").attr("align","left").append(n("Time"))).append(r("<th>").css("width","150px").attr("align","left").append(n("Event Type"))).append(r("<th>").css("width","150px").attr("align","left").append(n("Blood Glucose"))).append(r("<th>").css("width","50px").attr("align","left").append(n("Insulin"))).append(r("<th>").css("width","50px").attr("align","left").append(n("Carbs"))).append(r("<th>").css("width","150px").attr("align","left").append(n("Entered By"))).append(r("<th>").css("width","300px").attr("align","left").append(n("Notes"))));for(var i=0;i<t.length;i++)s(t[i],e)}(t,e),i.actions[0].confirmText=n("Remove %1 selected records?",{params:[t.length]})},error:function(){a.hide().text(n("Error loading database")).fadeIn("slow"),i.treatmentrecords=[]}}).done((function(){e&&e()}))},i.actions[0].code=function(t,e){var n=t.translate,a=r("#admin_"+i.name+"_0_status");if(!t.hashauth.isAuthenticated())return alert(n("Your device is not authenticated yet")),void(e&&e());function o(e){r.ajax({method:"DELETE",url:"/api/v1/treatments/"+e,headers:t.headers()}).done((function(){a.text(n("Record %1 removed ...",{params:[e]}))})).fail((function(){a.text(n("Error removing record %1",{params:[e]}))}))}a.hide().text(n("Deleting records ...")).fadeIn("slow");for(var s=0;s<i.treatmentrecords.length;s++)o(i.treatmentrecords[s]._id);r("#admin_"+i.name+"_0_html").html(""),e&&e()},i.actions[1].init=function(t,e){var n=t.translate,a=r("#admin_"+i.name+"_1_status");a.hide().text(n("Loading database ...")).fadeIn("slow");var o=(new Date).getTime();r.ajax("/api/v1/entries.json?&find[date][$gte]="+o+"&count=288",{headers:t.headers(),success:function(t){i.entriesrecords=t,a.hide().text(n("Database contains %1 future records",{params:[t.length]})).fadeIn("slow"),i.actions[1].confirmText=n("Remove %1 selected records?",{params:[t.length]})},error:function(){a.hide().text(n("Error loading database")).fadeIn("slow"),i.entriesrecords=[]}}).done((function(){e&&e()}))},i.actions[1].code=function(t,e){var n=t.translate,a=r("#admin_"+i.name+"_1_status");if(!t.hashauth.isAuthenticated())return alert(n("Your device is not authenticated yet")),void(e&&e());function o(e){r.ajax({method:"DELETE",url:"/api/v1/entries/"+e,headers:t.headers()}).done((function(){a.text(n("Record %1 removed ...",{params:[e]}))})).fail((function(){a.text(n("Error removing record %1",{params:[e]}))}))}a.hide().text(n("Deleting records ...")).fadeIn("slow");for(var s=0;s<i.entriesrecords.length;s++)o(i.entriesrecords[s]._id);e&&e()}},63903:function(t,e,n){"use strict";var r=n(48004),i=n(13476),a=n(97735);t.exports=function(){var t=[n(33304)(),n(59380)(),n(32132)(),n(86888)(),n(18925)(),n(20787)()];function e(n){return n?i(t,{name:n}):e}return e.eachPlugin=function(e){a(t,e)},e.createHTML=function(t){var n=t.translate;e.eachPlugin((function(e){var i=r("<fieldset>");r("#admin_placeholder").append(i),i.append(r("<legend>").append(n(e.label)));for(var a=0;a<e.actions.length;a++){0!==a&&i.append("<hr>");var o=e.actions[a];o.name&&(i.append(r("<b>").css("text-decoration","underline").append(n(o.name))),i.append("<br>")),i.append(r("<i>").append(n(o.description))),i.append(r("<div>").attr("id","admin_"+e.name+"_"+a+"_html")),i.append(r("<button>").addClass("adminButton").attr("plugin",e.name).attr("action",a).append(n(o.buttonLabel))),i.append(r("<span>").attr("id","admin_"+e.name+"_"+a+"_status")),o.init&&o.init(t)}e.css&&r("<style>").prop("type","text/css").html(e.css).appendTo("head")})),r(".adminButton").click(e.doAction)},e.doAction=function(t){var n=window.Nightscout,i=r(this).attr("plugin"),a=r(this).attr("action"),o=e(i).actions[a],s=!0;o.confirmText&&(s=window.confirm(n.client.translate(o.confirmText))),s&&(console.log("Running action",a,"on plugin",i),o.code(n.client),o.preventClose||r(this).css("display","none")),t&&t.preventDefault()},e()}},59380:function(t,e,n){"use strict";var r=n(48004),i=n(52077),a={name:"roles",label:"Roles - Groups of People, Devices, etc",pluginType:"admin"};t.exports=function(){return a};var o=null;function s(t,e){r.ajax({method:"GET",url:"/api/v2/authorization/roles",headers:t.headers()}).done((function(n){a.records=n,o.hide().text(t.translate("Database contains %1 roles",{params:[n.length]})).fadeIn("slow"),function(t,e){var n=r("#admin_roles_table");n.empty().append(r("<tr>").css("background","#040404").append(r("<th>").css("width","100px").attr("align","left").append(e.translate("Name"))).append(r("<th>").css("width","150px").attr("align","left").append(e.translate("Permissions"))).append(r("<th>").css("width","150px").attr("align","left").append(e.translate("Notes"))));for(var i=0;i<t.length;i++)l(t[i],n,e)}(n,t),e&&e()})).fail((function(n){o.hide().text(t.translate("Error loading database")).fadeIn("slow"),a.records=[],e&&e(n)}))}function u(t,e){r("#editroledialog").dialog({width:360,height:360,buttons:[{text:e.translate("Save"),class:"leftButton",click:function(){t.name=r("#edrole_name").val(),t.permissions=i.chain(r("#edrole_permissions").val().toLowerCase().split(/[;, ]/)).map(i.trim).reject(i.isEmpty).sort().value(),t.notes=r("#edrole_notes").val();var n=this;delete t.autoGenerated,function(t,e,n){var a=i.isEmpty(t._id)?"POST":"PUT";r.ajax({method:a,url:"/api/v2/authorization/roles/",headers:e.headers(),data:t}).done((function(){s(e,n)})).fail((function(t){console.error("Unable to "+a+" Role",t.responseText),window.alert(e.translate("Unable to save Role")),n&&n()}))}(t,e,(function(){r(n).dialog("close")}))}},{text:e.translate("Cancel"),click:function(){r(this).dialog("close")}}],open:function(){r(this).parent().css("box-shadow","20px 20px 20px 0px black"),r(this).parent().find(".ui-dialog-buttonset").css({width:"100%","text-align":"right"}),r(this).parent().find('button:contains("'+e.translate("Save")+'")').css({float:"left"}),r("#edrole_name").val(t.name||"").focus(),r("#edrole_permissions").val(t.permissions?t.permissions.join(" "):""),r("#edrole_notes").val(t.notes||"")}})}function l(t,e,n){var a=r('<img title="'+n.translate("Edit this role")+'" style="cursor:pointer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABEUlEQVQ4jZ3MMUsCYQDG8ee8IySQbNCLyyEKG/RLNAXicqvQcAeNLrcFLlE0+xHuNpt8wy04rrYm8Q4HQRE56BSC3lSqU1BwCoxM39dnffj9BWyxXvVeEzvtctBwHyRebNu2Nk2lzMlrgJB+qBEeTByiKYpihl+fIO8jTI9PDJEVF1+K2iw+M6PhDuyag4NkQi/c3FkCK5Z3ZbM76qLltpCbn+vXxq0FABsDy9hzPdBvqvtXvvXzrw1swmsDLPjfACteGeDBfwK8+FdgGwwAIgC0ncsjxGRSH/eiPBgAJADY2z8sJ4JBfNBsDqlADVYMANIzKalv/bHaefKsTH9iPFb8ISsGAJym0+Qinz3jQktbAHcxvx3559eSAAAAAElFTkSuQmCC">');a.click((function(){u(t,n)}));var o="";t._id&&(o=r('<img title="Delete this role" class="titletranslate" style="cursor:pointer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACrElEQVQ4T42Ty2sTQRzHv5tmk2yyjRNtpfZhL8V6s2KoUNC2XqwgaCsVQcGiFqpHi0c9iRdR/ANE9KR40FIQX4cueKoPaKFoLdSYNtE0abKT1+5s9iW7aUMiHtzTzO7v85md+c6PA4DrHbsPCKIgOWO1pA7dT6YXnXH949SE/F63pqwZtRrO+SCKgjQ5NUV+azpmHj2krMwaJC4c8Erj+/eRyloMMwWFKgbn1nC3ervlK1evkXBLGBZT8SOewotnTylTNLdgeg/pDgZDC2cPHSR8bB22DVC9hFe0SG/H0xFXcHlykjRHRDBWgJcZSCY38Xx2lhqMnRYE34Px/sN9vlQWeoHBAx2yXsRruVAVuFsIBaSJ8+eJGPaBqQV4NROJjTzez89jLBoFn6FgybQL54wS3uTyVDFQ3cL2IYpBv3RhdJSIIQ80tQyv7gEqJvS8AmUlBs7UXPhtjtZgh3UFNYngk86NHCfNAg9dMwHVBPu+CpsVkTXKeJeVG+AGgTOZ3tt6MSKKjy+NjEBjFrR4ElZmA4pdxstMFsyyJu6tZZ7Ux9vwB6EAL50ZGiRECEPPUOixVTRxHlicgSVWxEdZpuZWfNuS2hk48NjwMIkIYZglBnV5Cbqtws/5IaAJmsfCglrEl2y2QeKmEBJ80tixKmxrFpSVr0gV0viQoxho2YUuPohmeFD22PiklLC4ma5JuBvdrfLJI0dJd0s7bM0ES8aR/BXDXGaTskqlL+D3Lwy0tZEePoAd4EA5YF4tYymdonfjmQh3s6dTPjU4SHYGwjAKecSXFyGlM1TdytntE56T+ts7SC/vhw3gm6njc2Kd3vm5Ub1IwQAvnYhGiZpYw1wiWYPrIw7wnBTt7CLOOwdmut14kQQvqt24tfK/utGR6LaF+iRqMf4N/O/8D28HiiCRYqzAAAAAAElFTkSuQmCC">')).click((function(){window.confirm(n.translate("Are you sure you want to delete: ")+t.name)&&function(t,e,n){r.ajax({method:"DELETE",url:"/api/v2/authorization/roles/"+t._id,headers:e.headers()}).done((function(){s(e,n)})).fail((function(t){console.error("Unable to delete Role",t.responseText),window.alert(e.translate("Unable to delete Role"))}))}(t,n)})),e.append(r("<tr>").css("background-color","#0f0f0f").append(r("<td>").attr("width","20%").append(a).append(o).append(t.name)).append(r("<td>").attr("width","20%").append(i.isEmpty(t.permissions)?"[none]":t.permissions.join(" "))).append(r("<td>").attr("width","10%").append(t._id?t.notes?t.notes:"":"[system default]")))}a.actions=[{description:"Each role will have a 1 or more permissions. The <em>*</em> permission is a wildcard, permissions are a hierarchy using <em>:</em> as a separator.",buttonLabel:"Add new Role",init:function(t,e){(o=r("#admin_"+a.name+"_0_status")).hide().text(t.translate("Loading database ...")).fadeIn("slow");var n=r('<table id="admin_roles_table">').css("margin-top","10px");r("#admin_"+a.name+"_0_html").append(n).append(function(t){var e='<div id="editroledialog" style="display:none" title="'+t.translate("Edit Role")+'"> <label for="edrole_name">'+t.translate("Name")+' <input id="edrole_name" placeholder="'+t.translate("admin, school, family, etc")+'"/> </label> <br> <label for="edrole_permissions">'+t.translate("Permissions")+'</label> <textarea id="edrole_permissions" rows="3" style="width:300px"></textarea><br> <br> <label for="edrole_notes">'+t.translate("Additional Notes, Comments")+'</label> <textarea id="edrole_notes" style="width:300px"></textarea><br> </div>';return r(e)}(t)),s(t,e)},preventClose:!0,code:function(t,e){u({},t)}}]},33304:function(t,e,n){"use strict";var r=n(48004),i=n(52077),a={name:"subjects",label:"Subjects - People, Devices, etc",pluginType:"admin"};t.exports=function(){return a};var o=null;function s(t,e){r.ajax({method:"GET",url:"/api/v2/authorization/subjects",headers:t.headers()}).done((function(n){a.records=n,o.hide().text(t.translate("Database contains %1 subjects",{params:[n.length]})).fadeIn("slow"),function(t,e){var n=r("#admin_subjects_table");n.empty().append(r("<tr>").css("background","#040404").append(r("<th>").css("width","100px").attr("align","left").append(e.translate("Name"))).append(r("<th>").css("width","150px").attr("align","left").append(e.translate("Roles"))).append(r("<th>").css("width","150px").attr("align","left").append(e.translate("Access Token"))).append(r("<th>").css("width","150px").attr("align","left").append(e.translate("Notes"))));for(var i=0;i<t.length;i++)l(t[i],n,e)}(n,t),e&&e()})).fail((function(n){o.hide().text(t.translate("Error loading database")).fadeIn("slow"),a.records=[],e&&e(n)}))}function u(t,e){r("#editsubjectdialog").dialog({width:360,height:300,buttons:[{text:e.translate("Save"),class:"leftButton",click:function(){t.name=r("#edsub_name").val(),t.roles=i.chain(r("#edsub_roles").val().toLowerCase().split(/[;, ]/)).map(i.trim).reject(i.isEmpty).sort().value(),t.notes=r("#edsub_notes").val();var n=this;!function(t,e,n){var a=i.isEmpty(t._id)?"POST":"PUT";r.ajax({method:a,url:"/api/v2/authorization/subjects/",headers:e.headers(),data:t}).done((function(){s(e,n)})).fail((function(t){console.error("Unable to "+a+" Subject",t.responseText),window.alert(e.translate("Unable to save Subject")),n&&n()}))}(t,e,(function(){r(n).dialog("close")}))}},{text:e.translate("Cancel"),click:function(){r(this).dialog("close")}}],open:function(){r(this).parent().css("box-shadow","20px 20px 20px 0px black"),r(this).parent().find(".ui-dialog-buttonset").css({width:"100%","text-align":"right"}),r(this).parent().find('button:contains("'+e.translate("Save")+'")').css({float:"left"}),r("#edsub_name").val(t.name||"").focus(),r("#edsub_roles").val(t.roles?t.roles.join(", "):""),r("#edsub_notes").val(t.notes||"")}})}function l(t,e,n){var i=r('<img title="'+n.translate("Edit this subject")+'" style="cursor:pointer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABEUlEQVQ4jZ3MMUsCYQDG8ee8IySQbNCLyyEKG/RLNAXicqvQcAeNLrcFLlE0+xHuNpt8wy04rrYm8Q4HQRE56BSC3lSqU1BwCoxM39dnffj9BWyxXvVeEzvtctBwHyRebNu2Nk2lzMlrgJB+qBEeTByiKYpihl+fIO8jTI9PDJEVF1+K2iw+M6PhDuyag4NkQi/c3FkCK5Z3ZbM76qLltpCbn+vXxq0FABsDy9hzPdBvqvtXvvXzrw1swmsDLPjfACteGeDBfwK8+FdgGwwAIgC0ncsjxGRSH/eiPBgAJADY2z8sJ4JBfNBsDqlADVYMANIzKalv/bHaefKsTH9iPFb8ISsGAJym0+Qinz3jQktbAHcxvx3559eSAAAAAElFTkSuQmCC">');i.click((function(){u(t,n)}));var a=r('<img title="'+n.translate("Delete this subject")+'" style="cursor:pointer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACrElEQVQ4T42Ty2sTQRzHv5tmk2yyjRNtpfZhL8V6s2KoUNC2XqwgaCsVQcGiFqpHi0c9iRdR/ANE9KR40FIQX4cueKoPaKFoLdSYNtE0abKT1+5s9iW7aUMiHtzTzO7v85md+c6PA4DrHbsPCKIgOWO1pA7dT6YXnXH949SE/F63pqwZtRrO+SCKgjQ5NUV+azpmHj2krMwaJC4c8Erj+/eRyloMMwWFKgbn1nC3ervlK1evkXBLGBZT8SOewotnTylTNLdgeg/pDgZDC2cPHSR8bB22DVC9hFe0SG/H0xFXcHlykjRHRDBWgJcZSCY38Xx2lhqMnRYE34Px/sN9vlQWeoHBAx2yXsRruVAVuFsIBaSJ8+eJGPaBqQV4NROJjTzez89jLBoFn6FgybQL54wS3uTyVDFQ3cL2IYpBv3RhdJSIIQ80tQyv7gEqJvS8AmUlBs7UXPhtjtZgh3UFNYngk86NHCfNAg9dMwHVBPu+CpsVkTXKeJeVG+AGgTOZ3tt6MSKKjy+NjEBjFrR4ElZmA4pdxstMFsyyJu6tZZ7Ux9vwB6EAL50ZGiRECEPPUOixVTRxHlicgSVWxEdZpuZWfNuS2hk48NjwMIkIYZglBnV5Cbqtws/5IaAJmsfCglrEl2y2QeKmEBJ80tixKmxrFpSVr0gV0viQoxho2YUuPohmeFD22PiklLC4ma5JuBvdrfLJI0dJd0s7bM0ES8aR/BXDXGaTskqlL+D3Lwy0tZEePoAd4EA5YF4tYymdonfjmQh3s6dTPjU4SHYGwjAKecSXFyGlM1TdytntE56T+ts7SC/vhw3gm6njc2Kd3vm5Ub1IwQAvnYhGiZpYw1wiWYPrIw7wnBTt7CLOOwdmut14kQQvqt24tfK/utGR6LaF+iRqMf4N/O/8D28HiiCRYqzAAAAAAElFTkSuQmCC">');a.click((function(){window.confirm(n.translate("Are you sure you want to delete: ")+t.name)&&function(t,e,n){r.ajax({method:"DELETE",url:"/api/v2/authorization/subjects/"+t._id,headers:e.headers()}).done((function(){s(e,n)})).fail((function(t){console.error("Unable to delete Subject",t.responseText),window.alert(e.translate("Unable to delete Subject"))}))}(t,n)})),e.append(r("<tr>").css("background-color","#0f0f0f").append(r("<td>").attr("width","20%").append(i).append(a).append(t.name)).append(r("<td>").attr("width","20%").append(t.roles?t.roles.join(", "):"[none]")).append(r("<td>").attr("width","20%").append('<a href="/?token='+t.accessToken+'" target="_blank">'+t.accessToken+"</a>")).append(r("<td>").attr("width","10%").append(t.notes?t.notes:"")))}a.actions=[{description:"Each subject will have a unique access token and 1 or more roles. Click on the access token to open a new view with the selected subject, this secret link can then be shared.",buttonLabel:"Add new Subject",init:function(t,e){(o=r("#admin_"+a.name+"_0_status")).hide().text(t.translate("Loading database ...")).fadeIn("slow");var n=r('<table id="admin_subjects_table">').css("margin-top","10px");r("#admin_"+a.name+"_0_html").append(n).append(function(t){var e='<div id="editsubjectdialog" style="display:none" title="'+t.translate("Edit Subject")+'"> <label for="edsub_name">'+t.translate("Name")+' <input id="edsub_name" placeholder="'+t.translate("person, device, etc")+'"/> </label> <br> <label for="edsub_roles">'+t.translate("Roles")+' <input id="edsub_roles" placeholder="'+t.translate("role1, role2")+'"/> </label> <br> <label for="edsub_notes">'+t.translate("Additional Notes, Comments")+'</label> <textarea id="edsub_notes" style="width:300px"></textarea><br> </div>';return r(e)}(t)),s(t,e)},preventClose:!0,code:function(t,e){u({},t)}}]},71898:function(t,e,n){"use strict";var r=n(57245);t.exports=function(t){var e,n=0,i=new Date,a=1e3*t.heartbeat,o=new r;function s(){o.emit("tick",{now:new Date,type:"heartbeat",sig:"internal://"+["heartbeat",n].join("/"),beat:n++,interval:a,started:i})}return o.teardown=function(){console.log("Initiating server teardown"),clearInterval(e),o.emit("teardown")},o.readable=!0,o.uptime=s,e=setInterval(s,a),o}},20634:function(t){"use strict";t.exports=function(t,e){var n={};function r(e,n,r,i,a){var o="<hr><p><b>"+e+'</b></p><p class="adminNotifyMessage">'+n+"</p>",s="";r>1&&(s+=t.translate("Event repeated %1 times.",r)+" ");var u=t.translate("minutes");return i>60&&(i/=60,i=Math.round(10*(i+Number.EPSILON))/10,u=t.translate("hours")),0==i&&(i=t.translate("less than 1")),!a&&i&&(s+=t.translate("Last recorded %1 %2 ago.",i,u)),s&&(o+='<p class="adminNotifyMessageAdditionalInfo">'+s+"</p>"),o}return t.notifies=n,n.notifies=[],n.drawer=e("#adminNotifiesDrawer"),n.button=e("#adminnotifies"),n.updateAdminNotifies=function(){var r="/api/v1/adminnotifies?t="+(new Date).getTime();e.ajax({method:"GET",url:r,headers:t.headers()}).done((function(e){if(e.message){var r=e.message;t.notifies.notifies=r.notifies,t.notifies.notifyCount=r.notifyCount,r.notifyCount>0&&n.button.show()}window.setTimeout(n.updateAdminNotifies,6e4)})).fail((function(){console.error("Failed to load notifies"),window.setTimeout(n.updateAdminNotifies,6e4)}))},n.updateAdminNotifies(),n.prepare=function(){var e=t.translate,i='<div id="adminNotifyContent">',a=t.notifies.notifies,o=t.notifies.notifyCount;if(a&&a.length>0){i+="<p><b>"+e("You have administration messages")+"</b></p>";for(var s=0;s<a.length;s++){var u=a[s],l=Math.round((Date.now()-u.lastRecorded)/6e4);i+=r(e(u.title),e(u.message),u.count,l,u.persistent)}}else i=o>0?r(e("Admin messages in queue"),e("Please sign in using the API_SECRET to see your administration messages")):r(e("Queue empty"),e("There are no admin messages in queue"));i+="<hr></div>",n.drawer.html(i)},n.toggleDrawer=function(e){t.browserUtils.toggleDrawer("#adminNotifiesDrawer",n.prepare),function(t){t&&t.preventDefault()}(e)},n.button.click(n.toggleDrawer),n.button.css("color","red"),n}},52929:function(t,e,n){"use strict";var r=n(52077),i=n(95653),a=n(90970),o=n(83358);t.exports=function(t,e){var n={},s=t.translate,u=o.localStorage,l=t.plugins("iob"),c=t.plugins("cob"),d=e("#bc_eventTimeValue"),f=e("#bc_eventDateValue"),h=[],p=[];function m(t,e){return t?Math.round(t/e)*e:0}function g(t){t&&t.preventDefault()}function b(t){t=t||i(),d.val(t.format("HH:mm")),f.val(t.format("YYYY-MM-DD"))}function y(){return t.utils.mergeInputTime(d.val(),f.val())}function _(t,e){t.attr("oldminutes",e.minutes()),t.attr("oldhours",e.hours())}function v(r,i){var a=0;n.oldbg=!1,r&&(a=(a=r.mgdl)<39?0:t.utils.scaleMgdl(a),i.getTime()-r.mills>6e5&&(n.oldbg=!0,a=0)),e("#bc_bgfromsensor").is(":checked")&&e("#bc_bg").val(a||"")}function w(t){var r=e(this).attr("index");return p.splice(r,1),e("#bc_carbs").val(""),n.calculateInsulin(),g(t),!1}function M(t){var i=e("#bc_quickpick").val();if(null===i||"-1"===i)e("#bc_carbs").val(0),p=[],e("#bc_addfoodarea").css("display","");else{var a=h[parseInt(i)];p=r.cloneDeep(a.foods),e("#bc_addfoodarea").css("display","none")}n.calculateInsulin(),g(t)}function x(){var r=e("#bc_quickpick").val();if(r>=0){var i=h[parseInt(r)];i.hideafteruse&&(i.hidden=!0,e.ajax({method:"PUT",url:"/api/v1/food/",headers:t.headers(),data:i}).done((function(t){console.info("quick pick saved",t)})).fail((function(t){console.info("quick pick failed to save",t)})))}n.calculateInsulin(),g(event)}n.updateVisualisations=function(r){v(r.lastSGVEntry(),y().toDate()),"#boluscalcDrawer"===t.browserUtils.getLastOpenedDrawer&&e("#bc_nowtime").is(":checked")&&(b(),n.calculateInsulin())},n.dateTimeFocus=function(t){e("#bc_othertime").prop("checked",!0),_(e(this),y()),g(t)},n.dateTimeChange=function(i){e("#bc_othertime").prop("checked",!0);var o,s,u,l=e(this),c=y();"59"===l.attr("oldminutes")&&0===c.minutes()&&c.add(1,"hours"),"0"===l.attr("oldminutes")&&59===c.minutes()&&c.add(-1,"hours"),b(c),_(l,c),n.eventTimeTypeChange(),v((o=c.toDate(),s=t.entries.filter((function(t){return"sgv"===t.type&&t.mills<=o.getTime()})),!(u=r.last(s))||u.mills+a.mins(10).mills<o.getTime()?null:u),c.toDate()),n.calculateInsulin(),g(i)},n.eventTimeTypeChange=function(r){e("#bc_othertime").is(":checked")?(e("#bc_eventTimeValue").focus(),e("#bc_retro").css("display",""),y()<i()?e("#bc_retro").css("background-color","red").text(s("RETRO MODE")):y()>i()?e("#bc_retro").css("background-color","blue").text(s("IN THE FUTURE")):e("#bc_retro").css("display","none")):(e("#bc_retro").css("display","none"),b(),n.updateVisualisations(t.sbx),r&&n.calculateInsulin()),g(r)},n.toggleDrawer=function(e){n.prepare(),t.browserUtils.toggleDrawer("#boluscalcDrawer"),g(e)},n.prepare=function(){p=[],e("#bc_profile").empty();var r=t.profilefunctions.listBasalProfiles();r.forEach((function(t){e("#bc_profile").append('<option val="'+t+'">'+t+"</option>")})),e("#bc_profileLabel").toggle(function(e){return t.settings.enable.indexOf("profile")>-1&&t.settings.extendedSettings.profile&&t.settings.extendedSettings.profile.multiple&&e.length>1}(r)),e("#bc_usebg").prop("checked","checked"),e("#bc_usecarbs").prop("checked","checked"),e("#bc_usecob").prop("checked",""),e("#bc_useiob").prop("checked","checked"),e("#bc_bgfromsensor").prop("checked","checked"),e("#bc_carbs").val(""),e("#bc_quickpick").val(-1),e("#bc_preBolus").val(0),e("#bc_notes").val(""),e("#bc_enteredBy").val(o.localStorage.get("enteredBy")||""),e("#bc_nowtime").prop("checked",!0),e("#bc_othercorrection").val(0),e("#bc_profile").val(t.profilefunctions.activeProfileToTime()),b(),n.eventTimeTypeChange(),n.updateVisualisations(t.sbx),n.calculateInsulin()},n.calculateInsulin=function(t){return g(t),n.gatherBoluscalcData(),n.updateGui(n.record),n.record},n.updateGui=function(r){if(void 0!==(r=r||n.record).eventTime){var i=r.targetBGLow,a=r.targetBGHigh,o=r.isf,u=r.ic;if(e("#bc_insulintotal").text("0.00"),e("#bc_carbsneeded").text("0.00"),e("#bc_inzulinbg").text("0.00"),e("#bc_inzulincarbs").text("0.00"),e("#bc_useiob").is(":checked")?e("#bc_iob").text((r.iob>0?"-":"")+r.iob.toFixed(2)):e("#bc_iob").text(""),e("#bc_usecob").is(":checked")?(e("#bc_cob").text(r.cob.toFixed(2)),e("#bc_cobu").text(r.insulincob.toFixed(2))):(e("#bc_cob").text(""),e("#bc_cobu").text("")),e("#bc_usebg").is(":checked")?(0===r.bg||n.oldbg&&e("#bc_bgfromsensor").is(":checked")?e("#bc_bg").css("background-color","red"):e("#bc_bg").css("background-color",""),e("#bc_inzulinbg").text(r.insulinbg.toFixed(2)),e("#bc_inzulinbg").attr("title","Target BG range: "+i+" - "+a+"\nISF: "+o+"\nBG diff: "+r.bgdiff.toFixed(1))):(e("#bc_inzulinbgtd").css("background-color",""),e("#bc_bg").css("background-color",""),e("#bc_inzulinbg").text(""),e("#bc_inzulinbg").attr("title","")),r.foods.length){for(var l='<table style="float:right;margin-right:20px;font-size:12px">',c=0,d=0;d<r.foods.length;d++){var f=r.foods[d];c+=f.carbs*f.portions,l+="<tr>",l+="<td>",e("#bc_quickpick").val()<0&&(l+='<img style="cursor:pointer" title="Delete record" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACrElEQVQ4T42Ty2sTQRzHv5tmk2yyjRNtpfZhL8V6s2KoUNC2XqwgaCsVQcGiFqpHi0c9iRdR/ANE9KR40FIQX4cueKoPaKFoLdSYNtE0abKT1+5s9iW7aUMiHtzTzO7v85md+c6PA4DrHbsPCKIgOWO1pA7dT6YXnXH949SE/F63pqwZtRrO+SCKgjQ5NUV+azpmHj2krMwaJC4c8Erj+/eRyloMMwWFKgbn1nC3ervlK1evkXBLGBZT8SOewotnTylTNLdgeg/pDgZDC2cPHSR8bB22DVC9hFe0SG/H0xFXcHlykjRHRDBWgJcZSCY38Xx2lhqMnRYE34Px/sN9vlQWeoHBAx2yXsRruVAVuFsIBaSJ8+eJGPaBqQV4NROJjTzez89jLBoFn6FgybQL54wS3uTyVDFQ3cL2IYpBv3RhdJSIIQ80tQyv7gEqJvS8AmUlBs7UXPhtjtZgh3UFNYngk86NHCfNAg9dMwHVBPu+CpsVkTXKeJeVG+AGgTOZ3tt6MSKKjy+NjEBjFrR4ElZmA4pdxstMFsyyJu6tZZ7Ux9vwB6EAL50ZGiRECEPPUOixVTRxHlicgSVWxEdZpuZWfNuS2hk48NjwMIkIYZglBnV5Cbqtws/5IaAJmsfCglrEl2y2QeKmEBJ80tixKmxrFpSVr0gV0viQoxho2YUuPohmeFD22PiklLC4ma5JuBvdrfLJI0dJd0s7bM0ES8aR/BXDXGaTskqlL+D3Lwy0tZEePoAd4EA5YF4tYymdonfjmQh3s6dTPjU4SHYGwjAKecSXFyGlM1TdytntE56T+ts7SC/vhw3gm6njc2Kd3vm5Ub1IwQAvnYhGiZpYw1wiWYPrIw7wnBTt7CLOOwdmut14kQQvqt24tfK/utGR6LaF+iRqMf4N/O/8D28HiiCRYqzAAAAAAElFTkSuQmCC" href="#" class="deleteFoodRecord" index="'+d+'">'),l+="</td>",l+="<td>"+f.name+"</td>",l+="<td>"+(f.portion*f.portions).toFixed(1)+" "+s(f.unit)+"</td>",l+="<td>("+(f.carbs*f.portions).toFixed(1)+" g)</td>",l+="</tr>"}l+="</table>",e("#bc_food").html(l),e(".deleteFoodRecord").click(w),e("#bc_carbs").val(c.toFixed(0)),e("#bc_carbs").attr("disabled",!0),e("#bc_gi").css("display","none"),e("#bc_gicalculated").css("display",""),e("#bc_gicalculated").text(r.gi)}else e("#bc_food").html(""),e("#bc_carbs").attr("disabled",!1),e("#bc_gi").css("display",""),e("#bc_gicalculated").css("display","none"),e("#bc_gicalculated").text("");e("#bc_usecarbs").is(":checked")?(""===e("#bc_carbs").val()?e("#bc_carbs").css("background-color",""):isNaN(parseInt(e("#bc_carbs").val().replace(",",".")))?e("#bc_carbs").css("background-color","red"):e("#bc_carbs").css("background-color",""),e("#bc_inzulincarbs").text(r.insulincarbs.toFixed(2)),e("#bc_inzulincarbs").attr("title","IC: "+u)):(e("#bc_carbs").css("background-color",""),e("#bc_inzulincarbs").text(""),e("#bc_inzulincarbs").attr("title",""),e("#bc_carbs").text("")),e("#bc_rouding").text(r.roundingcorrection.toFixed(2)),e("#bc_insulintotal").text(r.insulin.toFixed(2));var h=r.bg-r.iob*o;0===r.othercorrection&&0===r.carbs&&0===r.cob&&r.bg>0&&h>i&&h<a?(e("#bc_carbsneeded").text(""),e("#bc_insulinover").text(""),e("#bc_carbsneededtr").css("display","none"),e("#bc_insulinneededtr").css("display","none"),e("#bc_calculationintarget").css("display","")):r.insulin<0?(e("#bc_carbsneeded").text(r.carbsneeded+" g"),e("#bc_insulinover").text(r.insulin.toFixed(2)),e("#bc_carbsneededtr").css("display",""),e("#bc_insulinneededtr").css("display","none"),e("#bc_calculationintarget").css("display","none")):(e("#bc_carbsneeded").text(""),e("#bc_insulinover").text(""),e("#bc_carbsneededtr").css("display","none"),e("#bc_insulinneededtr").css("display",""),e("#bc_calculationintarget").css("display","none"));var p=t.sbx.data.profile.getTempBasal(r.eventTime),m="";m+=p.treatment?"T":"",m+=p.combobolustreatment?"C":"",m+=m?": ":"",e("#bc_basal").text(m+p.totalbasal.toFixed(3))}},n.gatherBoluscalcData=function(){n.record={};var i=n.record;if(t.sbx){if(i.profile=e("#bc_profile").val(),!i.profile)return delete i.profile,void console.log("No profile data. Exiting gatherBoluscalcData()");i.eventTime=new Date,e("#bc_othertime").is(":checked")&&(i.eventTime=y().toDate());var a=t.sbx.data.profile.getLowBGTarget(i.eventTime,i.profile);a=a||0;var o=t.sbx.data.profile.getHighBGTarget(i.eventTime,i.profile);o=o||0;var s=t.sbx.data.profile.getSensitivity(i.eventTime,i.profile);s=s||0;var u=t.sbx.data.profile.getCarbRatio(i.eventTime,i.profile);if(u=u||0,i.targetBGLow=a,i.targetBGHigh=o,i.isf=s,i.ic=u,0===a||0===o||0===s||0===u)return e("#bc_inzulinbgtd").css("background-color","red"),void(n.record={});if(e("#bc_inzulinbgtd").css("background-color",""),0===u)return e("#bc_inzulincarbstd").css("background-color","red"),void(n.record={});if(e("#bc_inzulincarbstd").css("background-color",""),i.iob=0,e("#bc_useiob").is(":checked")&&(i.iob=m(l.calcTotal(t.sbx.data.treatments,t.sbx.data.devicestatus,t.sbx.data.profile,i.eventTime,i.profile).iob,.01)),i.cob=0,i.insulincob=0,e("#bc_usecob").is(":checked")&&(i.cob=m(c.cobTotal(t.sbx.data.treatments,t.sbx.data.devicestatus,t.sbx.data.profile,i.eventTime,i.profile).cob,.01),i.insulincob=m(i.cob/u,.01)),i.bg=0,i.insulinbg=0,i.bgdiff=0,e("#bc_usebg").is(":checked")&&(i.bg=parseFloat(e("#bc_bg").val().replace(",",".")),isNaN(i.bg)&&(i.bg=0),i.bg<=a?i.bgdiff=i.bg-a:i.bg>=o&&(i.bgdiff=i.bg-o),i.bgdiff=m(i.bgdiff,.1),0!==i.bg&&(i.insulinbg=m(i.bgdiff/s,.01))),i.carbs=0,i.foods=r.cloneDeep(p),i.foods.length){for(var d=0,f=0;f<i.foods.length;f++){var h=i.foods[f];i.carbs+=h.carbs*h.portions,d+=h.carbs*h.portions*h.gi}i.gi=(d/i.carbs).toFixed(2)}else i.gi=e("#bc_gi").val();i.insulincarbs=0,e("#bc_usecarbs").is(":checked")&&(0===i.carbs&&(i.carbs=parseInt(e("#bc_carbs").val().replace(",","."))),isNaN(i.carbs)&&(i.carbs=0),i.insulincarbs=m(i.carbs/u,.01)),i.othercorrection=parseFloat(e("#bc_othercorrection").val());var g=0;return e("#bc_useinsulin").is(":checked")&&(g=i.insulinbg+i.insulincarbs+i.insulincob-i.iob+i.othercorrection),i.insulin=m(g,.05),i.roundingcorrection=i.insulin-g,i.carbsneeded=0,i.insulin<0&&(i.carbsneeded=Math.ceil(-g*u)),console.log("Insulin calculation result: ",i),i}console.log("No sandbox data yet. Exiting gatherBoluscalcData()")},n.submit=function(r){var i=function(){var r={};return r.boluscalc=n.calculateInsulin(),r.boluscalc?(r.enteredBy=e("#bc_enteredBy").val(),r.eventType="Bolus Wizard",0!==e("#bc_bg").val()&&(r.glucose=e("#bc_bg").val().replace(",","."),r.glucoseType=e("#boluscalc-form").find("input[name=bc_bginput]:checked").val(),r.units=t.settings.units),r.carbs=e("#bc_carbs").val().replace(",","."),r.insulin=e("#bc_insulintotal").text(),r.insulin<=0&&delete r.insulin,r.preBolus=parseInt(e("#bc_preBolus").val()),r.notes=e("#bc_notes").val(),e("#bc_othertime").is(":checked")&&(r.eventTime=y().toDate()),r.boluscalc.eventTime=r.boluscalc.eventTime.toISOString(),r):(alert("Calculation not completed!"),null)}();return i&&function(n){window.confirm(function(t){var e=[s("Please verify that the data entered is correct")+": ",s("Event Type")+": "+s(t.eventType)];function n(t,n){t&&e.push(n)}return n(t.glucose,s("Blood Glucose")+": "+t.glucose),n(t.glucose,s("Measurement Method")+": "+s(t.glucoseType)),n(t.carbs,s("Carbs Given")+": "+t.carbs),n(t.insulin,s("Insulin Given")+": "+t.insulin),n(t.boluscalc.othercorrection,s("Other correction")+": "+t.boluscalc.othercorrection),n(t.preBolus,s("Carb Time")+": "+t.preBolus+" "+s("mins")),n(t.notes,s("Notes")+": "+t.notes),n(t.enteredBy,s("Entered By")+": "+t.enteredBy),e.push(s("Event Time")+": "+(t.eventTime?t.eventTime.toLocaleString():(new Date).toLocaleString())),e.join("\n")}(n))&&(e.ajax({method:"POST",url:"/api/v1/treatments/",headers:t.headers(),data:n}).done((function(t){console.info("treatment saved",t)})).fail((function(t){console.info("treatment saved",t),alert(s("Entering record failed")+". "+s("Status")+": "+t.status)})),u.set("enteredBy",n.enteredBy),x(),t.browserUtils.closeDrawer("#boluscalcDrawer"))}(i),g(r),!1};var A=[],S=[],k=!1,T={category:"",subcategory:"",name:""};function L(t){g(t),T.category=e("#bc_filter_category").val(),T.subcategory="",e("#bc_filter_subcategory").empty().append('<option value="">'+s("(none)")+"</option>"),""!==T.category&&Object.keys(A[T.category]).forEach((function(t){e("#bc_filter_subcategory").append('<option value="'+t+'">'+t+"</option>")})),D()}function D(t){t&&(T.category=e("#bc_filter_category").val(),T.subcategory=e("#bc_filter_subcategory").val(),T.name=e("#bc_filter_name").val()),e("#bc_data").empty();for(var n=0;n<S.length;n++)if((""===T.category||S[n].category===T.category)&&!(""!==T.subcategory&&S[n].subcategory!==T.subcategory||""!==T.name&&S[n].name.toLowerCase().indexOf(T.name.toLowerCase())<0)){var r="";r+=S[n].name+" | ",r+="Portion: "+S[n].portion+" ",r+=S[n].unit+" | ",r+="Carbs: "+S[n].carbs+" g",e("#bc_data").append('<option value="'+n+'">'+r+"</option>")}e("#bc_addportions").val("1"),g(t)}return n.loadFoodDatabase=function(n,r){A=[],S=[],(t.sbx.data.food||[]).forEach((function(t){"food"==t.type&&(S.push(t),t.category&&!A[t.category]&&(A[t.category]={}),t.category&&t.subcategory&&(A[t.category][t.subcategory]=!0))})),k=!0,console.log("Food database loaded"),e("#bc_filter_category").empty().append('<option value="">'+s("(none)")+"</option>"),Object.keys(A).forEach((function(t){e("#bc_filter_category").append('<option value="'+t+'">'+t+"</option>")})),T.category="",L(),e("#bc_filter_category").change(L),e("#bc_filter_subcategory").change(D),e("#bc_filter_name").on("input",D),g(void 0),g(n),r&&r()},n.loadFoodQuickpicks=function(){h=[];var n=t.sbx.data.food||[];n.forEach((function(t){"quickpick"==t.type&&h.push(t)})),e("#bc_quickpick").empty().append('<option value="-1">'+s("(none)")+"</option>");for(var r=0;r<n.length;r++){var i=n[r];e("#bc_quickpick").append('<option value="'+r+'">'+i.name+" ("+i.carbs+" g)</option>")}e("#bc_quickpick").val(-1),e("#bc_quickpick").change(M)},function(){try{return document.createEvent("TouchEvent"),!0}catch(t){return!1}}()?e(".insulincalculationpart").change(n.calculateInsulin):(e(".insulincalculationpart").on("input",n.calculateInsulin),e("input:checkbox.insulincalculationpart").change(n.calculateInsulin)),e("#bc_bgfrommeter").change(n.calculateInsulin),e("#bc_addfromdatabase").click((function t(i){if(k)return e("#bc_addportions").val("1"),e("#bc_addfooddialog").dialog({width:640,height:400,buttons:[{text:s("Add"),click:function(){var t=e("#bc_data").val(),i=parseFloat(e("#bc_addportions").val().replace(",","."));null!==t&&!isNaN(i)&&i>0&&(t=parseInt(t),S[t].portions=i,p.push(r.cloneDeep(S[t])),e(this).dialog("close"),n.calculateInsulin())}},{text:s("Reload database"),class:"leftButton",click:n.loadFoodDatabase}],open:function(){e(this).parent().css("box-shadow","20px 20px 20px 0px black"),e(this).parent().find(".ui-dialog-buttonset").css({width:"100%","text-align":"right"}),e(this).parent().find('button:contains("'+s("Add")+'")').css({float:"left"}),e("#bc_filter_name").focus()}}),g(i),!1;n.loadFoodDatabase(i,t)})),e("#bc_bgfromsensor").change((function(e){n.updateVisualisations(t.sbx),n.calculateInsulin(),g(e)})),e("#boluscalcDrawerToggle").click(n.toggleDrawer),e("#boluscalcDrawer").find("button").click(n.submit),e("#bc_eventTime input:radio").change(n.eventTimeTypeChange),e(".bc_eventtimeinput").focus(n.dateTimeFocus).change(n.dateTimeChange),n.loadFoodQuickpicks(),b(),n}},18245:function(t,e,n){"use strict";var r=n(52077),i=n(83358);t.exports=function t(e,a,o){a=a||{settings:{}};var s=i.localStorage,u=n(41487)();u.extendedSettings=a.extendedSettings||{settings:{}};try{u.eachSetting((function(t){var e=s.get(t);return null!=e?e:a.settings[t]})),a.settings.thresholds&&(u.thresholds=a.settings.thresholds),a.settings.enable&&(u.enable=a.settings.enable),u.enable.indexOf("ar2")<0&&(u.enable+=" ar2"),function(){var t=parseInt(s.get("storageVersion"));if(isNaN(t)&&u.isEnabled("careportal")){var e=s.get("showPlugins");e&&-1===e.indexOf("careportal")&&(u.showPlugins+=" careportal")}}(),u.extendedSettings.basal||(u.extendedSettings.basal={});var l=s.get("basalrender");u.extendedSettings.basal.render=null!==l?l:u.extendedSettings.basal.render,u.extendedSettings.bolus||(u.extendedSettings.bolus={renderOver:0,renderFormat:"default",renderFormatSmall:"default"});var c=s.get("bolus");u.extendedSettings.bolus.renderOver=null!==c?r.toNumber(c.renderOver):u.extendedSettings.bolus.renderOver,u.extendedSettings.bolus.renderFormat=null!==c?c.renderFormat:u.extendedSettings.bolus.renderFormat,u.extendedSettings.bolus.renderFormatSmall=null!==c?c.renderFormatSmall:u.extendedSettings.bolus.renderFormatSmall}catch(t){console.error(t),o(".browserSettings").html("<legend>Settings</legend><b>Settings are disabled.</b><br /><br />Please enable cookies so you may customize your Nightscout site."),o("#save").hide()}return t.loadAndWireForm=function(){(function(){var t=e.utils,n=e.language,i=n.translate;function a(e){return-1===u.alarmTypes.indexOf("simple")?"":" ("+t.scaleMgdl(e)+")"}"mmol"===u.units?o("#mmol-browser").prop("checked",!0):o("#mgdl-browser").prop("checked",!0),o("#alarm-urgenthigh-browser").prop("checked",u.alarmUrgentHigh).next().text(i("Urgent High Alarm")+a(u.thresholds.bgHigh)),o("#alarm-high-browser").prop("checked",u.alarmHigh).next().text(i("High Alarm")+a(u.thresholds.bgTargetTop)),o("#alarm-low-browser").prop("checked",u.alarmLow).next().text(i("Low Alarm")+a(u.thresholds.bgTargetBottom)),o("#alarm-urgentlow-browser").prop("checked",u.alarmUrgentLow).next().text(i("Urgent Low Alarm")+a(u.thresholds.bgLow)),o("#alarm-timeagowarn-browser").prop("checked",u.alarmTimeagoWarn),o("#alarm-timeagowarnmins-browser").val(u.alarmTimeagoWarnMins),o("#alarm-timeagourgent-browser").prop("checked",u.alarmTimeagoUrgent),o("#alarm-timeagourgentmins-browser").val(u.alarmTimeagoUrgentMins),o("#alarm-pumpbatterylow-browser").prop("checked",u.alarmPumpBatteryLow),o("#nightmode-browser").prop("checked",u.nightMode),o("#editmode-browser").prop("checked",u.editMode),u.isEnabled("rawbg")?(o("#show-rawbg-option").show(),o("#show-rawbg-"+u.showRawbg).prop("checked",!0)):o("#show-rawbg-option").hide(),o("h1.customTitle").text(u.customTitle),o("input#customTitle").prop("value",u.customTitle),"colors"===u.theme?o("#theme-colors-browser").prop("checked",!0):"colorblindfriendly"===u.theme?o("#theme-colorblindfriendly-browser").prop("checked",!0):o("#theme-default-browser").prop("checked",!0);var l=o("#language");r.each(n.languages,(function(t){l.append('<option value="'+t.code+'">'+t.language+"</option>")})),l.val(u.language),o("#scaleY").val(u.scaleY),o("#basalrender").val(u.extendedSettings.basal?u.extendedSettings.basal.render:"none"),function(){var t=e.settings.extendedSettings.bolus||{},n=[5,1,.5,.1];r.isNumber(t.renderOver)&&t.renderOver>0&&t.renderOver<Number.MAX_SAFE_INTEGER&&n.push(r.toNumber(t.renderOver));var i=r.chain(n).uniq().sort().reverse().value();r.forEach(i,(function(t){o("#bolusRenderOver").append(o("<option></option>").attr("value",t).text(e.translate("%1 U and Over",{params:[t]})))})),o("#bolusRenderOver").val(String(t.renderOver||.5)),o("#bolusRenderFormat").val(t.renderFormat?t.renderFormat:"default"),o("#bolusRenderFormatSmall").val(t.renderFormatSmall?t.renderFormatSmall:"default")}(),24===u.timeFormat?o("#24-browser").prop("checked",!0):o("#12-browser").prop("checked",!0);var c=o("#show-plugins"),d=!1,f=[];e.plugins.eachEnabledPlugin((function(t){if(e.plugins.specialPlugins.indexOf(t.name)>-1);else{var n="plugin-"+t.name,r=o('<dd><input type="checkbox" id="'+n+'" value="'+t.name+'"/><label for="'+n+'">'+i(t.label||t.name)+"</label></dd>");c.append(r),r.find("input").prop("checked",u.showPlugins.indexOf(t.name)>-1),d=!0}if(t.getClientPrefs){var a=t.getClientPrefs();f.push({plugin:t,prefs:a})}})),c.toggle(d);var h=o("#browserSettings"),p=[];f.length>0&&f.forEach((function(t){if(u.showPlugins.indexOf(t.plugin.name)>-1){var e=t.plugin.label,n=o("<dl>");n.append("<dt>"+i(e)+"</dt>"),t.prefs.forEach((function(e){var r=t.plugin.name+"-"+e.id,a=e.label;if("boolean"==e.type){var u=o('<dd><input type="checkbox" id="'.concat(r,'" value="true" /><label for="').concat(r,'r">')+i(a)+"</label></dd>");n.append(u),1==s.get(r)&&p.push(r)}})),h.append(n)}})),p.forEach((function(t){o("#"+t).prop("checked",!0)})),o("#editprofilelink").toggle(u.isEnabled("iob")||u.isEnabled("cob")||u.isEnabled("bwp")||u.isEnabled("basal"));var m=(location.search||"?").substring(1).split("&"),g="";m.forEach((function(t){t.startsWith("token=")&&(g=t.substring("token=".length))})),""!=g&&(g="?token="+g,o("#reportlink").attr("href","report"+g),o("#editprofilelink").attr("href","profile"+g),o("#admintoolslink").attr("href","admin"+g),o("#editfoodlink").attr("href","food"+g))})(),o("#useDefaults").click((function(t){u.eachSetting((function(t){s.remove(t)})),s.remove("basalrender"),s.remove("bolus"),t.preventDefault(),e.browserUtils.reload()})),o("#save").click((function(t){var n,r;e.plugins.eachEnabledPlugin((function(t){t.getClientPrefs&&t.getClientPrefs().forEach((function(e){var n=t.name+"-"+e.id;if("boolean"==e.type){var r=o("#"+n).prop("checked");s.set(n,r)}}))})),n={units:o("input:radio[name=units-browser]:checked").val(),alarmUrgentHigh:o("#alarm-urgenthigh-browser").prop("checked"),alarmHigh:o("#alarm-high-browser").prop("checked"),alarmLow:o("#alarm-low-browser").prop("checked"),alarmUrgentLow:o("#alarm-urgentlow-browser").prop("checked"),alarmTimeagoWarn:o("#alarm-timeagowarn-browser").prop("checked"),alarmTimeagoWarnMins:parseInt(o("#alarm-timeagowarnmins-browser").val())||15,alarmTimeagoUrgent:o("#alarm-timeagourgent-browser").prop("checked"),alarmTimeagoUrgentMins:parseInt(o("#alarm-timeagourgentmins-browser").val())||30,nightMode:o("#nightmode-browser").prop("checked"),editMode:o("#editmode-browser").prop("checked"),showRawbg:o("input:radio[name=show-rawbg]:checked").val(),customTitle:o("input#customTitle").prop("value"),theme:o("input:radio[name=theme-browser]:checked").val(),timeFormat:parseInt(o("input:radio[name=timeformat-browser]:checked").val()),language:o("#language").val(),scaleY:o("#scaleY").val(),basalrender:o("#basalrender").val(),bolus:{renderOver:o("#bolusRenderOver").val(),renderFormat:o("#bolusRenderFormat").val(),renderFormatSmall:o("#bolusRenderFormatSmall").val()},showPlugins:(r=[],o("#show-plugins input:checked").each((function(t,e){r.push(o(e).val())})),r.join(" ")),storageVersion:1},Object.keys(n).forEach((function(t){s.set(t,n[t])})),t.preventDefault(),e.browserUtils.reload()}))},t.loadPluginSettings=function(t){t.plugins.eachEnabledPlugin((function(t){if(t.getClientPrefs){var e=t.getClientPrefs();u.extendedSettings[t.name]||(u.extendedSettings[t.name]={});var n=u.extendedSettings[t.name];e.forEach((function(e){var r=t.name+"-"+e.id,i=s.get(r);null!==i&&(n[e.id]=i)}))}}))},u}},13808:function(t){"use strict";t.exports=function(t){var e=null;function n(n,r){e=null,t("html, body").css({scrollTop:0}),t(n).css({display:"none",right:"-300px"}),r&&r()}function r(r,i,a){e===r?n(r,a):function(r,i){var a;a=function(){e=r,i&&i();var n={display:"block",right:"0"},a=t(window).width(),o=t(window).height();a<500||o<500&&a<800?(n.top="0px",n.height=o+"px",n.width=a+"px"):(n.top="0px",n.height=o-45+"px",n.width="350px"),t(r).css(n)},e?n(e,a):a()}(r,i)}function i(){var e=t("#notification");e.hide(),e.find("span").html("")}return function(){try{return document.createEvent("TouchEvent"),!0}catch(t){return!1}}()?t("#drawer").find(".tip").tooltip():t(".tip").tooltip(),t.fn.tooltip.defaults={fade:!0,gravity:"n",opacity:.75},t("#drawerToggle").click((function(t){r("#drawer"),t.preventDefault()})),t("#notification").click((function(t){i(),t.preventDefault()})),t(".navigation a").click((function(){n("#drawer")})),{reload:function(){va