diff options
| author | Adam Soltys <[email protected]> | 2014-07-15 19:29:28 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2014-07-15 19:29:28 -0700 |
| commit | 4b3d22ca698eac7d82b5ff5f5bea8f8d1e568eac (patch) | |
| tree | 445b7d2e2c96fd2fa5a6d58dd1c45a5dee9bbb3e /public/js/webqr.js | |
| parent | 42a06c45973b57a7a486b779373056b4e6d21c8c (diff) | |
| download | coinos-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.js | 134 |
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, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'); +} + +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); +} |
