diff --git a/.gitignore b/.gitignore index a72b52e..23e7472 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ results npm-debug.log node_modules +bower_components diff --git a/bower.json b/bower.json index bc0e1d2..fd78d13 100644 --- a/bower.json +++ b/bower.json @@ -1,12 +1,15 @@ { "name": "angular-qr-scanner", - "version": "0.1.0", + "version": "0.1.1", "homepage": "https://github.com/sembrestels/angular-qr-scanner", "authors": [ "Sem " ], "description": "QR scanner angular directive", - "main": "./qr-scanner.js", + "main": [ + "./qr-scanner.js", + "./src/jsqrcode-combined.min.js" + ], "keywords": [ "angular", "qr", diff --git a/qr-scanner.js b/qr-scanner.js index 6f3a309..7dd14dc 100644 --- a/qr-scanner.js +++ b/qr-scanner.js @@ -1,8 +1,3 @@ -if (require){ - if (!angular) var angular = require('angular'); - if (!qrcode) var qrcode = require('jsqrcode'); -} - (function() { 'use strict'; @@ -15,28 +10,29 @@ angular.module('qrScanner', ["ng"]).directive('qrScanner', ['$interval', '$windo ngVideoError: '&ngVideoError' }, link: function(scope, element, attrs) { - + window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL; navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; - + var height = attrs.height || 300; var width = attrs.width || 250; - + var video = $window.document.createElement('video'); video.setAttribute('width', width); video.setAttribute('height', height); + video.setAttribute('autoplay', ''); video.setAttribute('style', '-moz-transform:rotateY(-180deg);-webkit-transform:rotateY(-180deg);transform:rotateY(-180deg);'); var canvas = $window.document.createElement('canvas'); canvas.setAttribute('id', 'qr-canvas'); canvas.setAttribute('width', width); canvas.setAttribute('height', height); - canvas.setAttribute('style', 'display:none;'); - + canvas.setAttribute('style', 'display:none;'); + angular.element(element).append(video); angular.element(element).append(canvas); - var context = canvas.getContext('2d'); + var context = canvas.getContext('2d'); var stopScan; - + var scan = function() { if ($window.localMediaStream) { context.drawImage(video, 0, 0, 307,250); @@ -46,7 +42,7 @@ angular.module('qrScanner', ["ng"]).directive('qrScanner', ['$interval', '$windo scope.ngError({error: e}); } } - } + }; var successCallback = function(stream) { video.src = (window.URL && window.URL.createObjectURL(stream)) || stream; @@ -55,7 +51,7 @@ angular.module('qrScanner', ["ng"]).directive('qrScanner', ['$interval', '$windo scope.video = video; video.play(); stopScan = $interval(scan, 500); - } + }; // Call the getUserMedia method with our callback functions if (navigator.getUserMedia) { @@ -72,13 +68,20 @@ angular.module('qrScanner', ["ng"]).directive('qrScanner', ['$interval', '$windo element.bind('$destroy', function() { if ($window.localMediaStream) { - $window.localMediaStream.stop(); + if ($window.localMediaStream.stop) { + $window.localMediaStream.stop(); + } else if ($window.localMediaStream.getVideoTracks) { + var videoTracks = $window.localMediaStream.getVideoTracks(); + if (videoTracks && videoTracks.length > 0) { + videoTracks[0].stop(); + } + } } if (stopScan) { $interval.cancel(stopScan); } }); } - } + }; }]); })();