From b67354063857eea844a129cb87a33998866339e6 Mon Sep 17 00:00:00 2001
From: Kosta Korenkov <7r0ggy@gmail.com>
Date: Thu, 23 Jul 2015 11:48:28 +0300
Subject: [PATCH] Create qrScanner directive
---
public/views/includes/topbar.html | 3 +-
src/js/controllers/topbar.js | 128 --------------------------
src/js/directives/qrScanner.js | 145 ++++++++++++++++++++++++++++++
3 files changed, 146 insertions(+), 130 deletions(-)
create mode 100644 src/js/directives/qrScanner.js
diff --git a/public/views/includes/topbar.html b/public/views/includes/topbar.html
index d655c0008..6fc69dac5 100644
--- a/public/views/includes/topbar.html
+++ b/public/views/includes/topbar.html
@@ -15,8 +15,7 @@
diff --git a/src/js/controllers/topbar.js b/src/js/controllers/topbar.js
index deb1a8262..1a15a91c0 100644
--- a/src/js/controllers/topbar.js
+++ b/src/js/controllers/topbar.js
@@ -1,134 +1,6 @@
'use strict';
angular.module('copayApp.controllers').controller('topbarController', function($rootScope, $scope, $timeout, $modal, isCordova, isMobile, go) {
- var cordovaOpenScanner = function() {
- window.ignoreMobilePause = true;
- window.plugins.spinnerDialog.show(null, 'Preparing camera...', true);
- $timeout(function() {
- cordova.plugins.barcodeScanner.scan(
- function onSuccess(result) {
- $timeout(function() {
- window.plugins.spinnerDialog.hide();
- window.ignoreMobilePause = false;
- }, 100);
- if (result.cancelled) return;
-
- $timeout(function() {
- var data = result.text;
- $rootScope.$emit('dataScanned', data);
- }, 1000);
- },
- function onError(error) {
- $timeout(function() {
- window.ignoreMobilePause = false;
- window.plugins.spinnerDialog.hide();
- }, 100);
- alert('Scanning error');
- }
- );
- go.send();
- }, 100);
- };
-
- var modalOpenScanner = function() {
- var _scope = $scope;
- var ModalInstanceCtrl = function($scope, $rootScope, $modalInstance) {
- // QR code Scanner
- var video;
- var canvas;
- var $video;
- var context;
- var localMediaStream;
-
- var _scan = function(evt) {
- if (localMediaStream) {
- context.drawImage(video, 0, 0, 300, 225);
- try {
- qrcode.decode();
- } catch (e) {
- //qrcodeError(e);
- }
- }
- $timeout(_scan, 500);
- };
-
- var _scanStop = function() {
- if (localMediaStream && localMediaStream.stop) localMediaStream.stop();
- localMediaStream = null;
- video.src = '';
- };
-
- qrcode.callback = function(data) {
- _scanStop();
- $modalInstance.close(data);
- };
-
- var _successCallback = function(stream) {
- video.src = (window.URL && window.URL.createObjectURL(stream)) || stream;
- localMediaStream = stream;
- video.play();
- $timeout(_scan, 1000);
- };
-
- var _videoError = function(err) {
- $scope.cancel();
- };
-
- var setScanner = function() {
- navigator.getUserMedia = navigator.getUserMedia ||
- navigator.webkitGetUserMedia || navigator.mozGetUserMedia ||
- navigator.msGetUserMedia;
- window.URL = window.URL || window.webkitURL ||
- window.mozURL || window.msURL;
- };
-
- $scope.init = function() {
- setScanner();
- $timeout(function() {
- go.send();
- canvas = document.getElementById('qr-canvas');
- context = canvas.getContext('2d');
-
-
- video = document.getElementById('qrcode-scanner-video');
- $video = angular.element(video);
- canvas.width = 300;
- canvas.height = 225;
- context.clearRect(0, 0, 300, 225);
-
- navigator.getUserMedia({
- video: true
- }, _successCallback, _videoError);
- }, 500);
- };
-
- $scope.cancel = function() {
- _scanStop();
- $modalInstance.dismiss('cancel');
- };
- };
-
- var modalInstance = $modal.open({
- templateUrl: 'views/modals/scanner.html',
- windowClass: 'full',
- controller: ModalInstanceCtrl,
- backdrop : 'static',
- keyboard: false
- });
- modalInstance.result.then(function(data) {
- $rootScope.$emit('dataScanned', data);
- });
-
- };
-
- this.openScanner = function() {
- if (isCordova) {
- cordovaOpenScanner();
- }
- else {
- modalOpenScanner();
- }
- };
this.goHome = function() {
go.walletHome();
diff --git a/src/js/directives/qrScanner.js b/src/js/directives/qrScanner.js
new file mode 100644
index 000000000..52feeef15
--- /dev/null
+++ b/src/js/directives/qrScanner.js
@@ -0,0 +1,145 @@
+'use strict';
+
+angular.module('copayApp.directives')
+ .directive('qrScanner', ['$rootScope', '$timeout', '$modal', 'isCordova', 'isMobile', 'go',
+ function($rootScope, $timeout, $modal, isCordova, isMobile, go) {
+
+ var controller = function($scope) {
+
+ $scope.cordovaOpenScanner = function() {
+ window.ignoreMobilePause = true;
+ window.plugins.spinnerDialog.show(null, 'Preparing camera...', true);
+ $timeout(function() {
+ cordova.plugins.barcodeScanner.scan(
+ function onSuccess(result) {
+ $timeout(function() {
+ window.plugins.spinnerDialog.hide();
+ window.ignoreMobilePause = false;
+ }, 100);
+ if (result.cancelled) return;
+
+ $timeout(function() {
+ var data = result.text;
+ $rootScope.$emit('dataScanned', data);
+ }, 1000);
+ },
+ function onError(error) {
+ $timeout(function() {
+ window.ignoreMobilePause = false;
+ window.plugins.spinnerDialog.hide();
+ }, 100);
+ alert('Scanning error');
+ }
+ );
+ go.send();
+ }, 100);
+ };
+
+ $scope.modalOpenScanner = function() {
+ var ModalInstanceCtrl = function($scope, $rootScope, $modalInstance) {
+ // QR code Scanner
+ var video;
+ var canvas;
+ var $video;
+ var context;
+ var localMediaStream;
+
+ var _scan = function(evt) {
+ if (localMediaStream) {
+ context.drawImage(video, 0, 0, 300, 225);
+ try {
+ qrcode.decode();
+ } catch (e) {
+ //qrcodeError(e);
+ }
+ }
+ $timeout(_scan, 500);
+ };
+
+ var _scanStop = function() {
+ if (localMediaStream && localMediaStream.stop) localMediaStream.stop();
+ localMediaStream = null;
+ video.src = '';
+ };
+
+ qrcode.callback = function(data) {
+ _scanStop();
+ $modalInstance.close(data);
+ };
+
+ var _successCallback = function(stream) {
+ video.src = (window.URL && window.URL.createObjectURL(stream)) || stream;
+ localMediaStream = stream;
+ video.play();
+ $timeout(_scan, 1000);
+ };
+
+ var _videoError = function(err) {
+ $scope.cancel();
+ };
+
+ var setScanner = function() {
+ navigator.getUserMedia = navigator.getUserMedia ||
+ navigator.webkitGetUserMedia || navigator.mozGetUserMedia ||
+ navigator.msGetUserMedia;
+ window.URL = window.URL || window.webkitURL ||
+ window.mozURL || window.msURL;
+ };
+
+ $scope.init = function() {
+ setScanner();
+ $timeout(function() {
+ go.send();
+ canvas = document.getElementById('qr-canvas');
+ context = canvas.getContext('2d');
+
+
+ video = document.getElementById('qrcode-scanner-video');
+ $video = angular.element(video);
+ canvas.width = 300;
+ canvas.height = 225;
+ context.clearRect(0, 0, 300, 225);
+
+ navigator.getUserMedia({
+ video: true
+ }, _successCallback, _videoError);
+ }, 500);
+ };
+
+ $scope.cancel = function() {
+ _scanStop();
+ $modalInstance.dismiss('cancel');
+ };
+ };
+
+ var modalInstance = $modal.open({
+ templateUrl: 'views/modals/scanner.html',
+ windowClass: 'full',
+ controller: ModalInstanceCtrl,
+ backdrop : 'static',
+ keyboard: false
+ });
+ modalInstance.result.then(function(data) {
+ $rootScope.$emit('dataScanned', data);
+ });
+
+ };
+
+ $scope.openScanner = function() {
+ if (isCordova) {
+ $scope.cordovaOpenScanner();
+ }
+ else {
+ $scope.modalOpenScanner();
+ }
+ };
+ };
+
+ return {
+ restrict: 'E',
+ controller: controller,
+ replace: true,
+ template: ''
+ }
+ }
+ ]);
\ No newline at end of file