aboutsummaryrefslogtreecommitdiffstats
path: root/public/js/webqr.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2014-07-15 19:29:28 -0700
committerAdam Soltys <[email protected]>2014-07-15 19:29:28 -0700
commit4b3d22ca698eac7d82b5ff5f5bea8f8d1e568eac (patch)
tree445b7d2e2c96fd2fa5a6d58dd1c45a5dee9bbb3e /public/js/webqr.js
parent42a06c45973b57a7a486b779373056b4e6d21c8c (diff)
downloadcoinos-server-4b3d22ca698eac7d82b5ff5f5bea8f8d1e568eac.tar.gz
coinos-server-4b3d22ca698eac7d82b5ff5f5bea8f8d1e568eac.zip
Create a page with a QR scanner for sweeping paper wallets
Diffstat (limited to 'public/js/webqr.js')
-rw-r--r--public/js/webqr.js134
1 files changed, 134 insertions, 0 deletions
diff --git a/public/js/webqr.js b/public/js/webqr.js
new file mode 100644
index 00000000..06f85b18
--- /dev/null
+++ b/public/js/webqr.js
@@ -0,0 +1,134 @@
+// QRCODE reader Copyright 2011 Lazar Laszlo
+// http://www.webqr.com
+
+var gCtx = null;
+var gCanvas = null;
+var c=0;
+var stype=0;
+var gUM=false;
+var webkit=false;
+var moz=false;
+var v=null;
+
+var vidhtml = '<video id="v" width="300" height="300" autoplay></video>';
+
+$(function() {
+ load();
+});
+
+function initCanvas(w,h)
+{
+ gCanvas = document.getElementById("qr-canvas");
+ gCanvas.style.width = w + "px";
+ gCanvas.style.height = h + "px";
+ gCanvas.width = w;
+ gCanvas.height = h;
+ gCtx = gCanvas.getContext("2d");
+ gCtx.clearRect(0, 0, w, h);
+}
+
+
+function captureToCanvas() {
+ if(stype!=1)
+ return;
+ if(gUM)
+ {
+ try{
+ gCtx.drawImage(v,0,0);
+ try{
+ qrcode.decode();
+ }
+ catch(e){
+ console.log(e);
+ setTimeout(captureToCanvas, 500);
+ };
+ }
+ catch(e){
+ console.log(e);
+ setTimeout(captureToCanvas, 500);
+ };
+ }
+}
+
+function htmlEntities(str) {
+ return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
+}
+
+function read(a)
+{
+ var html="<br>";
+ html+="<b>"+htmlEntities(a)+"</b><br><br>";
+ document.getElementById("result").innerHTML=html;
+}
+
+function isCanvasSupported(){
+ var elem = document.createElement('canvas');
+ return !!(elem.getContext && elem.getContext('2d'));
+}
+function success(stream) {
+ if(webkit)
+ v.src = window.webkitURL.createObjectURL(stream);
+ else
+ if(moz)
+ {
+ v.mozSrcObject = stream;
+ v.play();
+ }
+ else
+ v.src = stream;
+ gUM=true;
+ setTimeout(captureToCanvas, 500);
+}
+
+function error(error) {
+ gUM=false;
+ return;
+}
+
+function load()
+{
+ if(isCanvasSupported() && window.File && window.FileReader)
+ {
+ initCanvas(800, 800);
+ qrcode.callback = read;
+ setwebcam();
+ }
+ else
+ {
+ document.getElementById("mainbody").style.display="inline";
+ document.getElementById("mainbody").innerHTML='<p id="mp1">QR code scanner for HTML5 capable browsers</p><br>'+
+ '<br><p id="mp2">sorry your browser is not supported</p><br><br>'+
+ '<p id="mp1">try <a href="http://www.mozilla.com/firefox"><img src="firefox.png"/></a> or <a href="http://chrome.google.com"><img src="chrome_logo.gif"/></a> or <a href="http://www.opera.com"><img src="Opera-logo.png"/></a></p>';
+ }
+}
+
+function setwebcam()
+{
+ document.getElementById("result").innerHTML="- scanning -";
+ if(stype==1)
+ {
+ setTimeout(captureToCanvas, 500);
+ return;
+ }
+ var n=navigator;
+ document.getElementById("outdiv").innerHTML = vidhtml;
+ v=document.getElementById("v");
+
+ if(n.getUserMedia)
+ n.getUserMedia({video: true, audio: false}, success, error);
+ else
+ if(n.webkitGetUserMedia)
+ {
+ webkit=true;
+ n.webkitGetUserMedia({video: true, audio: false}, success, error);
+ }
+ else
+ if(n.mozGetUserMedia)
+ {
+ moz=true;
+ n.mozGetUserMedia({video: true, audio: false}, success, error);
+ }
+
+ stype=1;
+ setTimeout(captureToCanvas, 500);
+}