diff options
author | Jakob Stendahl <jakob.stendahl@outlook.com> | 2021-06-08 00:54:16 +0200 |
---|---|---|
committer | Jakob Stendahl <jakob.stendahl@outlook.com> | 2021-06-08 00:54:16 +0200 |
commit | ebbd4da27e7da032327fe98a59da163d6fd4568d (patch) | |
tree | bd77aced881b80d18bc81f8ff7242d0e3ffad9ef | |
parent | 59926f1fb539d39c8940956730e4d37040b78cc3 (diff) | |
download | hoverbit-ble-gh-pages.tar.gz hoverbit-ble-gh-pages.zip |
:rocket: Deploy app v1.1.1-alpha.1gh-pages
-rw-r--r-- | index.html | 2 | ||||
-rw-r--r-- | main.56096069.js (renamed from main.ea7a67f6.js) | 4 | ||||
-rw-r--r-- | main.56096069.js.map | 1 | ||||
-rw-r--r-- | main.ea7a67f6.js.map | 1 | ||||
-rw-r--r-- | service-worker.js | 4 |
5 files changed, 6 insertions, 6 deletions
@@ -1 +1 @@ -<!DOCTYPE html><html lang="en" dir="ltr"><head><meta charset="utf-8"><meta name="viewport" content="viewport-fit=cover,width=device-width, initial-scale=1, shrink-to-fit=no,initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><meta name="HandheldFriendly" content="true"><title>HOVER:BIT Controller</title><link rel="canonical"><link rel="stylesheet" type="text/css" href="/hoverbit-ble/styles.6ffd6063.css"><link rel="manifest" href="/hoverbit-ble/manifest.webmanifest" crossorigin="use-credentials"><link rel="preconnect" href="https://fonts.gstatic.com"><link href="https://fonts.googleapis.com/css2?family=Kufam&display=swap" rel="stylesheet"></head><body> <div class="app-info"> <h1>HOVER:BIT Controller</h1> <span class="version">1.1.1</span> </div> <div class="landscape-warning"> <div class="landscape-warning-content"> <i class="fa-sync-alt fas"></i> <h1>Please use landscape mode</h1> <button id="btn_ignore_landscape_warning">Ignore</button> </div> </div> <div class="top-buttons"> </div> <button class="button-center button-center-top" id="btn_connect">CONNECT</button> <button class="button-center button-center-top" id="btn_disconnect">DISCONNECT</button> <div class="acc-string"><pre>T: 0, R: 0</pre></div> <button class="button-center button-center-bottom" id="btn_arm">ARM</button> <button class="button-center button-center-bottom" id="btn_disarm">DISARM</button> <div class="joystick joystick-left"></div> <div class="joystick joystick-right"></div> <div class="statusline"> <span class="connection statusline-item"> <i class="fa-bluetooth-b fab"></i> </span> <span class="arm statusline-item"> <i class="fa-exclamation-triangle fas"></i> </span> <span class="notification-area"></span> <span class="ping statusline-item"> <i class="fa-broadcast-tower fas"></i> </span> <span class="battery statusline-item"> <i class="fa-car-battery fas"></i> <span class="battery-status">0%</span> </span> </div> <script type="text/javascript" src="/hoverbit-ble/main.ea7a67f6.js"></script> </body></html> +<!DOCTYPE html><html lang="en" dir="ltr"><head><meta charset="utf-8"><meta name="viewport" content="viewport-fit=cover,width=device-width, initial-scale=1, shrink-to-fit=no,initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><meta name="HandheldFriendly" content="true"><title>HOVER:BIT Controller</title><link rel="canonical"><link rel="stylesheet" type="text/css" href="/hoverbit-ble/styles.6ffd6063.css"><link rel="manifest" href="/hoverbit-ble/manifest.webmanifest" crossorigin="use-credentials"><link rel="preconnect" href="https://fonts.gstatic.com"><link href="https://fonts.googleapis.com/css2?family=Kufam&display=swap" rel="stylesheet"></head><body> <div class="app-info"> <h1>HOVER:BIT Controller</h1> <span class="version">1.1.1-alpha.1</span> </div> <div class="landscape-warning"> <div class="landscape-warning-content"> <i class="fa-sync-alt fas"></i> <h1>Please use landscape mode</h1> <button id="btn_ignore_landscape_warning">Ignore</button> </div> </div> <div class="top-buttons"> </div> <button class="button-center button-center-top" id="btn_connect">CONNECT</button> <button class="button-center button-center-top" id="btn_disconnect">DISCONNECT</button> <div class="acc-string"><pre>T: 0, R: 0</pre></div> <button class="button-center button-center-bottom" id="btn_arm">ARM</button> <button class="button-center button-center-bottom" id="btn_disarm">DISARM</button> <div class="joystick joystick-left"></div> <div class="joystick joystick-right"></div> <div class="statusline"> <span class="connection statusline-item"> <i class="fa-bluetooth-b fab"></i> </span> <span class="arm statusline-item"> <i class="fa-exclamation-triangle fas"></i> </span> <span class="notification-area"></span> <span class="ping statusline-item"> <i class="fa-broadcast-tower fas"></i> </span> <span class="battery statusline-item"> <i class="fa-car-battery fas"></i> <span class="battery-status">0%</span> </span> </div> <script type="text/javascript" src="/hoverbit-ble/main.56096069.js"></script> </body></html> diff --git a/main.ea7a67f6.js b/main.56096069.js index 20f7c67..3933cea 100644 --- a/main.ea7a67f6.js +++ b/main.56096069.js @@ -8,6 +8,6 @@ var t;!function(i,e){"object"==typeof exports&&"object"==typeof module?module.ex },{"./notification":"SiMs"}],"COPm":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;const e="6e400001-b5a3-f393-e0a9-e50e24dcca9e",t="6e400002-b5a3-f393-e0a9-e50e24dcca9e",c="6e400003-b5a3-f393-e0a9-e50e24dcca9e";class i{constructor(){this.onConnectCallback=function(){},this.onDisconnectCallback=function(){},this.onUartTxCallback=function(){},this.characteristic={UART_RX:{},UART_TX:{}}}onConnect(e){this.onConnectCallback=e}onDisconnect(e){this.onDisconnectCallback=e}onUartTx(e){this.onUartTxCallback=e}sendUart(e){if(this.isConnected()&&this.characteristic.UART_RX){let t=new TextEncoder;this.characteristic.UART_RX.writeValue(t.encode(e)).catch(e=>{console.log(e)})}}isConnected(){return!!this.device&&this.device.gatt.connected}disconnect(){this.isConnected()&&this.device.gatt.disconnect()}searchDevice(){navigator.bluetooth.requestDevice({filters:[{namePrefix:"BBC micro:bit"}],optionalServices:[e]}).then(e=>(console.log("> Name: "+e.name),console.log("> Id: "+e.id),this.device=e,e.addEventListener("gattserverdisconnected",this.onDisconnectCallback),e.gatt.connect())).then(e=>(this.onConnectCallback(),console.log("Getting Services..."),e.getPrimaryServices())).then(e=>{console.log("Getting Characteristics...");let i=Promise.resolve();return e.forEach(e=>{i=i.then(i=>e.getCharacteristics().then(i=>{console.log("> Service: "+e.uuid),i.forEach(e=>{switch(console.log(">> Characteristic: "+e.uuid+" "+n(e)),e.uuid){case c:this.characteristic.UART_RX=e;break;case t:this.characteristic.UART_TX=e,this.characteristic.UART_TX.startNotifications(),this.characteristic.UART_TX.addEventListener("characteristicvaluechanged",e=>{this.onUartTxCallback(a(e))})}})}))}),i}).catch(e=>{console.log("Argh! "+e)})}}function n(e){let t=[];for(const c in e.properties)!0===e.properties[c]&&t.push(c.toUpperCase());return"["+t.join(", ")+"]"}function a(e){let t=[];for(var c=0;c<e.target.value.byteLength;c++)t[c]=e.target.value.getUint8(c);return String.fromCharCode.apply(null,t)}exports.default=i; },{}],"d6sW":[function(require,module,exports) { -"use strict";var e=r(require("nipplejs")),t=r(require("./hoverControlModule")),n=r(require("./uBit")),o=require("./notification");function r(e){return e&&e.__esModule?e:{default:e}}let i="service-worker.js";navigator.serviceWorker&&navigator.serviceWorker.register(i,{scope:"/hoverbit-ble/"}).then(e=>{e.onupdatefound=(()=>{const t=e.installing;null!=t&&(t.onstatechange=(()=>{"installed"===t.state&&(navigator.serviceWorker.controller?(0,o.notif_info)("New content is available, relaunch the app to install it."):(0,o.notif_success)("Content is cached for offline use."))}))}),e.update()}).catch(e=>{(0,o.notif_alert)("Could not install service worker..."),console.error("Error during service worker registration:",e)}),document.getElementById("btn_ignore_landscape_warning").addEventListener("click",()=>{document.body.classList.add("ignore-landscape-warning")}),navigator.bluetooth||alert("Bluetooth not enabled in your browser, this won't work...");let c=new n.default,d=new t.default,a=e.default.create({zone:document.querySelector(".joystick-left"),size:200,position:{left:"50%",bottom:"50%"},mode:"static",lockX:!0}),s=e.default.create({zone:document.querySelector(".joystick-right"),size:200,position:{left:"50%",bottom:"50%"},mode:"static",lockY:!0});a.on("move",(e,t)=>{let n=90*t.distance/100;t.angle.degree>90&&(n*=-1),d.setRudder(Math.round(n))}),a.on("end",(e,t)=>{d.setRudder(0)}),s.on("move",(e,t)=>{let n=t.distance;t.angle.degree>90&&(n=0,t.distance>=100&&(d.reset(),d.getArm()&&(0,o.notif_alert)("Detected panicy reducing of throttle, dearming..."))),d.setThrottle(Math.round(n))}),s.on("end",(e,t)=>{d.setThrottle(0)}),document.getElementById("btn_arm").addEventListener("click",()=>{d.setArm(!0)}),document.getElementById("btn_disarm").addEventListener("click",()=>{d.setArm(!1)}),document.querySelector("#btn_disconnect").addEventListener("click",()=>{d.reset(),c.disconnect()}),document.getElementById("btn_connect").addEventListener("click",()=>{c.searchDevice()}),c.onConnect(()=>{document.body.classList.add("connected")}),c.onDisconnect(()=>{document.body.classList.remove("connected"),document.body.classList.remove("armed")}),c.onUartTx(e=>{var t=document.querySelector(".ping i"),n=t.cloneNode(!0);if(t.parentNode.replaceChild(n,t),-1!=e.indexOf(":")){let t=e.split(":");"B"==t[0]?document.querySelector(".battery-status").innerHTML=t[1]+"mV":"ACC"==t[0]?d.acc(t[1]):console.log(t)}else(0,o.notif_warn)("Received weird data from MICRO:BIT..."),console.log(`Received unknown: ${e}`)});let l=setInterval(async()=>{if(c.isConnected()){let e="T"+d.getThrottle().toString()+"R"+d.getRudder().toString()+"A"+(d.getArm()?"1":"0")+"S0:";await c.sendUart(e)}},100); +"use strict";var e=r(require("nipplejs")),t=r(require("./hoverControlModule")),n=r(require("./uBit")),o=require("./notification");function r(e){return e&&e.__esModule?e:{default:e}}let i="service-worker.js";navigator.serviceWorker&&navigator.serviceWorker.register(i,{scope:"/hoverbit-ble/"}).then(e=>{e.onupdatefound=(()=>{const t=e.installing;null!=t&&(t.onstatechange=(()=>{"installed"===t.state&&(navigator.serviceWorker.controller?(0,o.notif_info)("New content is available, relaunch the app to install it."):(0,o.notif_success)("Content is cached for offline use."))}))}),e.update()}).catch(e=>{(0,o.notif_alert)("Could not install service worker..."),console.error("Error during service worker registration:",e)}),document.getElementById("btn_ignore_landscape_warning").addEventListener("click",()=>{document.body.classList.add("ignore-landscape-warning")}),navigator.bluetooth||alert("Bluetooth not enabled in your browser, this won't work...");let c=new n.default,d=new t.default;window.ubit=c,window.hoverControl=d;let a=e.default.create({zone:document.querySelector(".joystick-left"),size:200,position:{left:"50%",bottom:"50%"},mode:"static",lockX:!0}),l=e.default.create({zone:document.querySelector(".joystick-right"),size:200,position:{left:"50%",bottom:"50%"},mode:"static",lockY:!0});a.on("move",(e,t)=>{let n=90*t.distance/100;t.angle.degree>90&&(n*=-1),d.setRudder(Math.round(n))}),a.on("end",(e,t)=>{d.setRudder(0)}),l.on("move",(e,t)=>{let n=t.distance;t.angle.degree>90&&(n=0,t.distance>=100&&(d.reset(),d.getArm()&&(0,o.notif_alert)("Detected panicy reducing of throttle, dearming..."))),d.setThrottle(Math.round(n))}),l.on("end",(e,t)=>{d.setThrottle(0)}),document.getElementById("btn_arm").addEventListener("click",()=>{d.setArm(!0)}),document.getElementById("btn_disarm").addEventListener("click",()=>{d.setArm(!1)}),document.querySelector("#btn_disconnect").addEventListener("click",()=>{d.reset(),c.disconnect()}),document.getElementById("btn_connect").addEventListener("click",()=>{c.searchDevice()}),c.onConnect(()=>{document.body.classList.add("connected")}),c.onDisconnect(()=>{document.body.classList.remove("connected"),document.body.classList.remove("armed")}),c.onUartTx(e=>{var t=document.querySelector(".ping i"),n=t.cloneNode(!0);if(t.parentNode.replaceChild(n,t),-1!=e.indexOf(":")){let t=e.split(":");"B"==t[0]?document.querySelector(".battery-status").innerHTML=t[1]+"mV":"ACC"==t[0]?d.acc(t[1]):console.log(t)}else(0,o.notif_warn)("Received weird data from MICRO:BIT..."),console.log(`Received unknown: ${e}`)});let s=setInterval(async()=>{if(c.isConnected()){let e="T"+d.getThrottle().toString()+"R"+d.getRudder().toString()+"A"+(d.getArm()?"1":"0")+"S0:";await c.sendUart(e)}},100); },{"nipplejs":"thIN","./hoverControlModule":"CLny","./uBit":"COPm","./notification":"SiMs"}]},{},["d6sW"], null) -//# sourceMappingURL=/hoverbit-ble/main.ea7a67f6.js.map
\ No newline at end of file +//# sourceMappingURL=/hoverbit-ble/main.56096069.js.map
\ No newline at end of file diff --git a/main.56096069.js.map b/main.56096069.js.map new file mode 100644 index 0000000..21891bc --- /dev/null +++ b/main.56096069.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../node_modules/nipplejs/dist/nipplejs.js","js/notification.js","js/hoverControlModule.js","js/uBit.js","js/main.js"],"names":["waiting_timer","undefined","notif_queue","notif","notif_c","notification_area","document","querySelector","screen","availHeight","availWidth","body","classList","contains","setInterval","clearInterval","pop","push","notif_elem","createElement","className","appendChild","setTimeout","removeChild","length","notif_alert","alert_str","div","text","innerHTML","icon","notif_warn","notif_info","info_str","notif_success","success_str","n","hoverControlModule","constructor","acc","accString","match","forEach","item","i","substring","parseInt","add","remove","console","log","reset","setArm","setThrottle","setRudder","throttle","getThrottle","rudder","getRudder","arm","getArm","UART_SERVICE_UUID","UART_TX_CHARACTERISTIC_UUID","UART_RX_CHARACTERISTIC_UUID","uBitBLE","onConnectCallback","onDisconnectCallback","onUartTxCallback","characteristic","UART_RX","UART_TX","onConnect","callbackFunction","onDisconnect","onUartTx","sendUart","string","isConnected","encoder","TextEncoder","writeValue","encode","catch","error","device","gatt","connected","disconnect","searchDevice","navigator","bluetooth","requestDevice","filters","namePrefix","optionalServices","then","name","id","addEventListener","connect","server","getPrimaryServices","services","queue","Promise","resolve","service","_","getCharacteristics","characteristics","uuid","getSupportedProperties","startNotifications","event","eventByteArrayToString","supportedProperties","p","properties","toUpperCase","join","receivedData","target","value","byteLength","getUint8","String","fromCharCode","apply","sw","serviceWorker","register","scope","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","update","getElementById","alert","ubit","hoverControl","window","joystickLeft","nipplejs","create","zone","size","position","left","bottom","mode","lockX","joystickRight","lockY","on","evt","data","distance","angle","degree","Math","round","elm","newone","cloneNode","parentNode","replaceChild","indexOf","parts","split","intervalSendCommands","command","toString"],"mappings":"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","file":"main.56096069.js","sourceRoot":"../src","sourcesContent":["!function(t,i){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(\"nipplejs\",[],i):\"object\"==typeof exports?exports.nipplejs=i():t.nipplejs=i()}(window,function(){return function(t){var i={};function e(o){if(i[o])return i[o].exports;var n=i[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,e),n.l=!0,n.exports}return e.m=t,e.c=i,e.d=function(t,i,o){e.o(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:o})},e.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.t=function(t,i){if(1&i&&(t=e(t)),8&i)return t;if(4&i&&\"object\"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(e.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:t}),2&i&&\"string\"!=typeof t)for(var n in t)e.d(o,n,function(i){return t[i]}.bind(null,n));return o},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,\"a\",i),i},e.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},e.p=\"\",e(e.s=0)}([function(t,i,e){\"use strict\";e.r(i);var o,n=function(t,i){var e=i.x-t.x,o=i.y-t.y;return Math.sqrt(e*e+o*o)},s=function(t){return t*(Math.PI/180)},r=function(t){return t*(180/Math.PI)},d=function(t,i,e){for(var o,n=i.split(/[ ,]+/g),s=0;s<n.length;s+=1)o=n[s],t.addEventListener?t.addEventListener(o,e,!1):t.attachEvent&&t.attachEvent(o,e)},a=function(t,i,e){for(var o,n=i.split(/[ ,]+/g),s=0;s<n.length;s+=1)o=n[s],t.removeEventListener?t.removeEventListener(o,e):t.detachEvent&&t.detachEvent(o,e)},p=function(t){return t.preventDefault(),t.type.match(/^touch/)?t.changedTouches:t},c=function(){return{x:void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,y:void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop}},h=function(t,i){i.top||i.right||i.bottom||i.left?(t.style.top=i.top,t.style.right=i.right,t.style.bottom=i.bottom,t.style.left=i.left):(t.style.left=i.x+\"px\",t.style.top=i.y+\"px\")},l=function(t,i,e){var o=u(t);for(var n in o)if(o.hasOwnProperty(n))if(\"string\"==typeof i)o[n]=i+\" \"+e;else{for(var s=\"\",r=0,d=i.length;r<d;r+=1)s+=i[r]+\" \"+e+\", \";o[n]=s.slice(0,-2)}return o},u=function(t){var i={};i[t]=\"\";return[\"webkit\",\"Moz\",\"o\"].forEach(function(e){i[e+t.charAt(0).toUpperCase()+t.slice(1)]=\"\"}),i},f=function(t,i){for(var e in i)i.hasOwnProperty(e)&&(t[e]=i[e]);return t},y=function(t,i){if(t.length)for(var e=0,o=t.length;e<o;e+=1)i(t[e]);else i(t)},m=!!(\"ontouchstart\"in window),v=!!window.PointerEvent,g=!!window.MSPointerEvent,b={start:\"mousedown\",move:\"mousemove\",end:\"mouseup\"},x={};function O(){}v?o={start:\"pointerdown\",move:\"pointermove\",end:\"pointerup, pointercancel\"}:g?o={start:\"MSPointerDown\",move:\"MSPointerMove\",end:\"MSPointerUp\"}:m?(o={start:\"touchstart\",move:\"touchmove\",end:\"touchend, touchcancel\"},x=b):o=b,O.prototype.on=function(t,i){var e,o=t.split(/[ ,]+/g);this._handlers_=this._handlers_||{};for(var n=0;n<o.length;n+=1)e=o[n],this._handlers_[e]=this._handlers_[e]||[],this._handlers_[e].push(i);return this},O.prototype.off=function(t,i){return this._handlers_=this._handlers_||{},void 0===t?this._handlers_={}:void 0===i?this._handlers_[t]=null:this._handlers_[t]&&this._handlers_[t].indexOf(i)>=0&&this._handlers_[t].splice(this._handlers_[t].indexOf(i),1),this},O.prototype.trigger=function(t,i){var e,o=this,n=t.split(/[ ,]+/g);o._handlers_=o._handlers_||{};for(var s=0;s<n.length;s+=1)e=n[s],o._handlers_[e]&&o._handlers_[e].length&&o._handlers_[e].forEach(function(t){t.call(o,{type:e,target:o},i)})},O.prototype.config=function(t){this.options=this.defaults||{},t&&(this.options=function(t,i){var e={};for(var o in t)t.hasOwnProperty(o)&&i.hasOwnProperty(o)?e[o]=i[o]:t.hasOwnProperty(o)&&(e[o]=t[o]);return e}(this.options,t))},O.prototype.bindEvt=function(t,i){var e=this;return e._domHandlers_=e._domHandlers_||{},e._domHandlers_[i]=function(){\"function\"==typeof e[\"on\"+i]?e[\"on\"+i].apply(e,arguments):console.warn('[WARNING] : Missing \"on'+i+'\" handler.')},d(t,o[i],e._domHandlers_[i]),x[i]&&d(t,x[i],e._domHandlers_[i]),e},O.prototype.unbindEvt=function(t,i){return this._domHandlers_=this._domHandlers_||{},a(t,o[i],this._domHandlers_[i]),x[i]&&a(t,x[i],this._domHandlers_[i]),delete this._domHandlers_[i],this};var _=O;function w(t,i){return this.identifier=i.identifier,this.position=i.position,this.frontPosition=i.frontPosition,this.collection=t,this.defaults={size:100,threshold:.1,color:\"white\",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:.5,mode:\"dynamic\",zone:document.body,lockX:!1,lockY:!1,shape:\"circle\"},this.config(i),\"dynamic\"===this.options.mode&&(this.options.restOpacity=0),this.id=w.id,w.id+=1,this.buildEl().stylize(),this.instance={el:this.ui.el,on:this.on.bind(this),off:this.off.bind(this),show:this.show.bind(this),hide:this.hide.bind(this),add:this.addToDom.bind(this),remove:this.removeFromDom.bind(this),destroy:this.destroy.bind(this),setPosition:this.setPosition.bind(this),resetDirection:this.resetDirection.bind(this),computeDirection:this.computeDirection.bind(this),trigger:this.trigger.bind(this),position:this.position,frontPosition:this.frontPosition,ui:this.ui,identifier:this.identifier,id:this.id,options:this.options},this.instance}w.prototype=new _,w.constructor=w,w.id=0,w.prototype.buildEl=function(t){return this.ui={},this.options.dataOnly?this:(this.ui.el=document.createElement(\"div\"),this.ui.back=document.createElement(\"div\"),this.ui.front=document.createElement(\"div\"),this.ui.el.className=\"nipple collection_\"+this.collection.id,this.ui.back.className=\"back\",this.ui.front.className=\"front\",this.ui.el.setAttribute(\"id\",\"nipple_\"+this.collection.id+\"_\"+this.id),this.ui.el.appendChild(this.ui.back),this.ui.el.appendChild(this.ui.front),this)},w.prototype.stylize=function(){if(this.options.dataOnly)return this;var t=this.options.fadeTime+\"ms\",i=function(t,i){var e=u(t);for(var o in e)e.hasOwnProperty(o)&&(e[o]=i);return e}(\"borderRadius\",\"50%\"),e=l(\"transition\",\"opacity\",t),o={};return o.el={position:\"absolute\",opacity:this.options.restOpacity,display:\"block\",zIndex:999},o.back={position:\"absolute\",display:\"block\",width:this.options.size+\"px\",height:this.options.size+\"px\",marginLeft:-this.options.size/2+\"px\",marginTop:-this.options.size/2+\"px\",background:this.options.color,opacity:\".5\"},o.front={width:this.options.size/2+\"px\",height:this.options.size/2+\"px\",position:\"absolute\",display:\"block\",marginLeft:-this.options.size/4+\"px\",marginTop:-this.options.size/4+\"px\",background:this.options.color,opacity:\".5\"},f(o.el,e),\"circle\"===this.options.shape&&f(o.back,i),f(o.front,i),this.applyStyles(o),this},w.prototype.applyStyles=function(t){for(var i in this.ui)if(this.ui.hasOwnProperty(i))for(var e in t[i])this.ui[i].style[e]=t[i][e];return this},w.prototype.addToDom=function(){return this.options.dataOnly||document.body.contains(this.ui.el)?this:(this.options.zone.appendChild(this.ui.el),this)},w.prototype.removeFromDom=function(){return this.options.dataOnly||!document.body.contains(this.ui.el)?this:(this.options.zone.removeChild(this.ui.el),this)},w.prototype.destroy=function(){clearTimeout(this.removeTimeout),clearTimeout(this.showTimeout),clearTimeout(this.restTimeout),this.trigger(\"destroyed\",this.instance),this.removeFromDom(),this.off()},w.prototype.show=function(t){var i=this;return i.options.dataOnly?i:(clearTimeout(i.removeTimeout),clearTimeout(i.showTimeout),clearTimeout(i.restTimeout),i.addToDom(),i.restCallback(),setTimeout(function(){i.ui.el.style.opacity=1},0),i.showTimeout=setTimeout(function(){i.trigger(\"shown\",i.instance),\"function\"==typeof t&&t.call(this)},i.options.fadeTime),i)},w.prototype.hide=function(t){var i=this;return i.options.dataOnly?i:(i.ui.el.style.opacity=i.options.restOpacity,clearTimeout(i.removeTimeout),clearTimeout(i.showTimeout),clearTimeout(i.restTimeout),i.removeTimeout=setTimeout(function(){var e=\"dynamic\"===i.options.mode?\"none\":\"block\";i.ui.el.style.display=e,\"function\"==typeof t&&t.call(i),i.trigger(\"hidden\",i.instance)},i.options.fadeTime),i.options.restJoystick&&i.setPosition(t,{x:0,y:0}),i)},w.prototype.setPosition=function(t,i){var e=this;e.frontPosition={x:i.x,y:i.y};var o=e.options.fadeTime+\"ms\",n={};n.front=l(\"transition\",[\"top\",\"left\"],o);var s={front:{}};s.front={left:e.frontPosition.x+\"px\",top:e.frontPosition.y+\"px\"},e.applyStyles(n),e.applyStyles(s),e.restTimeout=setTimeout(function(){\"function\"==typeof t&&t.call(e),e.restCallback()},e.options.fadeTime)},w.prototype.restCallback=function(){var t={};t.front=l(\"transition\",\"none\",\"\"),this.applyStyles(t),this.trigger(\"rested\",this.instance)},w.prototype.resetDirection=function(){this.direction={x:!1,y:!1,angle:!1}},w.prototype.computeDirection=function(t){var i,e,o,n=t.angle.radian,s=Math.PI/4,r=Math.PI/2;if(n>s&&n<3*s&&!t.lockX?i=\"up\":n>-s&&n<=s&&!t.lockY?i=\"left\":n>3*-s&&n<=-s&&!t.lockX?i=\"down\":t.lockY||(i=\"right\"),t.lockY||(e=n>-r&&n<r?\"left\":\"right\"),t.lockX||(o=n>0?\"up\":\"down\"),t.force>this.options.threshold){var d,a={};for(d in this.direction)this.direction.hasOwnProperty(d)&&(a[d]=this.direction[d]);var p={};for(d in this.direction={x:e,y:o,angle:i},t.direction=this.direction,a)a[d]===this.direction[d]&&(p[d]=!0);if(p.x&&p.y&&p.angle)return t;p.x&&p.y||this.trigger(\"plain\",t),p.x||this.trigger(\"plain:\"+e,t),p.y||this.trigger(\"plain:\"+o,t),p.angle||this.trigger(\"dir dir:\"+i,t)}else this.resetDirection();return t};var T=w;function k(t,i){return this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.pressureIntervals={},this.manager=t,this.id=k.id,k.id+=1,this.defaults={zone:document.body,multitouch:!1,maxNumberOfNipples:10,mode:\"dynamic\",position:{top:0,left:0},catchDistance:200,size:100,threshold:.1,color:\"white\",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:.5,lockX:!1,lockY:!1,shape:\"circle\",dynamicPage:!1},this.config(i),\"static\"!==this.options.mode&&\"semi\"!==this.options.mode||(this.options.multitouch=!1),this.options.multitouch||(this.options.maxNumberOfNipples=1),this.updateBox(),this.prepareNipples(),this.bindings(),this.begin(),this.nipples}k.prototype=new _,k.constructor=k,k.id=0,k.prototype.prepareNipples=function(){var t=this.nipples;t.on=this.on.bind(this),t.off=this.off.bind(this),t.options=this.options,t.destroy=this.destroy.bind(this),t.ids=this.ids,t.id=this.id,t.processOnMove=this.processOnMove.bind(this),t.processOnEnd=this.processOnEnd.bind(this),t.get=function(i){if(void 0===i)return t[0];for(var e=0,o=t.length;e<o;e+=1)if(t[e].identifier===i)return t[e];return!1}},k.prototype.bindings=function(){this.bindEvt(this.options.zone,\"start\"),this.options.zone.style.touchAction=\"none\",this.options.zone.style.msTouchAction=\"none\"},k.prototype.begin=function(){var t=this.options;if(\"static\"===t.mode){var i=this.createNipple(t.position,this.manager.getIdentifier());i.add(),this.idles.push(i)}},k.prototype.createNipple=function(t,i){var e=c(),o={},n=this.options;if(t.x&&t.y)o={x:t.x-(e.x+this.box.left),y:t.y-(e.y+this.box.top)};else if(t.top||t.right||t.bottom||t.left){var s=document.createElement(\"DIV\");s.style.display=\"hidden\",s.style.top=t.top,s.style.right=t.right,s.style.bottom=t.bottom,s.style.left=t.left,s.style.position=\"absolute\",n.zone.appendChild(s);var r=s.getBoundingClientRect();n.zone.removeChild(s),o=t,t={x:r.left+e.x,y:r.top+e.y}}var d=new T(this,{color:n.color,size:n.size,threshold:n.threshold,fadeTime:n.fadeTime,dataOnly:n.dataOnly,restJoystick:n.restJoystick,restOpacity:n.restOpacity,mode:n.mode,identifier:i,position:t,zone:n.zone,frontPosition:{x:0,y:0},shape:n.shape});return n.dataOnly||(h(d.ui.el,o),h(d.ui.front,d.frontPosition)),this.nipples.push(d),this.trigger(\"added \"+d.identifier+\":added\",d),this.manager.trigger(\"added \"+d.identifier+\":added\",d),this.bindNipple(d),d},k.prototype.updateBox=function(){this.box=this.options.zone.getBoundingClientRect()},k.prototype.bindNipple=function(t){var i,e=this,o=function(t,o){i=t.type+\" \"+o.id+\":\"+t.type,e.trigger(i,o)};t.on(\"destroyed\",e.onDestroyed.bind(e)),t.on(\"shown hidden rested dir plain\",o),t.on(\"dir:up dir:right dir:down dir:left\",o),t.on(\"plain:up plain:right plain:down plain:left\",o)},k.prototype.pressureFn=function(t,i,e){var o=this,n=0;clearInterval(o.pressureIntervals[e]),o.pressureIntervals[e]=setInterval(function(){var e=t.force||t.pressure||t.webkitForce||0;e!==n&&(i.trigger(\"pressure\",e),o.trigger(\"pressure \"+i.identifier+\":pressure\",e),n=e)}.bind(o),100)},k.prototype.onstart=function(t){var i=this,e=i.options,o=t;t=p(t),i.updateBox();return y(t,function(n){i.actives.length<e.maxNumberOfNipples?i.processOnStart(n):o.type.match(/^touch/)&&(Object.keys(i.manager.ids).forEach(function(e){if(Object.values(o.touches).findIndex(function(t){return t.identifier===e})<0){var n=[t[0]];n.identifier=e,i.processOnEnd(n)}}),i.actives.length<e.maxNumberOfNipples&&i.processOnStart(n))}),i.manager.bindDocument(),!1},k.prototype.processOnStart=function(t){var i,e=this,o=e.options,s=e.manager.getIdentifier(t),r=t.force||t.pressure||t.webkitForce||0,d={x:t.pageX,y:t.pageY},a=e.getOrCreate(s,d);a.identifier!==s&&e.manager.removeIdentifier(a.identifier),a.identifier=s;var p=function(i){i.trigger(\"start\",i),e.trigger(\"start \"+i.id+\":start\",i),i.show(),r>0&&e.pressureFn(t,i,i.identifier),e.processOnMove(t)};if((i=e.idles.indexOf(a))>=0&&e.idles.splice(i,1),e.actives.push(a),e.ids.push(a.identifier),\"semi\"!==o.mode)p(a);else{if(!(n(d,a.position)<=o.catchDistance))return a.destroy(),void e.processOnStart(t);p(a)}return a},k.prototype.getOrCreate=function(t,i){var e,o=this.options;return/(semi|static)/.test(o.mode)?(e=this.idles[0])?(this.idles.splice(0,1),e):\"semi\"===o.mode?this.createNipple(i,t):(console.warn(\"Coudln't find the needed nipple.\"),!1):e=this.createNipple(i,t)},k.prototype.processOnMove=function(t){var i=this.options,e=this.manager.getIdentifier(t),o=this.nipples.get(e);if(function(t){return isNaN(t.buttons)?0!==t.pressure:0!==t.buttons}(t)){if(!o)return console.error(\"Found zombie joystick with ID \"+e),void this.manager.removeIdentifier(e);if(i.dynamicPage){var d=c();p=o.el.getBoundingClientRect(),o.position={x:d.x+p.left,y:d.y+p.top}}o.identifier=e;var a=o.options.size/2,p={x:t.pageX,y:t.pageY};i.lockX&&(p.y=o.position.y),i.lockY&&(p.x=o.position.x);var l,u,f,y,m,v,g,b,x=n(p,o.position),O=(l=p,u=o.position,f=u.x-l.x,y=u.y-l.y,r(Math.atan2(y,f))),_=s(O),w=x/a,T={distance:x,position:p};\"circle\"===o.options.shape?(x=Math.min(x,a),m=o.position,v=x,b={x:0,y:0},g=s(g=O),b.x=m.x-v*Math.cos(g),b.y=m.y-v*Math.sin(g),p=b):(p=function(t,i,e){return{x:Math.min(Math.max(t.x,i.x-e),i.x+e),y:Math.min(Math.max(t.y,i.y-e),i.y+e)}}(p,o.position,a),x=n(p,o.position));var k=p.x-o.position.x,P=p.y-o.position.y;o.frontPosition={x:k,y:P},i.dataOnly||h(o.ui.front,o.frontPosition);var E={identifier:o.identifier,position:p,force:w,pressure:t.force||t.pressure||t.webkitForce||0,distance:x,angle:{radian:_,degree:O},vector:{x:k/a,y:-P/a},raw:T,instance:o,lockX:i.lockX,lockY:i.lockY};(E=o.computeDirection(E)).angle={radian:s(180-O),degree:180-O},o.trigger(\"move\",E),this.trigger(\"move \"+o.id+\":move\",E)}else this.processOnEnd(t)},k.prototype.processOnEnd=function(t){var i=this,e=i.options,o=i.manager.getIdentifier(t),n=i.nipples.get(o),s=i.manager.removeIdentifier(n.identifier);n&&(e.dataOnly||n.hide(function(){\"dynamic\"===e.mode&&(n.trigger(\"removed\",n),i.trigger(\"removed \"+n.id+\":removed\",n),i.manager.trigger(\"removed \"+n.id+\":removed\",n),n.destroy())}),clearInterval(i.pressureIntervals[n.identifier]),n.resetDirection(),n.trigger(\"end\",n),i.trigger(\"end \"+n.id+\":end\",n),i.ids.indexOf(n.identifier)>=0&&i.ids.splice(i.ids.indexOf(n.identifier),1),i.actives.indexOf(n)>=0&&i.actives.splice(i.actives.indexOf(n),1),/(semi|static)/.test(e.mode)?i.idles.push(n):i.nipples.indexOf(n)>=0&&i.nipples.splice(i.nipples.indexOf(n),1),i.manager.unbindDocument(),/(semi|static)/.test(e.mode)&&(i.manager.ids[s.id]=s.identifier))},k.prototype.onDestroyed=function(t,i){this.nipples.indexOf(i)>=0&&this.nipples.splice(this.nipples.indexOf(i),1),this.actives.indexOf(i)>=0&&this.actives.splice(this.actives.indexOf(i),1),this.idles.indexOf(i)>=0&&this.idles.splice(this.idles.indexOf(i),1),this.ids.indexOf(i.identifier)>=0&&this.ids.splice(this.ids.indexOf(i.identifier),1),this.manager.removeIdentifier(i.identifier),this.manager.unbindDocument()},k.prototype.destroy=function(){for(var t in this.unbindEvt(this.options.zone,\"start\"),this.nipples.forEach(function(t){t.destroy()}),this.pressureIntervals)this.pressureIntervals.hasOwnProperty(t)&&clearInterval(this.pressureIntervals[t]);this.trigger(\"destroyed\",this.nipples),this.manager.unbindDocument(),this.off()};var P=k;function E(t){var i,e=this;return e.ids={},e.index=0,e.collections=[],e.config(t),e.prepareCollections(),d(window,\"resize\",function(t){clearTimeout(i),i=setTimeout(function(){var t,i=c();e.collections.forEach(function(e){e.forEach(function(e){t=e.el.getBoundingClientRect(),e.position={x:i.x+t.left,y:i.y+t.top}})})},100)}),e.collections}E.prototype=new _,E.constructor=E,E.prototype.prepareCollections=function(){var t=this;t.collections.create=t.create.bind(t),t.collections.on=t.on.bind(t),t.collections.off=t.off.bind(t),t.collections.destroy=t.destroy.bind(t),t.collections.get=function(i){var e;return t.collections.every(function(t){return!(e=t.get(i))}),e}},E.prototype.create=function(t){return this.createCollection(t)},E.prototype.createCollection=function(t){var i=new P(this,t);return this.bindCollection(i),this.collections.push(i),i},E.prototype.bindCollection=function(t){var i,e=this,o=function(t,o){i=t.type+\" \"+o.id+\":\"+t.type,e.trigger(i,o)};t.on(\"destroyed\",e.onDestroyed.bind(e)),t.on(\"shown hidden rested dir plain\",o),t.on(\"dir:up dir:right dir:down dir:left\",o),t.on(\"plain:up plain:right plain:down plain:left\",o)},E.prototype.bindDocument=function(){this.binded||(this.bindEvt(document,\"move\").bindEvt(document,\"end\"),this.binded=!0)},E.prototype.unbindDocument=function(t){Object.keys(this.ids).length&&!0!==t||(this.unbindEvt(document,\"move\").unbindEvt(document,\"end\"),this.binded=!1)},E.prototype.getIdentifier=function(t){var i;return t?void 0===(i=void 0===t.identifier?t.pointerId:t.identifier)&&(i=this.latest||0):i=this.index,void 0===this.ids[i]&&(this.ids[i]=this.index,this.index+=1),this.latest=i,this.ids[i]},E.prototype.removeIdentifier=function(t){var i={};for(var e in this.ids)if(this.ids[e]===t){i.id=e,i.identifier=this.ids[e],delete this.ids[e];break}return i},E.prototype.onmove=function(t){return this.onAny(\"move\",t),!1},E.prototype.onend=function(t){return this.onAny(\"end\",t),!1},E.prototype.oncancel=function(t){return this.onAny(\"end\",t),!1},E.prototype.onAny=function(t,i){var e,o=this,n=\"processOn\"+t.charAt(0).toUpperCase()+t.slice(1);i=p(i);return y(i,function(t){e=o.getIdentifier(t),y(o.collections,function(t,i,e){e.ids.indexOf(i)>=0&&(e[n](t),t._found_=!0)}.bind(null,t,e)),t._found_||o.removeIdentifier(e)}),!1},E.prototype.destroy=function(){this.unbindDocument(!0),this.ids={},this.index=0,this.collections.forEach(function(t){t.destroy()}),this.off()},E.prototype.onDestroyed=function(t,i){if(this.collections.indexOf(i)<0)return!1;this.collections.splice(this.collections.indexOf(i),1)};var I=new E;i.default={create:function(t){return I.create(t)},factory:I}}]).default});","let waiting_timer = undefined;\nlet notif_queue = [];\n\nfunction notif(notif_c) {\n let notification_area = document.querySelector(\".statusline .notification-area\");\n\n if ((notification_area.querySelector(\".notification\") === null) && (waiting_timer === undefined)) {\n // This is just so no notifications will be played and disappears while the full screen landscape warning is in the way.\n if( (screen.availHeight > screen.availWidth) && (!document.body.classList.contains(\"ignore-landscape-warning\"))){\n waiting_timer = setInterval(() => {\n if( (screen.availHeight < screen.availWidth) || (document.body.classList.contains(\"ignore-landscape-warning\"))){\n clearInterval(waiting_timer);\n waiting_timer = undefined;\n notif(notif_queue.pop());\n }\n }, 1000);\n notif_queue.push(notif_c);\n return;\n }\n\n let notif_elem = document.createElement(\"div\");\n notif_elem.className = \"notification\";\n notif_elem.appendChild(notif_c[0]);\n notif_elem.appendChild(notif_c[1]);\n\n notification_area.appendChild(notif_elem);\n\n setTimeout(() => {\n notification_area.removeChild(notif_elem);\n if (notif_queue.length > 0) {\n notif(notif_queue.pop());\n }\n }, 5000);\n } else {\n notif_queue.push(notif_c);\n }\n}\n\nexport function notif_alert(alert_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = alert_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"alert fas fa-exclamation-triangle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n\nexport function notif_warn(alert_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = alert_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"warning fas fa-exclamation-triangle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n\nexport function notif_info(info_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = info_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"info fas fa-info-circle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n\nexport function notif_success(success_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = success_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"success fas fa-check-circle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n","import { notif_alert, notif_warn, notif_info, notif_success } from './notification';\n\nlet n = 0;\n\nexport default class hoverControlModule {\n #throttle = 0;\n #throttleAcc = 0;\n #rudder = 0;\n #rudderAcc = 0;\n #arm = 0;\n #armAcc = 0;\n\n constructor() {}\n\n acc(accString) {\n accString.match(/[A-Z][-,0-9]+/g).forEach((item, i) => {\n switch (item.substring(0, 1)) {\n case \"T\":\n this.#throttleAcc = parseInt(item.substring(1, item.length));\n break;\n case \"R\":\n this.#rudderAcc = parseInt(item.substring(1, item.length));\n break;\n case \"A\":\n this.#armAcc = parseInt(item.substring(1, item.length)) == 1;\n if (this.#armAcc) {\n document.body.classList.add(\"armed\");\n } else {\n document.body.classList.remove(\"armed\");\n }\n break;\n case \"S\":\n break;\n default:\n console.log(`Unkown acc: ${item}`);\n }\n });\n document.querySelector(\".acc-string pre\").innerHTML = `T: ${this.#throttleAcc}, R: ${this.#rudderAcc}, ${n}`;\n n++;\n }\n\n reset() {\n this.setArm(0);\n this.setThrottle(0);\n this.setRudder(0);\n }\n\n setThrottle(throttle) {\n if (!this.#armAcc) { return; }\n if (throttle > 100) { throttle = 100; }\n if (throttle < 0) { throttle = 0; }\n this.#throttle = throttle;\n }\n getThrottle() {\n return this.#throttle;\n }\n\n setRudder(rudder) {\n if (!this.#armAcc) { return; }\n if (rudder > 90) { rudder = 90; }\n if (rudder < -90) { rudder = -90; }\n this.#rudder = rudder;\n }\n getRudder() {\n return this.#rudder;\n }\n\n setArm(arm) {\n this.#arm = arm;\n if (!this.#arm) {\n this.#throttle = 0;\n this.#rudder = 0;\n }\n }\n getArm() {\n return this.#arm;\n }\n}\n","/*\n * This code is written with a lot of help from these resources:\n * https://github.com/antefact/microBit.js/blob/master/src/microBit.js\n * https://gist.github.com/kotobuki/7c67f8b9361e08930da1a5cfcfb0653f\n * https://lancaster-university.github.io/microbit-docs/resources/bluetooth/bluetooth_profile.html\n */\nconst UART_SERVICE_UUID = \"6e400001-b5a3-f393-e0a9-e50e24dcca9e\";\nconst UART_TX_CHARACTERISTIC_UUID = \"6e400002-b5a3-f393-e0a9-e50e24dcca9e\";\nconst UART_RX_CHARACTERISTIC_UUID = \"6e400003-b5a3-f393-e0a9-e50e24dcca9e\";\n\nexport default class uBitBLE {\n\n constructor() {\n let device;\n\n this.onConnectCallback = function() {};\n this.onDisconnectCallback = function() {};\n this.onUartTxCallback = function() {};\n\n this.characteristic = {\n UART_RX: {},\n UART_TX: {}\n }\n }\n\n onConnect(callbackFunction) {\n this.onConnectCallback = callbackFunction;\n }\n\n onDisconnect(callbackFunction) {\n this.onDisconnectCallback = callbackFunction;\n }\n\n onUartTx(callbackFunction) {\n this.onUartTxCallback = callbackFunction;\n }\n\n sendUart(string) {\n if (this.isConnected() && this.characteristic.UART_RX) {\n let encoder = new TextEncoder();\n this.characteristic.UART_RX.writeValue(\n encoder.encode(string)\n ).catch(error => {\n console.log(error);\n });\n }\n }\n\n isConnected() {\n if (this.device) {\n return this.device.gatt.connected;\n } else {\n return false;\n }\n }\n\n disconnect() {\n if (this.isConnected()) {\n this.device.gatt.disconnect();\n }\n }\n\n searchDevice() {\n navigator.bluetooth.requestDevice({\n filters: [{namePrefix: \"BBC micro:bit\"}],\n optionalServices: [UART_SERVICE_UUID]\n })\n .then(device => {\n console.log('> Name: ' + device.name);\n console.log('> Id: ' + device.id);\n this.device = device;\n\n device.addEventListener('gattserverdisconnected', this.onDisconnectCallback);\n\n // Attempts to connect to remote GATT Server.\n return device.gatt.connect();\n })\n .then(server => {\n // Note that we could also get all services that match a specific UUID by\n // passing it to getPrimaryServices().\n this.onConnectCallback();\n console.log('Getting Services...');\n return server.getPrimaryServices();\n })\n .then(services => {\n console.log('Getting Characteristics...');\n let queue = Promise.resolve();\n services.forEach(service => {\n queue = queue.then(_ => service.getCharacteristics().then(characteristics => {\n console.log('> Service: ' + service.uuid);\n characteristics.forEach(characteristic => {\n console.log('>> Characteristic: ' + characteristic.uuid + ' ' +\n getSupportedProperties(characteristic));\n switch (characteristic.uuid) {\n case UART_RX_CHARACTERISTIC_UUID:\n this.characteristic.UART_RX = characteristic;\n break;\n \n case UART_TX_CHARACTERISTIC_UUID:\n this.characteristic.UART_TX = characteristic;\n this.characteristic.UART_TX.startNotifications();\n this.characteristic.UART_TX.addEventListener(\n \"characteristicvaluechanged\",\n (event) => { this.onUartTxCallback(eventByteArrayToString(event)) }\n );\n break;\n\n default:\n }\n });\n }));\n });\n return queue;\n })\n .catch(error => {\n console.log('Argh! ' + error);\n });\n }\n\n}\n\nfunction getSupportedProperties(characteristic) {\n let supportedProperties = [];\n for (const p in characteristic.properties) {\n if (characteristic.properties[p] === true) {\n supportedProperties.push(p.toUpperCase());\n }\n }\n return '[' + supportedProperties.join(', ') + ']';\n}\n\nfunction eventByteArrayToString(event) {\n let receivedData = [];\n for (var i = 0; i < event.target.value.byteLength; i++) {\n receivedData[i] = event.target.value.getUint8(i);\n }\n return String.fromCharCode.apply(null, receivedData);\n}\n","import nipplejs from 'nipplejs';\nimport hoverControlModule from './hoverControlModule';\nimport uBitBLE from \"./uBit\";\nimport { notif_alert, notif_warn, notif_info, notif_success } from './notification';\n\nlet sw = \"service-worker.js\";\nif (navigator.serviceWorker) {\n navigator.serviceWorker.register(\n sw, {scope: '/hoverbit-ble/'}\n ).then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) { return; }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n notif_info(\"New content is available, relaunch the app to install it.\");\n } else {\n notif_success(\"Content is cached for offline use.\");\n }\n }\n };\n };\n registration.update();\n }).catch(error => {\n notif_alert(\"Could not install service worker...\");\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\ndocument.getElementById(\"btn_ignore_landscape_warning\").addEventListener(\"click\", () => {\n document.body.classList.add(\"ignore-landscape-warning\");\n});\n\nif (!navigator.bluetooth) {\n alert(\"Bluetooth not enabled in your browser, this won't work...\");\n}\n\n/* Define and initialize things */\nlet ubit = new uBitBLE();\nlet hoverControl = new hoverControlModule();\nwindow.ubit = ubit;\nwindow.hoverControl = hoverControl;\n\nlet joystickLeft = nipplejs.create({\n zone: document.querySelector(\".joystick-left\"),\n size: 200,\n position: {left: '50%', bottom: '50%'},\n mode: \"static\",\n lockX: true\n});\nlet joystickRight = nipplejs.create({\n zone: document.querySelector(\".joystick-right\"),\n size: 200,\n position: {left: '50%', bottom: '50%'},\n mode: \"static\",\n lockY: true\n});\n\n/* Setup event_listeners */\njoystickLeft.on(\"move\", (evt, data) => {\n let rudder = ((data.distance * 90) / 100);\n if (data.angle.degree > 90) { rudder = rudder * -1; }\n hoverControl.setRudder(Math.round(rudder));\n});\njoystickLeft.on(\"end\", (evt, data) => {\n hoverControl.setRudder(0);\n});\n\njoystickRight.on(\"move\", (evt, data) => {\n let throttle = data.distance;\n\n if (data.angle.degree > 90) {\n throttle = 0;\n if (data.distance >= 100) {\n hoverControl.reset();\n if (hoverControl.getArm()) {\n notif_alert(\"Detected panicy reducing of throttle, dearming...\");\n }\n }\n }\n hoverControl.setThrottle(Math.round(throttle));\n});\njoystickRight.on(\"end\", (evt, data) => {\n hoverControl.setThrottle(0);\n});\n\ndocument.getElementById(\"btn_arm\").addEventListener(\"click\", () => {\n hoverControl.setArm(true);\n});\n\ndocument.getElementById(\"btn_disarm\").addEventListener(\"click\", () => {\n hoverControl.setArm(false);\n});\n\ndocument.querySelector(\"#btn_disconnect\").addEventListener(\"click\", () => {\n hoverControl.reset();\n ubit.disconnect();\n});\n\ndocument.getElementById(\"btn_connect\").addEventListener(\"click\", () => {\n ubit.searchDevice();\n});\n\nubit.onConnect(() => {\n document.body.classList.add(\"connected\");\n});\n\nubit.onDisconnect(() => {\n document.body.classList.remove(\"connected\");\n document.body.classList.remove(\"armed\");\n});\n\nubit.onUartTx((text) => {\n /* Just make the ping symbol reappear. */\n var elm = document.querySelector(\".ping i\");\n var newone = elm.cloneNode(true);\n elm.parentNode.replaceChild(newone, elm);\n\n /* Actually handle received text. */\n // console.log(`Received: ${text}`);\n if ((text).indexOf(\":\") != -1) {\n let parts = (text).split(\":\");\n\n if (parts[0] == \"B\") {\n document.querySelector(\".battery-status\").innerHTML = parts[1] + \"mV\";\n } else if (parts[0] == \"ACC\") {\n hoverControl.acc(parts[1]);\n } else {\n console.log(parts);\n }\n } else {\n notif_warn(\"Received weird data from MICRO:BIT...\");\n console.log(`Received unknown: ${text}`);\n }\n});\n\nlet intervalSendCommands = setInterval(async() => {\n if (ubit.isConnected()) {\n let command =\n \"T\" + hoverControl.getThrottle().toString() +\n \"R\" + hoverControl.getRudder().toString() +\n \"A\" + (hoverControl.getArm() ? \"1\" : \"0\") +\n \"S0\" +\n \":\";\n await ubit.sendUart(command);\n // console.log(`Sent: ${command}`);\n }\n}, 100);\n"]}
\ No newline at end of file diff --git a/main.ea7a67f6.js.map b/main.ea7a67f6.js.map deleted file mode 100644 index 9d67662..0000000 --- a/main.ea7a67f6.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../node_modules/nipplejs/dist/nipplejs.js","js/notification.js","js/hoverControlModule.js","js/uBit.js","js/main.js"],"names":["waiting_timer","undefined","notif_queue","notif","notif_c","notification_area","document","querySelector","screen","availHeight","availWidth","body","classList","contains","setInterval","clearInterval","pop","push","notif_elem","createElement","className","appendChild","setTimeout","removeChild","length","notif_alert","alert_str","div","text","innerHTML","icon","notif_warn","notif_info","info_str","notif_success","success_str","n","hoverControlModule","constructor","acc","accString","match","forEach","item","i","substring","parseInt","add","remove","console","log","reset","setArm","setThrottle","setRudder","throttle","getThrottle","rudder","getRudder","arm","getArm","UART_SERVICE_UUID","UART_TX_CHARACTERISTIC_UUID","UART_RX_CHARACTERISTIC_UUID","uBitBLE","onConnectCallback","onDisconnectCallback","onUartTxCallback","characteristic","UART_RX","UART_TX","onConnect","callbackFunction","onDisconnect","onUartTx","sendUart","string","isConnected","encoder","TextEncoder","writeValue","encode","catch","error","device","gatt","connected","disconnect","searchDevice","navigator","bluetooth","requestDevice","filters","namePrefix","optionalServices","then","name","id","addEventListener","connect","server","getPrimaryServices","services","queue","Promise","resolve","service","_","getCharacteristics","characteristics","uuid","getSupportedProperties","startNotifications","event","eventByteArrayToString","supportedProperties","p","properties","toUpperCase","join","receivedData","target","value","byteLength","getUint8","String","fromCharCode","apply","sw","serviceWorker","register","scope","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","update","getElementById","alert","ubit","hoverControl","joystickLeft","nipplejs","create","zone","size","position","left","bottom","mode","lockX","joystickRight","lockY","on","evt","data","distance","angle","degree","Math","round","elm","newone","cloneNode","parentNode","replaceChild","indexOf","parts","split","intervalSendCommands","command","toString"],"mappings":"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","file":"main.ea7a67f6.js","sourceRoot":"../src","sourcesContent":["!function(t,i){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(\"nipplejs\",[],i):\"object\"==typeof exports?exports.nipplejs=i():t.nipplejs=i()}(window,function(){return function(t){var i={};function e(o){if(i[o])return i[o].exports;var n=i[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,e),n.l=!0,n.exports}return e.m=t,e.c=i,e.d=function(t,i,o){e.o(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:o})},e.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.t=function(t,i){if(1&i&&(t=e(t)),8&i)return t;if(4&i&&\"object\"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(e.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:t}),2&i&&\"string\"!=typeof t)for(var n in t)e.d(o,n,function(i){return t[i]}.bind(null,n));return o},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,\"a\",i),i},e.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},e.p=\"\",e(e.s=0)}([function(t,i,e){\"use strict\";e.r(i);var o,n=function(t,i){var e=i.x-t.x,o=i.y-t.y;return Math.sqrt(e*e+o*o)},s=function(t){return t*(Math.PI/180)},r=function(t){return t*(180/Math.PI)},d=function(t,i,e){for(var o,n=i.split(/[ ,]+/g),s=0;s<n.length;s+=1)o=n[s],t.addEventListener?t.addEventListener(o,e,!1):t.attachEvent&&t.attachEvent(o,e)},a=function(t,i,e){for(var o,n=i.split(/[ ,]+/g),s=0;s<n.length;s+=1)o=n[s],t.removeEventListener?t.removeEventListener(o,e):t.detachEvent&&t.detachEvent(o,e)},p=function(t){return t.preventDefault(),t.type.match(/^touch/)?t.changedTouches:t},c=function(){return{x:void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,y:void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop}},h=function(t,i){i.top||i.right||i.bottom||i.left?(t.style.top=i.top,t.style.right=i.right,t.style.bottom=i.bottom,t.style.left=i.left):(t.style.left=i.x+\"px\",t.style.top=i.y+\"px\")},l=function(t,i,e){var o=u(t);for(var n in o)if(o.hasOwnProperty(n))if(\"string\"==typeof i)o[n]=i+\" \"+e;else{for(var s=\"\",r=0,d=i.length;r<d;r+=1)s+=i[r]+\" \"+e+\", \";o[n]=s.slice(0,-2)}return o},u=function(t){var i={};i[t]=\"\";return[\"webkit\",\"Moz\",\"o\"].forEach(function(e){i[e+t.charAt(0).toUpperCase()+t.slice(1)]=\"\"}),i},f=function(t,i){for(var e in i)i.hasOwnProperty(e)&&(t[e]=i[e]);return t},y=function(t,i){if(t.length)for(var e=0,o=t.length;e<o;e+=1)i(t[e]);else i(t)},m=!!(\"ontouchstart\"in window),v=!!window.PointerEvent,g=!!window.MSPointerEvent,b={start:\"mousedown\",move:\"mousemove\",end:\"mouseup\"},x={};function O(){}v?o={start:\"pointerdown\",move:\"pointermove\",end:\"pointerup, pointercancel\"}:g?o={start:\"MSPointerDown\",move:\"MSPointerMove\",end:\"MSPointerUp\"}:m?(o={start:\"touchstart\",move:\"touchmove\",end:\"touchend, touchcancel\"},x=b):o=b,O.prototype.on=function(t,i){var e,o=t.split(/[ ,]+/g);this._handlers_=this._handlers_||{};for(var n=0;n<o.length;n+=1)e=o[n],this._handlers_[e]=this._handlers_[e]||[],this._handlers_[e].push(i);return this},O.prototype.off=function(t,i){return this._handlers_=this._handlers_||{},void 0===t?this._handlers_={}:void 0===i?this._handlers_[t]=null:this._handlers_[t]&&this._handlers_[t].indexOf(i)>=0&&this._handlers_[t].splice(this._handlers_[t].indexOf(i),1),this},O.prototype.trigger=function(t,i){var e,o=this,n=t.split(/[ ,]+/g);o._handlers_=o._handlers_||{};for(var s=0;s<n.length;s+=1)e=n[s],o._handlers_[e]&&o._handlers_[e].length&&o._handlers_[e].forEach(function(t){t.call(o,{type:e,target:o},i)})},O.prototype.config=function(t){this.options=this.defaults||{},t&&(this.options=function(t,i){var e={};for(var o in t)t.hasOwnProperty(o)&&i.hasOwnProperty(o)?e[o]=i[o]:t.hasOwnProperty(o)&&(e[o]=t[o]);return e}(this.options,t))},O.prototype.bindEvt=function(t,i){var e=this;return e._domHandlers_=e._domHandlers_||{},e._domHandlers_[i]=function(){\"function\"==typeof e[\"on\"+i]?e[\"on\"+i].apply(e,arguments):console.warn('[WARNING] : Missing \"on'+i+'\" handler.')},d(t,o[i],e._domHandlers_[i]),x[i]&&d(t,x[i],e._domHandlers_[i]),e},O.prototype.unbindEvt=function(t,i){return this._domHandlers_=this._domHandlers_||{},a(t,o[i],this._domHandlers_[i]),x[i]&&a(t,x[i],this._domHandlers_[i]),delete this._domHandlers_[i],this};var _=O;function w(t,i){return this.identifier=i.identifier,this.position=i.position,this.frontPosition=i.frontPosition,this.collection=t,this.defaults={size:100,threshold:.1,color:\"white\",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:.5,mode:\"dynamic\",zone:document.body,lockX:!1,lockY:!1,shape:\"circle\"},this.config(i),\"dynamic\"===this.options.mode&&(this.options.restOpacity=0),this.id=w.id,w.id+=1,this.buildEl().stylize(),this.instance={el:this.ui.el,on:this.on.bind(this),off:this.off.bind(this),show:this.show.bind(this),hide:this.hide.bind(this),add:this.addToDom.bind(this),remove:this.removeFromDom.bind(this),destroy:this.destroy.bind(this),setPosition:this.setPosition.bind(this),resetDirection:this.resetDirection.bind(this),computeDirection:this.computeDirection.bind(this),trigger:this.trigger.bind(this),position:this.position,frontPosition:this.frontPosition,ui:this.ui,identifier:this.identifier,id:this.id,options:this.options},this.instance}w.prototype=new _,w.constructor=w,w.id=0,w.prototype.buildEl=function(t){return this.ui={},this.options.dataOnly?this:(this.ui.el=document.createElement(\"div\"),this.ui.back=document.createElement(\"div\"),this.ui.front=document.createElement(\"div\"),this.ui.el.className=\"nipple collection_\"+this.collection.id,this.ui.back.className=\"back\",this.ui.front.className=\"front\",this.ui.el.setAttribute(\"id\",\"nipple_\"+this.collection.id+\"_\"+this.id),this.ui.el.appendChild(this.ui.back),this.ui.el.appendChild(this.ui.front),this)},w.prototype.stylize=function(){if(this.options.dataOnly)return this;var t=this.options.fadeTime+\"ms\",i=function(t,i){var e=u(t);for(var o in e)e.hasOwnProperty(o)&&(e[o]=i);return e}(\"borderRadius\",\"50%\"),e=l(\"transition\",\"opacity\",t),o={};return o.el={position:\"absolute\",opacity:this.options.restOpacity,display:\"block\",zIndex:999},o.back={position:\"absolute\",display:\"block\",width:this.options.size+\"px\",height:this.options.size+\"px\",marginLeft:-this.options.size/2+\"px\",marginTop:-this.options.size/2+\"px\",background:this.options.color,opacity:\".5\"},o.front={width:this.options.size/2+\"px\",height:this.options.size/2+\"px\",position:\"absolute\",display:\"block\",marginLeft:-this.options.size/4+\"px\",marginTop:-this.options.size/4+\"px\",background:this.options.color,opacity:\".5\"},f(o.el,e),\"circle\"===this.options.shape&&f(o.back,i),f(o.front,i),this.applyStyles(o),this},w.prototype.applyStyles=function(t){for(var i in this.ui)if(this.ui.hasOwnProperty(i))for(var e in t[i])this.ui[i].style[e]=t[i][e];return this},w.prototype.addToDom=function(){return this.options.dataOnly||document.body.contains(this.ui.el)?this:(this.options.zone.appendChild(this.ui.el),this)},w.prototype.removeFromDom=function(){return this.options.dataOnly||!document.body.contains(this.ui.el)?this:(this.options.zone.removeChild(this.ui.el),this)},w.prototype.destroy=function(){clearTimeout(this.removeTimeout),clearTimeout(this.showTimeout),clearTimeout(this.restTimeout),this.trigger(\"destroyed\",this.instance),this.removeFromDom(),this.off()},w.prototype.show=function(t){var i=this;return i.options.dataOnly?i:(clearTimeout(i.removeTimeout),clearTimeout(i.showTimeout),clearTimeout(i.restTimeout),i.addToDom(),i.restCallback(),setTimeout(function(){i.ui.el.style.opacity=1},0),i.showTimeout=setTimeout(function(){i.trigger(\"shown\",i.instance),\"function\"==typeof t&&t.call(this)},i.options.fadeTime),i)},w.prototype.hide=function(t){var i=this;return i.options.dataOnly?i:(i.ui.el.style.opacity=i.options.restOpacity,clearTimeout(i.removeTimeout),clearTimeout(i.showTimeout),clearTimeout(i.restTimeout),i.removeTimeout=setTimeout(function(){var e=\"dynamic\"===i.options.mode?\"none\":\"block\";i.ui.el.style.display=e,\"function\"==typeof t&&t.call(i),i.trigger(\"hidden\",i.instance)},i.options.fadeTime),i.options.restJoystick&&i.setPosition(t,{x:0,y:0}),i)},w.prototype.setPosition=function(t,i){var e=this;e.frontPosition={x:i.x,y:i.y};var o=e.options.fadeTime+\"ms\",n={};n.front=l(\"transition\",[\"top\",\"left\"],o);var s={front:{}};s.front={left:e.frontPosition.x+\"px\",top:e.frontPosition.y+\"px\"},e.applyStyles(n),e.applyStyles(s),e.restTimeout=setTimeout(function(){\"function\"==typeof t&&t.call(e),e.restCallback()},e.options.fadeTime)},w.prototype.restCallback=function(){var t={};t.front=l(\"transition\",\"none\",\"\"),this.applyStyles(t),this.trigger(\"rested\",this.instance)},w.prototype.resetDirection=function(){this.direction={x:!1,y:!1,angle:!1}},w.prototype.computeDirection=function(t){var i,e,o,n=t.angle.radian,s=Math.PI/4,r=Math.PI/2;if(n>s&&n<3*s&&!t.lockX?i=\"up\":n>-s&&n<=s&&!t.lockY?i=\"left\":n>3*-s&&n<=-s&&!t.lockX?i=\"down\":t.lockY||(i=\"right\"),t.lockY||(e=n>-r&&n<r?\"left\":\"right\"),t.lockX||(o=n>0?\"up\":\"down\"),t.force>this.options.threshold){var d,a={};for(d in this.direction)this.direction.hasOwnProperty(d)&&(a[d]=this.direction[d]);var p={};for(d in this.direction={x:e,y:o,angle:i},t.direction=this.direction,a)a[d]===this.direction[d]&&(p[d]=!0);if(p.x&&p.y&&p.angle)return t;p.x&&p.y||this.trigger(\"plain\",t),p.x||this.trigger(\"plain:\"+e,t),p.y||this.trigger(\"plain:\"+o,t),p.angle||this.trigger(\"dir dir:\"+i,t)}else this.resetDirection();return t};var T=w;function k(t,i){return this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.pressureIntervals={},this.manager=t,this.id=k.id,k.id+=1,this.defaults={zone:document.body,multitouch:!1,maxNumberOfNipples:10,mode:\"dynamic\",position:{top:0,left:0},catchDistance:200,size:100,threshold:.1,color:\"white\",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:.5,lockX:!1,lockY:!1,shape:\"circle\",dynamicPage:!1},this.config(i),\"static\"!==this.options.mode&&\"semi\"!==this.options.mode||(this.options.multitouch=!1),this.options.multitouch||(this.options.maxNumberOfNipples=1),this.updateBox(),this.prepareNipples(),this.bindings(),this.begin(),this.nipples}k.prototype=new _,k.constructor=k,k.id=0,k.prototype.prepareNipples=function(){var t=this.nipples;t.on=this.on.bind(this),t.off=this.off.bind(this),t.options=this.options,t.destroy=this.destroy.bind(this),t.ids=this.ids,t.id=this.id,t.processOnMove=this.processOnMove.bind(this),t.processOnEnd=this.processOnEnd.bind(this),t.get=function(i){if(void 0===i)return t[0];for(var e=0,o=t.length;e<o;e+=1)if(t[e].identifier===i)return t[e];return!1}},k.prototype.bindings=function(){this.bindEvt(this.options.zone,\"start\"),this.options.zone.style.touchAction=\"none\",this.options.zone.style.msTouchAction=\"none\"},k.prototype.begin=function(){var t=this.options;if(\"static\"===t.mode){var i=this.createNipple(t.position,this.manager.getIdentifier());i.add(),this.idles.push(i)}},k.prototype.createNipple=function(t,i){var e=c(),o={},n=this.options;if(t.x&&t.y)o={x:t.x-(e.x+this.box.left),y:t.y-(e.y+this.box.top)};else if(t.top||t.right||t.bottom||t.left){var s=document.createElement(\"DIV\");s.style.display=\"hidden\",s.style.top=t.top,s.style.right=t.right,s.style.bottom=t.bottom,s.style.left=t.left,s.style.position=\"absolute\",n.zone.appendChild(s);var r=s.getBoundingClientRect();n.zone.removeChild(s),o=t,t={x:r.left+e.x,y:r.top+e.y}}var d=new T(this,{color:n.color,size:n.size,threshold:n.threshold,fadeTime:n.fadeTime,dataOnly:n.dataOnly,restJoystick:n.restJoystick,restOpacity:n.restOpacity,mode:n.mode,identifier:i,position:t,zone:n.zone,frontPosition:{x:0,y:0},shape:n.shape});return n.dataOnly||(h(d.ui.el,o),h(d.ui.front,d.frontPosition)),this.nipples.push(d),this.trigger(\"added \"+d.identifier+\":added\",d),this.manager.trigger(\"added \"+d.identifier+\":added\",d),this.bindNipple(d),d},k.prototype.updateBox=function(){this.box=this.options.zone.getBoundingClientRect()},k.prototype.bindNipple=function(t){var i,e=this,o=function(t,o){i=t.type+\" \"+o.id+\":\"+t.type,e.trigger(i,o)};t.on(\"destroyed\",e.onDestroyed.bind(e)),t.on(\"shown hidden rested dir plain\",o),t.on(\"dir:up dir:right dir:down dir:left\",o),t.on(\"plain:up plain:right plain:down plain:left\",o)},k.prototype.pressureFn=function(t,i,e){var o=this,n=0;clearInterval(o.pressureIntervals[e]),o.pressureIntervals[e]=setInterval(function(){var e=t.force||t.pressure||t.webkitForce||0;e!==n&&(i.trigger(\"pressure\",e),o.trigger(\"pressure \"+i.identifier+\":pressure\",e),n=e)}.bind(o),100)},k.prototype.onstart=function(t){var i=this,e=i.options,o=t;t=p(t),i.updateBox();return y(t,function(n){i.actives.length<e.maxNumberOfNipples?i.processOnStart(n):o.type.match(/^touch/)&&(Object.keys(i.manager.ids).forEach(function(e){if(Object.values(o.touches).findIndex(function(t){return t.identifier===e})<0){var n=[t[0]];n.identifier=e,i.processOnEnd(n)}}),i.actives.length<e.maxNumberOfNipples&&i.processOnStart(n))}),i.manager.bindDocument(),!1},k.prototype.processOnStart=function(t){var i,e=this,o=e.options,s=e.manager.getIdentifier(t),r=t.force||t.pressure||t.webkitForce||0,d={x:t.pageX,y:t.pageY},a=e.getOrCreate(s,d);a.identifier!==s&&e.manager.removeIdentifier(a.identifier),a.identifier=s;var p=function(i){i.trigger(\"start\",i),e.trigger(\"start \"+i.id+\":start\",i),i.show(),r>0&&e.pressureFn(t,i,i.identifier),e.processOnMove(t)};if((i=e.idles.indexOf(a))>=0&&e.idles.splice(i,1),e.actives.push(a),e.ids.push(a.identifier),\"semi\"!==o.mode)p(a);else{if(!(n(d,a.position)<=o.catchDistance))return a.destroy(),void e.processOnStart(t);p(a)}return a},k.prototype.getOrCreate=function(t,i){var e,o=this.options;return/(semi|static)/.test(o.mode)?(e=this.idles[0])?(this.idles.splice(0,1),e):\"semi\"===o.mode?this.createNipple(i,t):(console.warn(\"Coudln't find the needed nipple.\"),!1):e=this.createNipple(i,t)},k.prototype.processOnMove=function(t){var i=this.options,e=this.manager.getIdentifier(t),o=this.nipples.get(e);if(function(t){return isNaN(t.buttons)?0!==t.pressure:0!==t.buttons}(t)){if(!o)return console.error(\"Found zombie joystick with ID \"+e),void this.manager.removeIdentifier(e);if(i.dynamicPage){var d=c();p=o.el.getBoundingClientRect(),o.position={x:d.x+p.left,y:d.y+p.top}}o.identifier=e;var a=o.options.size/2,p={x:t.pageX,y:t.pageY};i.lockX&&(p.y=o.position.y),i.lockY&&(p.x=o.position.x);var l,u,f,y,m,v,g,b,x=n(p,o.position),O=(l=p,u=o.position,f=u.x-l.x,y=u.y-l.y,r(Math.atan2(y,f))),_=s(O),w=x/a,T={distance:x,position:p};\"circle\"===o.options.shape?(x=Math.min(x,a),m=o.position,v=x,b={x:0,y:0},g=s(g=O),b.x=m.x-v*Math.cos(g),b.y=m.y-v*Math.sin(g),p=b):(p=function(t,i,e){return{x:Math.min(Math.max(t.x,i.x-e),i.x+e),y:Math.min(Math.max(t.y,i.y-e),i.y+e)}}(p,o.position,a),x=n(p,o.position));var k=p.x-o.position.x,P=p.y-o.position.y;o.frontPosition={x:k,y:P},i.dataOnly||h(o.ui.front,o.frontPosition);var E={identifier:o.identifier,position:p,force:w,pressure:t.force||t.pressure||t.webkitForce||0,distance:x,angle:{radian:_,degree:O},vector:{x:k/a,y:-P/a},raw:T,instance:o,lockX:i.lockX,lockY:i.lockY};(E=o.computeDirection(E)).angle={radian:s(180-O),degree:180-O},o.trigger(\"move\",E),this.trigger(\"move \"+o.id+\":move\",E)}else this.processOnEnd(t)},k.prototype.processOnEnd=function(t){var i=this,e=i.options,o=i.manager.getIdentifier(t),n=i.nipples.get(o),s=i.manager.removeIdentifier(n.identifier);n&&(e.dataOnly||n.hide(function(){\"dynamic\"===e.mode&&(n.trigger(\"removed\",n),i.trigger(\"removed \"+n.id+\":removed\",n),i.manager.trigger(\"removed \"+n.id+\":removed\",n),n.destroy())}),clearInterval(i.pressureIntervals[n.identifier]),n.resetDirection(),n.trigger(\"end\",n),i.trigger(\"end \"+n.id+\":end\",n),i.ids.indexOf(n.identifier)>=0&&i.ids.splice(i.ids.indexOf(n.identifier),1),i.actives.indexOf(n)>=0&&i.actives.splice(i.actives.indexOf(n),1),/(semi|static)/.test(e.mode)?i.idles.push(n):i.nipples.indexOf(n)>=0&&i.nipples.splice(i.nipples.indexOf(n),1),i.manager.unbindDocument(),/(semi|static)/.test(e.mode)&&(i.manager.ids[s.id]=s.identifier))},k.prototype.onDestroyed=function(t,i){this.nipples.indexOf(i)>=0&&this.nipples.splice(this.nipples.indexOf(i),1),this.actives.indexOf(i)>=0&&this.actives.splice(this.actives.indexOf(i),1),this.idles.indexOf(i)>=0&&this.idles.splice(this.idles.indexOf(i),1),this.ids.indexOf(i.identifier)>=0&&this.ids.splice(this.ids.indexOf(i.identifier),1),this.manager.removeIdentifier(i.identifier),this.manager.unbindDocument()},k.prototype.destroy=function(){for(var t in this.unbindEvt(this.options.zone,\"start\"),this.nipples.forEach(function(t){t.destroy()}),this.pressureIntervals)this.pressureIntervals.hasOwnProperty(t)&&clearInterval(this.pressureIntervals[t]);this.trigger(\"destroyed\",this.nipples),this.manager.unbindDocument(),this.off()};var P=k;function E(t){var i,e=this;return e.ids={},e.index=0,e.collections=[],e.config(t),e.prepareCollections(),d(window,\"resize\",function(t){clearTimeout(i),i=setTimeout(function(){var t,i=c();e.collections.forEach(function(e){e.forEach(function(e){t=e.el.getBoundingClientRect(),e.position={x:i.x+t.left,y:i.y+t.top}})})},100)}),e.collections}E.prototype=new _,E.constructor=E,E.prototype.prepareCollections=function(){var t=this;t.collections.create=t.create.bind(t),t.collections.on=t.on.bind(t),t.collections.off=t.off.bind(t),t.collections.destroy=t.destroy.bind(t),t.collections.get=function(i){var e;return t.collections.every(function(t){return!(e=t.get(i))}),e}},E.prototype.create=function(t){return this.createCollection(t)},E.prototype.createCollection=function(t){var i=new P(this,t);return this.bindCollection(i),this.collections.push(i),i},E.prototype.bindCollection=function(t){var i,e=this,o=function(t,o){i=t.type+\" \"+o.id+\":\"+t.type,e.trigger(i,o)};t.on(\"destroyed\",e.onDestroyed.bind(e)),t.on(\"shown hidden rested dir plain\",o),t.on(\"dir:up dir:right dir:down dir:left\",o),t.on(\"plain:up plain:right plain:down plain:left\",o)},E.prototype.bindDocument=function(){this.binded||(this.bindEvt(document,\"move\").bindEvt(document,\"end\"),this.binded=!0)},E.prototype.unbindDocument=function(t){Object.keys(this.ids).length&&!0!==t||(this.unbindEvt(document,\"move\").unbindEvt(document,\"end\"),this.binded=!1)},E.prototype.getIdentifier=function(t){var i;return t?void 0===(i=void 0===t.identifier?t.pointerId:t.identifier)&&(i=this.latest||0):i=this.index,void 0===this.ids[i]&&(this.ids[i]=this.index,this.index+=1),this.latest=i,this.ids[i]},E.prototype.removeIdentifier=function(t){var i={};for(var e in this.ids)if(this.ids[e]===t){i.id=e,i.identifier=this.ids[e],delete this.ids[e];break}return i},E.prototype.onmove=function(t){return this.onAny(\"move\",t),!1},E.prototype.onend=function(t){return this.onAny(\"end\",t),!1},E.prototype.oncancel=function(t){return this.onAny(\"end\",t),!1},E.prototype.onAny=function(t,i){var e,o=this,n=\"processOn\"+t.charAt(0).toUpperCase()+t.slice(1);i=p(i);return y(i,function(t){e=o.getIdentifier(t),y(o.collections,function(t,i,e){e.ids.indexOf(i)>=0&&(e[n](t),t._found_=!0)}.bind(null,t,e)),t._found_||o.removeIdentifier(e)}),!1},E.prototype.destroy=function(){this.unbindDocument(!0),this.ids={},this.index=0,this.collections.forEach(function(t){t.destroy()}),this.off()},E.prototype.onDestroyed=function(t,i){if(this.collections.indexOf(i)<0)return!1;this.collections.splice(this.collections.indexOf(i),1)};var I=new E;i.default={create:function(t){return I.create(t)},factory:I}}]).default});","let waiting_timer = undefined;\nlet notif_queue = [];\n\nfunction notif(notif_c) {\n let notification_area = document.querySelector(\".statusline .notification-area\");\n\n if ((notification_area.querySelector(\".notification\") === null) && (waiting_timer === undefined)) {\n // This is just so no notifications will be played and disappears while the full screen landscape warning is in the way.\n if( (screen.availHeight > screen.availWidth) && (!document.body.classList.contains(\"ignore-landscape-warning\"))){\n waiting_timer = setInterval(() => {\n if( (screen.availHeight < screen.availWidth) || (document.body.classList.contains(\"ignore-landscape-warning\"))){\n clearInterval(waiting_timer);\n waiting_timer = undefined;\n notif(notif_queue.pop());\n }\n }, 1000);\n notif_queue.push(notif_c);\n return;\n }\n\n let notif_elem = document.createElement(\"div\");\n notif_elem.className = \"notification\";\n notif_elem.appendChild(notif_c[0]);\n notif_elem.appendChild(notif_c[1]);\n\n notification_area.appendChild(notif_elem);\n\n setTimeout(() => {\n notification_area.removeChild(notif_elem);\n if (notif_queue.length > 0) {\n notif(notif_queue.pop());\n }\n }, 5000);\n } else {\n notif_queue.push(notif_c);\n }\n}\n\nexport function notif_alert(alert_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = alert_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"alert fas fa-exclamation-triangle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n\nexport function notif_warn(alert_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = alert_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"warning fas fa-exclamation-triangle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n\nexport function notif_info(info_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = info_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"info fas fa-info-circle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n\nexport function notif_success(success_str) {\n let div = document.createElement(\"div\");\n div.className = \"notification-content\";\n\n let text = document.createElement(\"p\");\n text.innerHTML = success_str;\n div.appendChild(text);\n\n let icon = document.createElement(\"i\");\n icon.className = \"success fas fa-check-circle\";\n div.appendChild(icon);\n\n notif([icon, div]);\n}\n","import { notif_alert, notif_warn, notif_info, notif_success } from './notification';\n\nlet n = 0;\n\nexport default class hoverControlModule {\n #throttle = 0;\n #throttleAcc = 0;\n #rudder = 0;\n #rudderAcc = 0;\n #arm = 0;\n #armAcc = 0;\n\n constructor() {}\n\n acc(accString) {\n accString.match(/[A-Z][-,0-9]+/g).forEach((item, i) => {\n switch (item.substring(0, 1)) {\n case \"T\":\n this.#throttleAcc = parseInt(item.substring(1, item.length));\n break;\n case \"R\":\n this.#rudderAcc = parseInt(item.substring(1, item.length));\n break;\n case \"A\":\n this.#armAcc = parseInt(item.substring(1, item.length)) == 1;\n if (this.#armAcc) {\n document.body.classList.add(\"armed\");\n } else {\n document.body.classList.remove(\"armed\");\n }\n break;\n case \"S\":\n break;\n default:\n console.log(`Unkown acc: ${item}`);\n }\n });\n document.querySelector(\".acc-string pre\").innerHTML = `T: ${this.#throttleAcc}, R: ${this.#rudderAcc}, ${n}`;\n n++;\n }\n\n reset() {\n this.setArm(0);\n this.setThrottle(0);\n this.setRudder(0);\n }\n\n setThrottle(throttle) {\n if (!this.#armAcc) { return; }\n if (throttle > 100) { throttle = 100; }\n if (throttle < 0) { throttle = 0; }\n this.#throttle = throttle;\n }\n getThrottle() {\n return this.#throttle;\n }\n\n setRudder(rudder) {\n if (!this.#armAcc) { return; }\n if (rudder > 90) { rudder = 90; }\n if (rudder < -90) { rudder = -90; }\n this.#rudder = rudder;\n }\n getRudder() {\n return this.#rudder;\n }\n\n setArm(arm) {\n this.#arm = arm;\n if (!this.#arm) {\n this.#throttle = 0;\n this.#rudder = 0;\n }\n }\n getArm() {\n return this.#arm;\n }\n}\n","/*\n * This code is written with a lot of help from these resources:\n * https://github.com/antefact/microBit.js/blob/master/src/microBit.js\n * https://gist.github.com/kotobuki/7c67f8b9361e08930da1a5cfcfb0653f\n * https://lancaster-university.github.io/microbit-docs/resources/bluetooth/bluetooth_profile.html\n */\nconst UART_SERVICE_UUID = \"6e400001-b5a3-f393-e0a9-e50e24dcca9e\";\nconst UART_TX_CHARACTERISTIC_UUID = \"6e400002-b5a3-f393-e0a9-e50e24dcca9e\";\nconst UART_RX_CHARACTERISTIC_UUID = \"6e400003-b5a3-f393-e0a9-e50e24dcca9e\";\n\nexport default class uBitBLE {\n\n constructor() {\n let device;\n\n this.onConnectCallback = function() {};\n this.onDisconnectCallback = function() {};\n this.onUartTxCallback = function() {};\n\n this.characteristic = {\n UART_RX: {},\n UART_TX: {}\n }\n }\n\n onConnect(callbackFunction) {\n this.onConnectCallback = callbackFunction;\n }\n\n onDisconnect(callbackFunction) {\n this.onDisconnectCallback = callbackFunction;\n }\n\n onUartTx(callbackFunction) {\n this.onUartTxCallback = callbackFunction;\n }\n\n sendUart(string) {\n if (this.isConnected() && this.characteristic.UART_RX) {\n let encoder = new TextEncoder();\n this.characteristic.UART_RX.writeValue(\n encoder.encode(string)\n ).catch(error => {\n console.log(error);\n });\n }\n }\n\n isConnected() {\n if (this.device) {\n return this.device.gatt.connected;\n } else {\n return false;\n }\n }\n\n disconnect() {\n if (this.isConnected()) {\n this.device.gatt.disconnect();\n }\n }\n\n searchDevice() {\n navigator.bluetooth.requestDevice({\n filters: [{namePrefix: \"BBC micro:bit\"}],\n optionalServices: [UART_SERVICE_UUID]\n })\n .then(device => {\n console.log('> Name: ' + device.name);\n console.log('> Id: ' + device.id);\n this.device = device;\n\n device.addEventListener('gattserverdisconnected', this.onDisconnectCallback);\n\n // Attempts to connect to remote GATT Server.\n return device.gatt.connect();\n })\n .then(server => {\n // Note that we could also get all services that match a specific UUID by\n // passing it to getPrimaryServices().\n this.onConnectCallback();\n console.log('Getting Services...');\n return server.getPrimaryServices();\n })\n .then(services => {\n console.log('Getting Characteristics...');\n let queue = Promise.resolve();\n services.forEach(service => {\n queue = queue.then(_ => service.getCharacteristics().then(characteristics => {\n console.log('> Service: ' + service.uuid);\n characteristics.forEach(characteristic => {\n console.log('>> Characteristic: ' + characteristic.uuid + ' ' +\n getSupportedProperties(characteristic));\n switch (characteristic.uuid) {\n case UART_RX_CHARACTERISTIC_UUID:\n this.characteristic.UART_RX = characteristic;\n break;\n \n case UART_TX_CHARACTERISTIC_UUID:\n this.characteristic.UART_TX = characteristic;\n this.characteristic.UART_TX.startNotifications();\n this.characteristic.UART_TX.addEventListener(\n \"characteristicvaluechanged\",\n (event) => { this.onUartTxCallback(eventByteArrayToString(event)) }\n );\n break;\n\n default:\n }\n });\n }));\n });\n return queue;\n })\n .catch(error => {\n console.log('Argh! ' + error);\n });\n }\n\n}\n\nfunction getSupportedProperties(characteristic) {\n let supportedProperties = [];\n for (const p in characteristic.properties) {\n if (characteristic.properties[p] === true) {\n supportedProperties.push(p.toUpperCase());\n }\n }\n return '[' + supportedProperties.join(', ') + ']';\n}\n\nfunction eventByteArrayToString(event) {\n let receivedData = [];\n for (var i = 0; i < event.target.value.byteLength; i++) {\n receivedData[i] = event.target.value.getUint8(i);\n }\n return String.fromCharCode.apply(null, receivedData);\n}\n","import nipplejs from 'nipplejs';\nimport hoverControlModule from './hoverControlModule';\nimport uBitBLE from \"./uBit\";\nimport { notif_alert, notif_warn, notif_info, notif_success } from './notification';\n\nlet sw = \"service-worker.js\";\nif (navigator.serviceWorker) {\n navigator.serviceWorker.register(\n sw, {scope: '/hoverbit-ble/'}\n ).then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) { return; }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n notif_info(\"New content is available, relaunch the app to install it.\");\n } else {\n notif_success(\"Content is cached for offline use.\");\n }\n }\n };\n };\n registration.update();\n }).catch(error => {\n notif_alert(\"Could not install service worker...\");\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\ndocument.getElementById(\"btn_ignore_landscape_warning\").addEventListener(\"click\", () => {\n document.body.classList.add(\"ignore-landscape-warning\");\n});\n\nif (!navigator.bluetooth) {\n alert(\"Bluetooth not enabled in your browser, this won't work...\");\n}\n\n/* Define and initialize things */\nlet ubit = new uBitBLE();\nlet hoverControl = new hoverControlModule();\n\nlet joystickLeft = nipplejs.create({\n zone: document.querySelector(\".joystick-left\"),\n size: 200,\n position: {left: '50%', bottom: '50%'},\n mode: \"static\",\n lockX: true\n});\nlet joystickRight = nipplejs.create({\n zone: document.querySelector(\".joystick-right\"),\n size: 200,\n position: {left: '50%', bottom: '50%'},\n mode: \"static\",\n lockY: true\n});\n\n/* Setup event_listeners */\njoystickLeft.on(\"move\", (evt, data) => {\n let rudder = ((data.distance * 90) / 100);\n if (data.angle.degree > 90) { rudder = rudder * -1; }\n hoverControl.setRudder(Math.round(rudder));\n});\njoystickLeft.on(\"end\", (evt, data) => {\n hoverControl.setRudder(0);\n});\n\njoystickRight.on(\"move\", (evt, data) => {\n let throttle = data.distance;\n\n if (data.angle.degree > 90) {\n throttle = 0;\n if (data.distance >= 100) {\n hoverControl.reset();\n if (hoverControl.getArm()) {\n notif_alert(\"Detected panicy reducing of throttle, dearming...\");\n }\n }\n }\n hoverControl.setThrottle(Math.round(throttle));\n});\njoystickRight.on(\"end\", (evt, data) => {\n hoverControl.setThrottle(0);\n});\n\ndocument.getElementById(\"btn_arm\").addEventListener(\"click\", () => {\n hoverControl.setArm(true);\n});\n\ndocument.getElementById(\"btn_disarm\").addEventListener(\"click\", () => {\n hoverControl.setArm(false);\n});\n\ndocument.querySelector(\"#btn_disconnect\").addEventListener(\"click\", () => {\n hoverControl.reset();\n ubit.disconnect();\n});\n\ndocument.getElementById(\"btn_connect\").addEventListener(\"click\", () => {\n ubit.searchDevice();\n});\n\nubit.onConnect(() => {\n document.body.classList.add(\"connected\");\n});\n\nubit.onDisconnect(() => {\n document.body.classList.remove(\"connected\");\n document.body.classList.remove(\"armed\");\n});\n\nubit.onUartTx((text) => {\n /* Just make the ping symbol reappear. */\n var elm = document.querySelector(\".ping i\");\n var newone = elm.cloneNode(true);\n elm.parentNode.replaceChild(newone, elm);\n\n /* Actually handle received text. */\n if ((text).indexOf(\":\") != -1) {\n let parts = (text).split(\":\");\n\n if (parts[0] == \"B\") {\n document.querySelector(\".battery-status\").innerHTML = parts[1] + \"mV\";\n } else if (parts[0] == \"ACC\") {\n hoverControl.acc(parts[1]);\n } else {\n console.log(parts);\n }\n } else {\n notif_warn(\"Received weird data from MICRO:BIT...\");\n console.log(`Received unknown: ${text}`);\n }\n});\n\nlet intervalSendCommands = setInterval(async() => {\n if (ubit.isConnected()) {\n let command =\n \"T\" + hoverControl.getThrottle().toString() +\n \"R\" + hoverControl.getRudder().toString() +\n \"A\" + (hoverControl.getArm() ? \"1\" : \"0\") +\n \"S0\" +\n \":\";\n await ubit.sendUart(command);\n }\n}, 100);\n\n"]}
\ No newline at end of file diff --git a/service-worker.js b/service-worker.js index e38ee78..6a5ef53 100644 --- a/service-worker.js +++ b/service-worker.js @@ -1,7 +1,7 @@ var APP_PREFIX = 'hoverbitcontroller' // Identifier for this app (this needs to be consistent across every cache update) -var VERSION = '1.1.1' // Version of the off-line cache (change this value everytime you want to update cache) +var VERSION = '1.1.1-alpha.1' // Version of the off-line cache (change this value everytime you want to update cache) var CACHE_NAME = APP_PREFIX + VERSION -var URLS = ['/hoverbit-ble/','/hoverbit-ble/fa-brands-400.0a2f2d3f.woff2','/hoverbit-ble/fa-brands-400.529a9178.svg','/hoverbit-ble/fa-brands-400.61a02662.eot','/hoverbit-ble/fa-brands-400.a43d027d.ttf','/hoverbit-ble/fa-brands-400.abaa6551.woff','/hoverbit-ble/fa-regular-400.12e902ff.woff2','/hoverbit-ble/fa-regular-400.4fc407aa.svg','/hoverbit-ble/fa-regular-400.779979e6.woff','/hoverbit-ble/fa-regular-400.b26d94f4.eot','/hoverbit-ble/fa-regular-400.d59f1e49.ttf','/hoverbit-ble/fa-solid-900.26506ae2.svg','/hoverbit-ble/fa-solid-900.50887a69.woff','/hoverbit-ble/fa-solid-900.6c3fc37b.eot','/hoverbit-ble/fa-solid-900.be8a4f74.woff2','/hoverbit-ble/fa-solid-900.f6ec8168.ttf','/hoverbit-ble/index.html','/hoverbit-ble/main.ea7a67f6.js','/hoverbit-ble/main.ea7a67f6.js.map','/hoverbit-ble/maskable_icon_x128.ae1e74f9.png','/hoverbit-ble/maskable_icon_x144.fc14e37c.png','/hoverbit-ble/maskable_icon_x152.ce6c1441.png','/hoverbit-ble/maskable_icon_x384.1af8edb2.png','/hoverbit-ble/maskable_icon_x512.a9ac38fa.png','/hoverbit-ble/maskable_icon_x72.b43d35ec.png','/hoverbit-ble/maskable_icon_x96.e03bc2e8.png','/hoverbit-ble/pwa-192x192.b3dbd8bb.png','/hoverbit-ble/pwa-512x512.b27071b7.png','/hoverbit-ble/service-worker.js','/hoverbit-ble/styles.6ffd6063.css','/hoverbit-ble/styles.6ffd6063.css.map'] // This will be replaced by the deploy-script +var URLS = ['/hoverbit-ble/','/hoverbit-ble/fa-brands-400.0a2f2d3f.woff2','/hoverbit-ble/fa-brands-400.529a9178.svg','/hoverbit-ble/fa-brands-400.61a02662.eot','/hoverbit-ble/fa-brands-400.a43d027d.ttf','/hoverbit-ble/fa-brands-400.abaa6551.woff','/hoverbit-ble/fa-regular-400.12e902ff.woff2','/hoverbit-ble/fa-regular-400.4fc407aa.svg','/hoverbit-ble/fa-regular-400.779979e6.woff','/hoverbit-ble/fa-regular-400.b26d94f4.eot','/hoverbit-ble/fa-regular-400.d59f1e49.ttf','/hoverbit-ble/fa-solid-900.26506ae2.svg','/hoverbit-ble/fa-solid-900.50887a69.woff','/hoverbit-ble/fa-solid-900.6c3fc37b.eot','/hoverbit-ble/fa-solid-900.be8a4f74.woff2','/hoverbit-ble/fa-solid-900.f6ec8168.ttf','/hoverbit-ble/index.html','/hoverbit-ble/main.56096069.js','/hoverbit-ble/main.56096069.js.map','/hoverbit-ble/maskable_icon_x128.ae1e74f9.png','/hoverbit-ble/maskable_icon_x144.fc14e37c.png','/hoverbit-ble/maskable_icon_x152.ce6c1441.png','/hoverbit-ble/maskable_icon_x384.1af8edb2.png','/hoverbit-ble/maskable_icon_x512.a9ac38fa.png','/hoverbit-ble/maskable_icon_x72.b43d35ec.png','/hoverbit-ble/maskable_icon_x96.e03bc2e8.png','/hoverbit-ble/pwa-192x192.b3dbd8bb.png','/hoverbit-ble/pwa-512x512.b27071b7.png','/hoverbit-ble/service-worker.js','/hoverbit-ble/styles.6ffd6063.css','/hoverbit-ble/styles.6ffd6063.css.map'] // This will be replaced by the deploy-script // Respond with cached resources self.addEventListener('fetch', function (e) { |