Angular Stripe Checkout v5.1.0 (#71)

This commit is contained in:
nobody42 2020-05-05 11:52:32 +02:00
parent 2553eb8536
commit 02e4563957
No known key found for this signature in database
GPG Key ID: AB5145CF05BFE119
6 changed files with 230 additions and 0 deletions

View File

@ -42,6 +42,9 @@ var files = {
// Angular Payments
'resources/angular-payments/1.0.7/angular-payments.jsm': true,
// Angular Stripe Checkout
'resources/angular-stripe-checkout/5.1.0/angular-stripe-checkout.jsm': true,
// AngularJS
'resources/angularjs/1.7.9/angular-animate.min.jsm': true,
'resources/angularjs/1.7.9/angular-aria.min.jsm': true,

View File

@ -193,6 +193,7 @@ var mappings = {
'angular@{version}/angular.': resources.angular,
'angular@{version}/angular.min.': resources.angular,
'angular-payments@{version}/lib/angular-payments.js': resources.angularPayments,
'angular-stripe-checkout@{version}/angular-stripe-checkout.js': resources.angularStripeCheckout,
'animate.css@{version}/animate.min.css': resources.animateCSS,
'backbone@{version}/backbone.': resources.backbone,
'backbone@{version}/backbone-min.': resources.backbone,

View File

@ -126,6 +126,11 @@ var resources = {
'path': 'resources/angular-payments/{version}/angular-payments.jsm',
'type': 'application/javascript'
},
// Angular Stripe Checkout
'angularStripeCheckout': {
'path': 'resources/angular-stripe-checkout/{version}/angular-stripe-checkout.jsm',
'type': 'application/javascript'
},
// Animate CSS
'animateCSS': {
'path': 'resources/animate.css/{version}/animate.min.css',

View File

@ -250,6 +250,8 @@ helpers.determineResourceName = function (filename) {
return 'Angular UI Router';
case 'angular-payments.jsm':
return 'Angular Payments';
case 'angular-stripe-checkout.jsm':
return 'Angular Stripe Checkout';
case 'animate.min.css':
return 'Animate CSS'
case 'backbone-min.jsm':
@ -461,6 +463,8 @@ helpers.setLastVersion = function (type, version) {
version = '0.4.18';
} else if (type.includes('/angular-payments@1.')) {
version = '1.0.7';
} else if (type.includes('/angular-stripe-checkout@5.')) {
version = '5.1.0';
} else if (type.includes('/angular-ui-bootstrap/0.')) {
version = '0.14.3';
} else if (type.includes('/angular-ui-bootstrap/1.')) {

View File

@ -38,6 +38,7 @@
<li>Added AngularJS v1.4.14 (<a href="https://gitlab.com/nobody42/localcdn/-/issues/71">#71</a>)</li>
<li>Fixed typo in AngularUI Bootstrap (<a href="https://gitlab.com/nobody42/localcdn/-/issues/71">#71</a>)</li>
<li>Added Angular Payments v1.0.7 (<a href="https://gitlab.com/nobody42/localcdn/-/issues/71">#71</a>)</li>
<li>Added Angular Stripe Checkout v5.1.0 (<a href="https://gitlab.com/nobody42/localcdn/-/issues/71">#71</a>)</li>
</ul>
<div class="topic-label">
Please update your uBlock/uMatrix rules

View File

@ -0,0 +1,216 @@
(function() {
/* global StripeCheckout */
'use strict';
var MODULE_NAME = 'stripe.checkout';
var STRIPE_CHECKOUT_URL = 'https://checkout.stripe.com/checkout.js';
var OPTIONS = {
address: ['data-address', 'boolean'],
alipay: ['data-alipay', 'boolean-or-auto'],
alipayReusable: ['data-alipay-reusable', 'boolean'],
allowRememberMe: ['data-allow-remember-me', 'boolean'],
amount: ['data-amount', 'number'],
billingAddress: ['data-billing-address', 'boolean'],
bitcoin: ['data-bitcoin', 'boolean'],
currency: ['data-currency', 'string'],
description: ['data-description', 'string'],
email: ['data-email', 'string'],
image: ['data-image', 'string'],
key: ['data-key', 'string'],
label: ['data-label', 'string'],
locale: ['data-locale', 'string'],
name: ['data-name', 'string'],
color: ['data-color', 'string'],
panelLabel: ['data-panel-label', 'string'],
shippingAddress: ['data-shipping-address', 'boolean'],
zipCode: ['data-zip-code', 'boolean']
};
var angular;
if (typeof module !== 'undefined' && typeof module.exports === 'object') {
angular = require('angular');
module.exports = MODULE_NAME;
} else {
angular = window.angular;
}
var extend = angular.extend;
angular.module(MODULE_NAME,[])
.directive('stripeCheckout',StripeCheckoutDirective)
.provider('StripeCheckout',StripeCheckoutProvider);
StripeCheckoutDirective.$inject = ['$parse', 'StripeCheckout'];
function StripeCheckoutDirective($parse, StripeCheckout) {
return { link: link };
function link(scope, el, attrs) {
var handler;
StripeCheckout.load()
.then(function() {
handler = StripeCheckout.configure(getOptions(el));
});
el.on('click',function() {
if (handler)
handler.open(getOptions(el)).then(function(result) {
var callback = $parse(attrs.stripeCheckout)(scope);
if (typeof callback === 'function')
callback.apply(null,result);
});
});
}
}
function StripeCheckoutProvider() {
var defaults = {};
this.defaults = function(options) {
extend(defaults,options);
};
this.load = function(StripeCheckout) {
return StripeCheckout.load();
};
this.load.$inject = ['StripeCheckout'];
this.$get = function($document, $q) {
return new StripeCheckoutService($document,$q,defaults);
};
this.$get.$inject = ['$document', '$q'];
}
function StripeCheckoutService($document, $q, providerDefaults) {
var defaults = {};
var promise;
this.configure = function(options) {
return new StripeHandlerWrapper($q,extend({},
providerDefaults,
defaults,
options
));
};
this.load = function() {
if (!promise)
promise = loadLibrary($document,$q);
return promise;
};
this.defaults = function(options) {
extend(defaults,options);
};
}
function StripeHandlerWrapper($q, options) {
var deferred, success;
var handler = StripeCheckout.configure(extend({},options,{
token: function(token, args) {
if (options.token) options.token(token,args);
success = true;
deferred.resolve([token, args]);
},
closed: function() {
if (options.closed) options.closed();
if (!success) deferred.reject();
}
}));
this.open = function(openOptions) {
deferred = $q.defer();
success = false;
handler.open(openOptions);
return deferred.promise;
};
this.close = function() {
success = false;
handler.close();
if (options.closed) options.closed();
if (deferred) deferred.reject();
};
}
function getOptions(el) {
var opt, def, val, options = {};
for (opt in OPTIONS) {
if (!OPTIONS.hasOwnProperty(opt))
continue;
def = OPTIONS[opt];
val = parseValue(el.attr(def[0]),def[1]);
if (val != null)
options[opt] = val;
}
return options;
}
function loadLibrary($document, $q) {
var deferred = $q.defer();
var doc = $document[0];
var script = doc.createElement('script');
script.src = STRIPE_CHECKOUT_URL;
script.onload = function () {
deferred.resolve();
};
script.onreadystatechange = function () {
var rs = this.readyState;
if (rs === 'loaded' || rs === 'complete')
deferred.resolve();
};
script.onerror = function () {
deferred.reject(new Error('Unable to load checkout.js'));
};
var container = doc.getElementsByTagName('head')[0];
container.appendChild(script);
return deferred.promise;
}
function parseValue(value, type) {
if (type === 'boolean') {
return value && value !== 'false';
} else if (type === 'number') {
return value && Number(value);
} else if (type === 'boolean-or-auto') {
if (value === 'auto')
return value;
else
return parseValue(value,'boolean');
} else {
return value;
}
}
})();