1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'jquery',
'uiClass',
'Magento_Paypal/js/solution',
'underscore'
], function ($, Class, Solution, _) {
'use strict';
return Class.extend({
defaults: {
/**
* Initialized solutions
*/
solutions: {},
/**
* The elements of created solutions
*/
solutionsElements: {},
/**
* The selector element responsible for configuration of payment method (CSS class)
*/
buttonConfiguration: '.button.action-configure'
},
/**
* Constructor
*
* @param {Object} config
* @returns {exports.initialize}
*/
initialize: function (config) {
this.initConfig(config)
.initSolutions();
return this;
},
/**
* Initialization and configuration solutions
*
* @returns {exports.initSolutions}
*/
initSolutions: function () {
_.each(this.config.solutions, this.addSolution, this);
this.initializeSolutions()
.wipeButtonsConfiguration();
_.each(this.solutions, this.applicationRules);
return this;
},
/**
* The creation and addition of the solution according to the configuration
*
* @param {Object} solution
* @param {String} identifier
*/
addSolution: function (solution, identifier) {
this.solutions[identifier] = new Solution({
config: solution,
buttonConfiguration: this.buttonConfiguration
}, identifier);
this.solutionsElements[identifier] = this.solutions[identifier].$self;
},
/**
* Wiping buttons configuration of the payment method
*/
wipeButtonsConfiguration: function () {
$(this.buttonConfiguration).removeClass('disabled')
.removeAttr('disabled');
},
/**
* Application of the rules
*
* @param {Object} solution
*/
applicationRules: function (solution) {
_.each(solution.afterLoadRules, function (rule) {
rule.apply();
});
},
/**
* Initialize solutions
*
* @returns {exports.initializeSolutions}
*/
initializeSolutions: function () {
_.each(this.solutions, function (solution) {
solution.setSolutionsElements(this.solutionsElements)
.initEvents()
.addListeners();
}, this);
return this;
}
});
});