UNPKG

@incdevco/framework

Version:
337 lines (224 loc) 6.96 kB
/* global angular Stripe */ angular.module('stripe', [ 'ngMessages' ]) .directive('stripeBankAccount', [ 'Stripe', function (Stripe) { return { link: function ($scope, $element, $attrs, $controller) { $scope.bank_account = { account_holder_name: null, account_holder_type: null, account_number: null, country: 'us', currency: 'usd', routing_number: null }; $scope.change = function () { Stripe.createBankAccountToken($scope.bank_account) .then(function (token) { console.debug('Stripe.createBankAccountToken', token); $controller.setToken(token); }) .catch(function (exception) { console.debug('stripe.createToken', exception); }); }; }, replace: true, require: '^stripeToken', restrict: 'E', scope: { form: '=', token: '=' }, templateUrl: 'stripe/templates/bank-account.html' }; } ]) .directive('stripeCard', [ 'Stripe', function (Stripe) { return { link: function ($scope, $element, $attrs, $controller) { $scope.card = { number: null, cvc: null, exp_month: null, exp_year: null, name: null, address_line1: null, address_line2: null, address_city: null, address_zip: null, address_country: 'us' }; $scope.change = function () { Stripe.createCardToken($scope.card) .then(function (token) { console.log('Stripe.createCardToken', token); $controller.setToken(token); }) .catch(function (exception) { console.log('Stripe.createCardToken', exception); }); }; }, replace: true, require: '^stripeToken', restrict: 'E', scope: { form: '=', token: '=' }, templateUrl: 'stripe/templates/card.html' }; } ]) .directive('stripeToken', [ 'Stripe', function (Stripe) { return { controller: [ '$scope', function ($scope) { this.setToken = function (token) { $scope.$applyAsync(function () { $scope.token = token; }); }; } ], controllerAs: 'crtl', replace: true, restrict: 'E', scope: { form: '=', token: '=' }, templateUrl: 'stripe/templates/token.html' }; } ]) .directive('stripeValidAccountNumber', [ function () { return { link: function ($scope, $element, $attrs, $model) { $model.$parsers.unshift(function (value) { var valid = false; if (value) { valid = Stripe.bankAccount.validateAccountNumber(value, 'US'); $model.$setValidity('accountNumber', valid); } return (valid) ? value : undefined; }); }, require: 'ngModel', restrict: 'A' }; } ]) .directive('stripeValidCardNumber', [ function () { return { link: function ($scope, $element, $attrs, $model) { $model.$parsers.unshift(function (value) { var valid = false; if (value) { valid = Stripe.card.validateCardNumber(value); $model.$setValidity('accountNumber', valid); } return (valid) ? value : undefined; }); }, require: 'ngModel', restrict: 'A' }; } ]) .directive('stripeValidCvc', [ function () { return { link: function ($scope, $element, $attrs, $model) { $model.$parsers.unshift(function (value) { var valid = false; if (value) { valid = Stripe.card.validateCVC(value); $model.$setValidity('cvc', valid); } return (valid) ? value : undefined; }); }, require: 'ngModel', restrict: 'A' }; } ]) .directive('stripeValidExpiration', [ function () { return { link: function ($scope, $element, $attrs, $model) { $model.$parsers.unshift(function (value) { var valid = false; if (value) { valid = Stripe.card.validateExpiry(value); $model.$setValidity('expiration', valid); } return (valid) ? value : undefined; }); }, require: 'ngModel', restrict: 'A' }; } ]) .directive('stripeValidRoutingNumber', [ function () { return { link: function ($scope, $element, $attrs, $model) { $model.$parsers.unshift(function (value) { var valid = false; if (value) { valid = Stripe.bankAccount.validateRoutingNumber(value, 'US'); $model.$setValidity('routingNumber', valid); } return (valid) ? value : undefined; }); }, require: 'ngModel', restrict: 'A' }; } ]) .factory('Stripe', [ 'STRIPE_PUBLIC_KEY', '$q', function (key, $q) { Stripe.setPublishableKey(key); return { createBankAccountToken: function (options) { var deferred = $q.defer(); Stripe.bankAccount.createToken(options, function (status, response) { if (response.error) { deferred.reject(response.error); } else { deferred.resolve(response); } }); return deferred.promise; }, createCardToken: function (options) { var deferred = $q.defer(); Stripe.card.createToken(options, function (status, response) { if (response.error) { deferred.reject(response.error); } else { deferred.resolve(response); } }); return deferred.promise; } }; } ]);