-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunctions.js
131 lines (105 loc) · 3.18 KB
/
functions.js
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
const wrapper = document.querySelector(".js-card-wrapper");
// Hard code setting for development purposes
const defaultSettings = {
// cardType: "World Bank",
};
const cardTypes = [
"Globo Bank",
"Cloud Four",
// "Money Bags",
// "Robin Hood",
// "Honey",
// "Fetch"
"World Bank",
"VennDiagram"
];
const signatureFonts = [
"dawning",
"apple",
"flower",
"marker",
"qwigley",
"beanie",
];
const signatureColors = ["black", "blue", "red"];
const randomItem = (array) => {
return array[Math.floor(Math.random() * array.length)];
};
const generateCard = (isEntering) => {
const ccNumber = generateNumber();
const cvv = [0, 0, 0].map((n) => chance.integer({ min: 0, max: 9 })).join("");
const cardType = defaultSettings.cardType || randomItem(cardTypes);
const cardTypeShortened = cardType.replace(" ", "");
const signatureFont = randomItem(signatureFonts);
const signatureColor = randomItem(signatureColors);
const name = chance.name();
wrapper.insertAdjacentHTML('beforeend', `
<div class="card card--${cardTypeShortened} ${isEntering ? 'is-entering': ''}">
<div class="card__content card__content--front">
<div class="bank">
${cardType}
</div>
<img class="logo" src="images/${cardTypeShortened}-logo.svg">
<img class="chip" src="images/chip.svg">
<div class="number offset-text">
<span>${ccNumber[0]}</span>
<span>${ccNumber[1]}</span>
<span>${ccNumber[2]}</span>
<span>${ccNumber[3]}</span>
</div>
<div class="expiration offset-text">
${chance.exp()}
</div>
<div class="name offset-text">
${name.toUpperCase()}
</div>
</div>
<div class="card__content card__content--back">
<div class="mag_stripe"></div>
<div class="signature signature--${signatureFont} signature--${signatureColor}">
${name}
</div>
<div class="cvv">${cvv}</div>
</div>
</div>
`);
document.querySelector('.card.is-current')
};
const updateCard = () => {
const oldCard = document.querySelector('.card.is-current');
if(oldCard) {
oldCard.addEventListener('transitionend', () => {
oldCard.parentNode.removeChild(oldCard);
});
oldCard.classList.add('is-exiting');
oldCard.classList.remove('is-current');
}
generateCard(true);
const newCard = document.querySelector('.card.is-entering');
// Trigger a rewflow before toggling classes
newCard.offsetHeight;
// Trigger animation
newCard.classList.add('is-current');
newCard.classList.remove('is-entering');
}
const generateNumber = () => {
const ccNumber = chance.cc();
return [
ccNumber.substring(0, 4),
ccNumber.substring(4, 8),
ccNumber.substring(8, 12),
ccNumber.substring(12, 16),
];
};
const bindButtons = () => {
document.querySelector(".js-deny").addEventListener("click", updateCard);
document.querySelector(".js-accept").addEventListener("click", () => {
alert("I don't believe you! Try again...");
});
};
const initInterface = () => {
generateCard(false);
document.querySelector('.card').classList.add('is-current');
bindButtons();
};
initInterface();