diff --git a/public/views/modals/amazon-card-details.html b/public/views/modals/amazon-card-details.html index 528933a6c..00432c63c 100644 --- a/public/views/modals/amazon-card-details.html +++ b/public/views/modals/amazon-card-details.html @@ -1,13 +1,13 @@ - +

Details

- +
Amazon.com Gift Card diff --git a/src/js/controllers/amazon.js b/src/js/controllers/amazon.js index f36d984bf..2f02ea6ee 100644 --- a/src/js/controllers/amazon.js +++ b/src/js/controllers/amazon.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('amazonController', - function($scope, $timeout, $ionicModal, $log, lodash, bwcError, amazonService, platformInfo, nodeWebkit) { + function($scope, $timeout, $log, lodash, bwcError, amazonService, platformInfo, nodeWebkit, modalService) { if (platformInfo.isCordova && StatusBar.isVisible) { StatusBar.backgroundColorByHexString("#4B6178"); @@ -82,12 +82,11 @@ angular.module('copayApp.controllers').controller('amazonController', var self = this; $scope.card = card; - $ionicModal.fromTemplateUrl('views/modals/amazon-card-details.html', { - scope: $scope - }).then(function(modal) { - $scope.amazonCardDetailsModal = modal; - $scope.amazonCardDetailsModal.show(); - }); + modalService + .popup('views/modals/amazon-card-details.html', $scope) + .then(function(modal) { + modal.show(); + }); $scope.$on('UpdateAmazonList', function(event) { self.init(); diff --git a/src/js/controllers/modals/amazonCardDetails.js b/src/js/controllers/modals/amazonCardDetails.js index 432d32a0d..a93df11ac 100644 --- a/src/js/controllers/modals/amazonCardDetails.js +++ b/src/js/controllers/modals/amazonCardDetails.js @@ -22,7 +22,7 @@ angular.module('copayApp.controllers').controller('amazonCardDetailsController', remove: true }, function(err) { $scope.$emit('UpdateAmazonList'); - $scope.cancel(); + $scope.closeModal(); }); }; @@ -59,8 +59,4 @@ angular.module('copayApp.controllers').controller('amazonCardDetailsController', }); }; - $scope.cancel = function() { - $scope.amazonCardDetailsModal.hide(); - }; - }); diff --git a/src/js/services/modalService.js b/src/js/services/modalService.js new file mode 100644 index 000000000..ddbc49698 --- /dev/null +++ b/src/js/services/modalService.js @@ -0,0 +1,153 @@ +'use strict'; + +angular.module('copayApp.services').service('modalService', function($rootScope, $log, $ionicModal, $ionicPopup, platformInfo) { + var isCordova = platformInfo.isCordova; + + var _modalIonic = function(tpl, scope) { + var promise; + scope = scope || $rootScope.$new(); + + promise = $ionicModal.fromTemplateUrl(tpl, { + scope: scope + }).then(function(modal) { + scope.modal = modal; + return modal; + }); + + scope.openModal = function() { + scope.modal.show(); + }; + + scope.closeModal = function() { + scope.modal.hide(); + }; + + scope.$on('$destroy', function() { + scope.modal.remove(); + }); + + return promise; + }; + + var _ionicAlert = function(title, message, cb) { + if (!cb) cb = function() {}; + var promise = $ionicPopup.alert({ + title: title, + template: message + }).then(cb); + + return promise; + }; + + var _ionicConfirm = function(title, message, cb) { + $ionicPopup.confirm({ + title: title, + template: message + }).then(function(res) { + return cb(res); + }); + }; + + var _ionicPrompt = function(title, message, opts, cb) { + opts = opts || {}; + $ionicPopup.prompt({ + title: title, + template: message, + inputType: opts.inputType || 'password', + inputPlaceholder: opts.inputPlaceholder || 'Your password' + }).then(function(res) { + return cb(res) + }); + }; + + var _cordovaAlert = function(title, message, cb) { + if (!cb) cb = function() {}; + navigator.notification.alert(message, cb, title); + }; + + var _cordovaConfirm = function(title, message, cb) { + var onConfirm = function (buttonIndex) { + if (buttonIndex == 1) return cb(true); + else return cb(false); + } + navigator.notification.confirm(message, onConfirm, title); + }; + + var _cordovaPrompt = function(title, message, cb) { + var onPrompt = function (results) { + if (results.buttonIndex) return cb(results.input1); + else return cb(); + } + navigator.notification.prompt(message, onPrompt, title); + }; + + /** + * Show a simple alert popup + * + * @param {String} Title + * @param {String} Message + * @param {Callback} Function + * @returns {Promise} + */ + + this.showAlert = function(title, msg, cb) { + var message = msg.message ? msg.message : msg; + $log.warn(title + ": " + message); + + if (isCordova) + _cordovaAlert(title, message, cb); + else + _ionicAlert(title, message, cb); + }; + + /** + * Show a simple confirm popup + * + * @param {String} Title + * @param {String} Message + * @param {Callback} Function + * @returns {Callback} OK: true, Cancel: false + */ + + this.showConfirm = function(title, message, cb) { + $log.warn(title + ": " + message); + + if (isCordova) + _cordovaConfirm(title, message, cb); + else + _ionicConfirm(title, message, cb); + }; + + /** + * Show a simple prompt popup + * + * @param {String} Title + * @param {String} Message + * @param {Object} Object{ inputType, inputPlaceholder } + * @param {Callback} Function + * @returns {Callback} Return the value of the input if user presses OK + */ + + this.showPrompt = function(title, message, opts, cb) { + $log.warn(title + ": " + message); + + if (isCordova) + _cordovaPrompt(title, message, cb); + else + _ionicPrompt(title, message, opts, cb); + }; + + /** + * Show a modal popup + * + * @param {String} TemplateURL + * @param {Object} Scope + * @returns {Promise} + */ + + this.showModal = function(tpl, scope) { + return _modalIonic(tpl, scope); + }; + + +});