@incdevco/framework
Version:
node.js lambda framework
337 lines (224 loc) • 6.96 kB
JavaScript
/* 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;
}
};
}
]);