From c0f97a5707c654542263d9a50fd0a2fc5047730f Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Wed, 5 Jul 2017 00:04:52 -0600 Subject: [PATCH] Add in-app barcode scanning support (close #7) --- www/css/sidemenu.css | 8 ++++++++ www/js/sidemenu.js | 17 +++++++++++++++++ www/views/app.html | 37 ++++++++++++++++++++++++++++++++++--- 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/www/css/sidemenu.css b/www/css/sidemenu.css index 9b71dae..2e668c9 100644 --- a/www/css/sidemenu.css +++ b/www/css/sidemenu.css @@ -13,6 +13,14 @@ visibility: hidden; } +.mobile-app-show { + visibility: visible; +} + +.mobile-app-display { + display: initial; +} + @media screen and (max-width: 767px) { #navbar-collapse { display: none; diff --git a/www/js/sidemenu.js b/www/js/sidemenu.js index d0d6771..9d6a1c9 100644 --- a/www/js/sidemenu.js +++ b/www/js/sidemenu.js @@ -91,8 +91,25 @@ $(document).ready(function () { Hammer(document.body).on("swipeleft", function (e) { closemenu(); }); + + window.addEventListener('message', function (event) { + if (event.data.startsWith("coderesult~|~")) { + var data = event.data.split("~|~"); + var ref = data[1]; + var code = data[2]; + $(ref).val(code); + $(ref).trigger("input"); + $(ref).trigger("change"); + console.log("app: received " + event.data); + } + }); }); function quitapp() { parent.postMessage('quit','*'); +} + +function scancode(refstring) { + console.log("app: sent scancode " + refstring); + parent.postMessage('scancode ' + refstring, "*"); } \ No newline at end of file diff --git a/www/views/app.html b/www/views/app.html index 7150f67..9edd3db 100644 --- a/www/views/app.html +++ b/www/views/app.html @@ -56,9 +56,10 @@ openscreen("home"); }); } - + + var scanningactive = false; window.addEventListener('message', function (event) { - console.log(event.data); + console.log("app event: " + event.data); if (event.data == "quit") { openscreen("home"); } else if (event.data.startsWith("setcolor ")) { @@ -74,9 +75,39 @@ } else { StatusBar.backgroundColorByHexString(color); } + } else if (event.data.startsWith("scancode ")) { + var callbackcode = event.data.split(" ").slice(1).join(" "); + console.log("got scancode " + callbackcode); + try { + if (scanningactive) { + console.log("Scanner already active, ignoring request."); + return; + } + scanningactive = true; + cordova.plugins.barcodeScanner.scan( + function (result) { + scanningactive = false; + if (!result.cancelled) { + var iframe = document.getElementById("appframe"); + iframe.contentWindow.postMessage("coderesult~|~" + callbackcode + "~|~" + result.text, "*"); + } + }, + function (error) { + scanningactive = false; + navigator.notification.alert("Scanning failed: " + error, null, "Error", 'Dismiss'); + }, + { + "showFlipCameraButton": true, + "prompt": "Scan Code" + } + ); + } catch (ex) { + scanningactive = false; + navigator.notification.alert(ex.message, null, "Error", 'Dismiss'); + } } }, false); - + if (userinfo == null) { getuserinfo(); }