geico-design-kit 7.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of geico-design-kit might be problematic. Click here for more details.

Files changed (107) hide show
  1. package/.babelrc +5 -0
  2. package/LICENSE +0 -0
  3. package/dist/analytics.js +119 -0
  4. package/dist/appState.js +56 -0
  5. package/dist/baseComponent.js +110 -0
  6. package/dist/components/Accordion.js +312 -0
  7. package/dist/components/AddressAutoComplete.js +220 -0
  8. package/dist/components/Alert.js +145 -0
  9. package/dist/components/BackgroundPattern.js +99 -0
  10. package/dist/components/BackgroundPatternPortfolio.js +242 -0
  11. package/dist/components/ButtonSwitch.js +236 -0
  12. package/dist/components/CardSelections.js +230 -0
  13. package/dist/components/CommonQuestionsSquares.js +169 -0
  14. package/dist/components/Confirmation.js +156 -0
  15. package/dist/components/ConsolidatedSummary.js +489 -0
  16. package/dist/components/CoverageGraph.js +201 -0
  17. package/dist/components/CreditCard.js +591 -0
  18. package/dist/components/CurrencyInput.js +302 -0
  19. package/dist/components/DatePicker.js +468 -0
  20. package/dist/components/DockedMessage.js +146 -0
  21. package/dist/components/DotNavigation.js +200 -0
  22. package/dist/components/EditComponent.js +128 -0
  23. package/dist/components/EditableTable.js +113 -0
  24. package/dist/components/InPageNavigation.js +360 -0
  25. package/dist/components/Loader.js +232 -0
  26. package/dist/components/MakePayment.js +361 -0
  27. package/dist/components/Modal.js +254 -0
  28. package/dist/components/MoreInfoButton.js +227 -0
  29. package/dist/components/MultipleSelectBox.js +217 -0
  30. package/dist/components/NavigationalBox.js +161 -0
  31. package/dist/components/Navigator.js +294 -0
  32. package/dist/components/PasswordMeter.js +201 -0
  33. package/dist/components/PayPlans.js +534 -0
  34. package/dist/components/SegmentedControl.js +327 -0
  35. package/dist/components/SortableTable.js +166 -0
  36. package/dist/components/Tabs.js +1 -0
  37. package/dist/components/TextAreaCountdown.js +219 -0
  38. package/dist/components/Timeline.js +498 -0
  39. package/dist/components/TimelineFilter.js +492 -0
  40. package/dist/components/ToTopArrow.js +153 -0
  41. package/dist/components/Tooltip.js +329 -0
  42. package/dist/components/Upsell.js +168 -0
  43. package/dist/components/VIN.js +271 -0
  44. package/dist/components/ValidateForm.js +938 -0
  45. package/dist/components/ViewMoreLess.js +191 -0
  46. package/dist/components/ZipCode.js +191 -0
  47. package/dist/components/portfolio.js +99 -0
  48. package/dist/geico-design-kit.js +141 -0
  49. package/dist/global/components.js +98 -0
  50. package/dist/global/footer.js +26 -0
  51. package/dist/global/nav.js +1257 -0
  52. package/dist/services/CharacterTypeService.js +106 -0
  53. package/dist/services/UserAgentService.js +73 -0
  54. package/dist/utils.js +79 -0
  55. package/package.json +32 -0
  56. package/src/analytics.js +82 -0
  57. package/src/appState.js +56 -0
  58. package/src/baseComponent.js +156 -0
  59. package/src/components/Accordion.js +336 -0
  60. package/src/components/AddressAutoComplete.js +236 -0
  61. package/src/components/Alert.js +135 -0
  62. package/src/components/BackgroundPattern.js +96 -0
  63. package/src/components/BackgroundPatternPortfolio.js +284 -0
  64. package/src/components/ButtonSwitch.js +241 -0
  65. package/src/components/CardSelections.js +240 -0
  66. package/src/components/CommonQuestionsSquares.js +179 -0
  67. package/src/components/Confirmation.js +160 -0
  68. package/src/components/ConsolidatedSummary.js +505 -0
  69. package/src/components/CoverageGraph.js +203 -0
  70. package/src/components/CreditCard.js +595 -0
  71. package/src/components/CurrencyInput.js +321 -0
  72. package/src/components/DatePicker.js +487 -0
  73. package/src/components/DockedMessage.js +142 -0
  74. package/src/components/DotNavigation.js +206 -0
  75. package/src/components/EditComponent.js +130 -0
  76. package/src/components/EditableTable.js +106 -0
  77. package/src/components/InPageNavigation.js +391 -0
  78. package/src/components/Loader.js +272 -0
  79. package/src/components/MakePayment.js +397 -0
  80. package/src/components/Modal.js +279 -0
  81. package/src/components/MoreInfoButton.js +243 -0
  82. package/src/components/MultipleSelectBox.js +211 -0
  83. package/src/components/NavigationalBox.js +163 -0
  84. package/src/components/Navigator.js +338 -0
  85. package/src/components/PasswordMeter.js +209 -0
  86. package/src/components/PayPlans.js +604 -0
  87. package/src/components/SegmentedControl.js +365 -0
  88. package/src/components/SortableTable.js +176 -0
  89. package/src/components/Tabs.js +0 -0
  90. package/src/components/TextAreaCountdown.js +231 -0
  91. package/src/components/Timeline.js +532 -0
  92. package/src/components/TimelineFilter.js +533 -0
  93. package/src/components/ToTopArrow.js +153 -0
  94. package/src/components/Tooltip.js +344 -0
  95. package/src/components/Upsell.js +196 -0
  96. package/src/components/VIN.js +289 -0
  97. package/src/components/ValidateForm.js +1030 -0
  98. package/src/components/ViewMoreLess.js +193 -0
  99. package/src/components/ZipCode.js +193 -0
  100. package/src/components/portfolio.js +106 -0
  101. package/src/geico-design-kit.js +144 -0
  102. package/src/global/components.js +92 -0
  103. package/src/global/footer.js +25 -0
  104. package/src/global/nav.js +1457 -0
  105. package/src/services/CharacterTypeService.js +107 -0
  106. package/src/services/UserAgentService.js +59 -0
  107. package/src/utils.js +82 -0
@@ -0,0 +1,591 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _baseComponent = _interopRequireDefault(require("../../src/baseComponent"));
8
+ var _CharacterTypeService = _interopRequireDefault(require("../../src/services/CharacterTypeService"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
11
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
12
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
13
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
14
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
15
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
16
+ var validateSettings = [{
17
+ setting: "content",
18
+ isRequired: true,
19
+ validate: "type",
20
+ possibleValues: ["string", "object"],
21
+ errorMessage: ["GDK Credit Card : Content must be defined and set to a DOM selector or Node"]
22
+ }, {
23
+ setting: "alternateCard",
24
+ isRequired: false,
25
+ validate: "type",
26
+ possibleValues: ["object"],
27
+ errorMessage: ["GDK Credit Card : alternateCard must be defined as an object"]
28
+ }];
29
+
30
+ /**
31
+ * CreditCard Class
32
+ */
33
+ var CreditCard = /*#__PURE__*/function () {
34
+ /**
35
+ * These are settings for the instantiation. Refer to the design kit section of this component for JS setting examples.
36
+ * @param {string|Object} content
37
+ * A reference to the div form field containing the credit card input node
38
+ *
39
+ */
40
+
41
+ function CreditCard(options) {
42
+ _classCallCheck(this, CreditCard);
43
+ this._internalVars = {
44
+ creditCards: {
45
+ americanExpress: {
46
+ prefixes: ['34', '37'],
47
+ cardFormatArray: [4, 6, 5]
48
+ },
49
+ visa: {
50
+ prefixes: ['4'],
51
+ cardFormatArray: [4, 4, 4, 4]
52
+ },
53
+ mastercard: {
54
+ prefixes: ['2221-2720', '51-55'],
55
+ cardFormatArray: [4, 4, 4, 4]
56
+ },
57
+ discover: {
58
+ prefixes: ['6011', '64', '65'],
59
+ cardFormatArray: [4, 4, 4, 4]
60
+ }
61
+ },
62
+ maskEntry: maskEntry.bind(this)
63
+ };
64
+
65
+ //options with defaults set
66
+ this._defaults = {};
67
+
68
+ // Create options by extending defaults with the passed in arugments
69
+ if (options && _typeof(options) === "object") {
70
+ this._options = _baseComponent["default"].extendDefaults(this._defaults, options);
71
+ }
72
+
73
+ //if the required options are valid set up the environment
74
+ if (_baseComponent["default"].validateSettings(this._options, validateSettings)) {
75
+ this._internalVars.contentType = _baseComponent["default"].getContentType(this);
76
+ setLocalVars.call(this);
77
+ setEvents.call(this);
78
+ validateAlternateCards.call(this);
79
+ }
80
+ }
81
+
82
+ //Public Methods
83
+
84
+ /**
85
+ * getCardType()
86
+ * returns the card type
87
+ * @returns {*|string}
88
+ */
89
+ return _createClass(CreditCard, [{
90
+ key: "getCardType",
91
+ value: function getCardType() {
92
+ switch (this._internalVars.creditCardType) {
93
+ case 'default':
94
+ this._internalVars.creditCardType = 'unknown';
95
+ break;
96
+ case undefined:
97
+ this._internalVars.creditCardType = 'unknown';
98
+ break;
99
+ }
100
+ return this._internalVars.creditCardType;
101
+ }
102
+
103
+ /**
104
+ * getCardNumber()
105
+ * returns the card input value without formatting
106
+ * @returns {*|string}
107
+ */
108
+ }, {
109
+ key: "getCardNumber",
110
+ value: function getCardNumber() {
111
+ if (this._internalVars.maskSet === true) {
112
+ return this._internalVars.creditCardInputHidden.value.replace(/ /g, '');
113
+ } else {
114
+ return this._internalVars.creditCardInput.value.replace(/ /g, '');
115
+ }
116
+ }
117
+
118
+ /**
119
+ * setCardNumber(cardNumber)
120
+ * sets the card number
121
+ * @param {number} cardNumber
122
+ * The card number to be populated in the input field
123
+ */
124
+ }, {
125
+ key: "setCardNumber",
126
+ value: function setCardNumber(cardNumber) {
127
+ if (cardNumber && typeof cardNumber === "number") {
128
+ this._internalVars.creditCardInput.value = cardNumber;
129
+ change.call(this);
130
+ maskEntry.call(this);
131
+ }
132
+ }
133
+
134
+ /**
135
+ * isComplete()
136
+ * returns boolean indicating a complete and recognized value
137
+ * @returns {boolean}
138
+ */
139
+ }, {
140
+ key: "isComplete",
141
+ value: function isComplete() {
142
+ this.getCardType();
143
+ if (this._internalVars.creditCardType !== 'unknown') {
144
+ if (this._internalVars.creditCardInput.value.length === parseInt(this._internalVars.creditCardInput.getAttribute('maxlength'))) {
145
+ return true;
146
+ } else {
147
+ return false;
148
+ }
149
+ } else {
150
+ return false;
151
+ }
152
+ }
153
+
154
+ /**
155
+ * destroy()
156
+ * removes the node from the dom and any events attached
157
+ */
158
+ }, {
159
+ key: "destroy",
160
+ value: function destroy() {
161
+ removeEvents.call(this);
162
+ this._internalVars.node.parentNode.removeChild(this._internalVars.node);
163
+
164
+ //a little garbage collection
165
+ for (var variableKey in this) {
166
+ if (this.hasOwnProperty(variableKey)) {
167
+ delete this[variableKey];
168
+ }
169
+ }
170
+ }
171
+ }]);
172
+ }(); // Private Methods
173
+ /**
174
+ * setEvents()
175
+ * Sets all the events needed for the component
176
+ */
177
+ function setEvents() {
178
+ this._internalVars.creditCardInput.addEventListener('paste', paste.bind(this));
179
+ this._internalVars.creditCardInput.addEventListener('keydown', validateKeyPress.bind(this));
180
+ this._internalVars.creditCardInput.addEventListener('keyup', checkValue.bind(this));
181
+ this._internalVars.creditCardInput.addEventListener('input', change.bind(this));
182
+ this._internalVars.creditCardInput.addEventListener('blur', this._internalVars.maskEntry);
183
+ }
184
+
185
+ /**
186
+ * removeEvents()
187
+ * removes all events from the component
188
+ */
189
+ function removeEvents() {
190
+ this._internalVars.creditCardInput.removeEventListener('paste', paste.bind(this));
191
+ this._internalVars.creditCardInput.removeEventListener('keydown', validateKeyPress.bind(this));
192
+ this._internalVars.creditCardInput.removeEventListener('keyup', checkValue.bind(this));
193
+ this._internalVars.creditCardInput.removeEventListener('input', change.bind(this));
194
+ this._internalVars.creditCardInput.removeEventListener('blur', this._internalVars.maskEntry);
195
+ }
196
+ function parseRange(range) {
197
+ var hyphenPosition = range.indexOf('-');
198
+ var beginningPoint = range.substring(0, hyphenPosition);
199
+ var endPoint = range.substring(hyphenPosition + 1, range.length);
200
+ return {
201
+ "hyphenPosition": hyphenPosition,
202
+ "beginningPoint": beginningPoint,
203
+ "endPoint": endPoint
204
+ };
205
+ }
206
+
207
+ /**
208
+ * validateAlternateCards()
209
+ * validates the alternate card object and properties
210
+ */
211
+ function validateAlternateCards() {
212
+ //check if alternate cards have been set
213
+ if (this._options.alternateCard) {
214
+ //Loop through alternateCard object
215
+ for (var alternateCard in this._options.alternateCard) {
216
+ //check if alternateCard object has prefixes & cardFormatArray properties
217
+ if (this._options.alternateCard[alternateCard].prefixes && this._options.alternateCard[alternateCard].cardFormatArray) {
218
+ // Loop through prefixes property
219
+ for (var cardDigits in this._options.alternateCard[alternateCard].prefixes) {
220
+ //check if values are the correct type
221
+ if (typeof this._options.alternateCard[alternateCard].prefixes[cardDigits] !== 'string') {
222
+ this._options.alternateCard[alternateCard].valid = false;
223
+ } else {
224
+ if (this._options.alternateCard[alternateCard].prefixes[cardDigits].indexOf('-') >= 0) {
225
+ var parsedRange = parseRange.call(this, this._options.alternateCard[alternateCard].prefixes[cardDigits]);
226
+ if (parsedRange.beginningPoint > 0 === false || parsedRange.endPoint > 0 === false) {
227
+ this._options.alternateCard[alternateCard].valid = false;
228
+ }
229
+ } else {
230
+ if (this._options.alternateCard[alternateCard].prefixes[cardDigits] > 0 === false) {
231
+ this._options.alternateCard[alternateCard].valid = false;
232
+ }
233
+ }
234
+ }
235
+ }
236
+ // Loop through cardFormatArray property
237
+ for (var formatArray in this._options.alternateCard[alternateCard].cardFormatArray) {
238
+ // check if value is the correct type
239
+ if (typeof this._options.alternateCard[alternateCard].cardFormatArray[formatArray] !== 'number') {
240
+ this._options.alternateCard[alternateCard].valid = false;
241
+ } else if (this._options.alternateCard[alternateCard].cardFormatArray[formatArray] < 0) {
242
+ this._options.alternateCard[alternateCard].valid = false;
243
+ }
244
+ }
245
+ } else {
246
+ this._options.alternateCard[alternateCard].valid = false;
247
+ }
248
+ // Set valid status if not defined as false
249
+ if (this._options.alternateCard[alternateCard].valid === undefined) {
250
+ this._options.alternateCard[alternateCard].valid = true;
251
+ }
252
+ }
253
+ }
254
+ }
255
+
256
+ /**
257
+ * paste(event)
258
+ * @param event
259
+ * removes non-numeric characters and formats numeric characters
260
+ */
261
+ function paste(event) {
262
+ var currentLength = this._internalVars.creditCardInput.value.length,
263
+ //currentLengthEndSpace,
264
+ endLength,
265
+ endLengthEndSpace,
266
+ caretPos = this._internalVars.creditCardInput.selectionStart,
267
+ pasteLength,
268
+ spaces = 0;
269
+ //allow time for value to be recognized
270
+ var delay = setTimeout(pasteComplete.bind(this), 100);
271
+ function pasteComplete() {
272
+ //remove non-numeric characters
273
+ this._internalVars.creditCardInput.value = this._internalVars.creditCardInput.value.replace(/\D/g, '');
274
+ change.call(this);
275
+ endLength = this._internalVars.creditCardInput.value.length;
276
+ for (var ind = 0; ind < this._internalVars.sequenceArray.length; ind++) {
277
+ if (endLength === this._internalVars.sequenceArray[ind] + (ind + 1)) {
278
+ endLengthEndSpace = true;
279
+ break;
280
+ } else {
281
+ endLengthEndSpace = false;
282
+ }
283
+ }
284
+ if (endLengthEndSpace === true) {
285
+ endLength = endLength - 1;
286
+ }
287
+ pasteLength = endLength - currentLength;
288
+ for (var index = 0; index < this._internalVars.sequenceArray.length; index++) {
289
+ if (caretPos <= this._internalVars.sequenceArray[index] + index) {
290
+ if (caretPos + pasteLength >= this._internalVars.sequenceArray[index] + index) {
291
+ spaces = spaces + 1;
292
+ }
293
+ }
294
+ }
295
+ var position = caretPos + pasteLength + spaces;
296
+
297
+ //set cursor position
298
+ this._internalVars.creditCardInput.setSelectionRange(position, position);
299
+ }
300
+ }
301
+
302
+ /**
303
+ * validateKeyPress(event)
304
+ * @param event
305
+ * restrict non-numeric characters
306
+ */
307
+ function validateKeyPress(event) {
308
+ var isValidCharacter = false;
309
+ var validCharacterTypes = ['number', 'tab', 'enter', 'minimize', 'copy', 'paste', 'delete', 'home', 'end', 'left arrow', 'up arrow', 'right arrow', 'down arrow', 'backspace'];
310
+ Array.prototype.forEach.call(validCharacterTypes, function (type) {
311
+ if (_CharacterTypeService["default"]._getCharacterType(event) === type) {
312
+ isValidCharacter = true;
313
+ }
314
+ });
315
+ if (_CharacterTypeService["default"]._getCharacterType(event) === 'n/a') {
316
+ var entryArray = this._internalVars.creditCardInput.value.split('');
317
+ var convertedArray = [];
318
+ Array.prototype.forEach.call(entryArray, function (el, i) {
319
+ if (el === '0' || el === '1' || el === '2' || el === '3' || el === '4' || el === '5' || el === '6' || el === '7' || el === '8' || el === '9') {} else {
320
+ convertedArray.push(el);
321
+ }
322
+ });
323
+ var entry = convertedArray.join('');
324
+ this._internalVars.creditCardInput.value = entry;
325
+ }
326
+ if (isValidCharacter === false) {
327
+ event.preventDefault();
328
+ }
329
+ if (isValidCharacter === true && _CharacterTypeService["default"]._getCharacterType(event) !== 'tab') {
330
+ if (this._internalVars.maskSet === true) {
331
+ // unmask field
332
+ $(this._internalVars.creditCardInput).unmask();
333
+
334
+ //reset values
335
+ this._internalVars.creditCardInput.value = '';
336
+ this._internalVars.creditCardImageField.setAttribute('class', 'credit-card-image');
337
+ this._internalVars.creditCardType = 'default';
338
+ this._internalVars.maskSet = false;
339
+ }
340
+ }
341
+ }
342
+
343
+ /**
344
+ * checkValue(event)
345
+ * @param event
346
+ * set card properties, image, and format
347
+ */
348
+ function checkValue(event) {
349
+ var keyCode = event.which || event.keyCode;
350
+ if (keyCode === 8) {
351
+ setCardFormat.call(this, keyCode);
352
+ }
353
+ }
354
+
355
+ /**
356
+ * change()
357
+ * Triggers function when input value changes
358
+ */
359
+ function change() {
360
+ setCardProperties.call(this);
361
+ setCardImage.call(this);
362
+ setCardFormat.call(this);
363
+ }
364
+
365
+ /**
366
+ * setCardProperties()
367
+ * set card type/format etc.
368
+ */
369
+ function setCardProperties() {
370
+ var _this = this;
371
+ // Set variable identifying a matching card
372
+ var cardIsSet = false;
373
+ var inputValue = this._internalVars.creditCardInput.value.replace(/ /g, '');
374
+
375
+ // loop through credit cards object
376
+ for (var key in this._internalVars.creditCards) {
377
+ if (this._internalVars.creditCards.hasOwnProperty(key)) {
378
+ //loop through the prefixes array inside credit card object
379
+ for (var digits in this._internalVars.creditCards[key].prefixes) {
380
+ //Set properties if entry matches valid digits
381
+ if (this._internalVars.creditCards[key].prefixes[digits].indexOf('-') >= 0) {
382
+ var parsedRange = parseRange.call(this, this._internalVars.creditCards[key].prefixes[digits]);
383
+ if (inputValue.substring(0, parsedRange.hyphenPosition) >= parsedRange.beginningPoint && inputValue.substring(0, parsedRange.hyphenPosition) <= parsedRange.endPoint) {
384
+ this._internalVars.creditCardType = key;
385
+ this._internalVars.cardFormatArray = this._internalVars.creditCards[key].cardFormatArray;
386
+ cardIsSet = true;
387
+ }
388
+ } else {
389
+ if (inputValue.substring(0, this._internalVars.creditCards[key].prefixes[digits].length) === this._internalVars.creditCards[key].prefixes[digits]) {
390
+ this._internalVars.creditCardType = key;
391
+ this._internalVars.cardFormatArray = this._internalVars.creditCards[key].cardFormatArray;
392
+ cardIsSet = true;
393
+ }
394
+ }
395
+ }
396
+ }
397
+ }
398
+ if (this._options.alternateCard) {
399
+ //Loop through alternateCard setting object
400
+ for (var alternateCard in this._options.alternateCard) {
401
+ if (this._options.alternateCard[alternateCard].valid === true) {
402
+ for (var cardDigits in this._options.alternateCard[alternateCard].prefixes) {
403
+ if (this._options.alternateCard[alternateCard].prefixes[cardDigits].indexOf('-') >= 0) {
404
+ var _parsedRange = parseRange.call(this, this._options.alternateCard[alternateCard].prefixes[cardDigits]);
405
+ if (inputValue.substring(0, _parsedRange.hyphenPosition) >= _parsedRange.beginningPoint && inputValue.substring(0, _parsedRange.hyphenPosition) <= _parsedRange.endPoint) {
406
+ this._internalVars.creditCardType = alternateCard;
407
+ this._internalVars.cardFormatArray = this._options.alternateCard[alternateCard].cardFormatArray;
408
+ cardIsSet = true;
409
+ }
410
+ } else {
411
+ if (inputValue.substring(0, this._options.alternateCard[alternateCard].prefixes[cardDigits].length) === this._options.alternateCard[alternateCard].prefixes[cardDigits]) {
412
+ this._internalVars.creditCardType = alternateCard;
413
+ this._internalVars.cardFormatArray = this._options.alternateCard[alternateCard].cardFormatArray;
414
+ cardIsSet = true;
415
+ }
416
+ }
417
+ }
418
+ }
419
+ }
420
+ }
421
+
422
+ //Set default properties if entry does not match valid digits
423
+ if (cardIsSet === false) {
424
+ this._internalVars.creditCardType = 'default';
425
+ this._internalVars.creditCardInput.removeAttribute('maxlength');
426
+ } else {
427
+ //Set sequence array based on card format
428
+ this._internalVars.sequenceArray = [];
429
+ var sequenceNumber = 0;
430
+ Array.prototype.forEach.call(this._internalVars.cardFormatArray, function (formatNumber) {
431
+ sequenceNumber += formatNumber;
432
+ _this._internalVars.sequenceArray.push(sequenceNumber);
433
+ _this._internalVars.cardMaxLenth = sequenceNumber + _this._internalVars.cardFormatArray.length - 1;
434
+ });
435
+ }
436
+ }
437
+
438
+ /**
439
+ * setCardImage()
440
+ * sets the card type image on the view
441
+ */
442
+ function setCardImage() {
443
+ if (this._internalVars.creditCardType !== 'default') {
444
+ var newCardType = false;
445
+ if (this._options.alternateCard) {
446
+ for (var type in this._options.alternateCard) {
447
+ if (this._internalVars.creditCardType === type) {
448
+ newCardType = true;
449
+ }
450
+ }
451
+ }
452
+ if (newCardType === true) {
453
+ this._internalVars.creditCardImageField.setAttribute('class', 'credit-card-image');
454
+ } else {
455
+ this._internalVars.creditCardImageField.setAttribute('class', 'credit-card-image ' + this._internalVars.creditCardType);
456
+ }
457
+ } else {
458
+ this._internalVars.creditCardImageField.setAttribute('class', 'credit-card-image');
459
+ }
460
+ }
461
+
462
+ /**
463
+ * setCardFormat(key)
464
+ * @param key
465
+ * formats the entry based on the card type
466
+ */
467
+ function setCardFormat(key) {
468
+ //Set variables for cursor position
469
+ var caretPos = this._internalVars.creditCardInput.selectionStart;
470
+ var cursorPosition = caretPos;
471
+ if (this._internalVars.creditCardType === 'default') {
472
+ this._internalVars.creditCardInput.value = this._internalVars.creditCardInput.value.replace(/ /g, '');
473
+ } else {
474
+ //Set max length based on card type
475
+ this._internalVars.creditCardInput.setAttribute('maxlength', this._internalVars.cardMaxLenth);
476
+
477
+ //remove next available number if backspacing over a space
478
+ if (key === 8) {
479
+ for (var b = 0; b < this._internalVars.sequenceArray.length; b++) {
480
+ if (caretPos === this._internalVars.sequenceArray[b] + b) {
481
+ var first = this._internalVars.creditCardInput.value.slice(0, caretPos - 1);
482
+ var second = this._internalVars.creditCardInput.value.slice(caretPos, this._internalVars.creditCardInput.value.length);
483
+ this._internalVars.creditCardInput.value = first + second;
484
+ cursorPosition = caretPos - 1;
485
+ }
486
+ }
487
+ }
488
+
489
+ //Set variable containing input value and previous value without spaces
490
+ var inputValue = this._internalVars.creditCardInput.value.replace(/ /g, '');
491
+ this._internalVars.creditCardInputValue = inputValue;
492
+ var prevInputValue = this._internalVars.creditCardInputPreviousValue.replace(/ /g, '');
493
+ var difference = inputValue.length - prevInputValue.length;
494
+ var newValueArray = [];
495
+ for (var v = 0; v < this._internalVars.sequenceArray.length; v++) {
496
+ if (inputValue.length >= this._internalVars.sequenceArray[v] - this._internalVars.cardFormatArray[v]) {
497
+ newValueArray.push(inputValue.substring(this._internalVars.sequenceArray[v] - this._internalVars.cardFormatArray[v], this._internalVars.sequenceArray[v]));
498
+ }
499
+ }
500
+
501
+ //check if multiple keys pressed
502
+ if (key !== 8) {
503
+ if (this._internalVars.creditCardInputPreviousValue.length + 1 < this._internalVars.creditCardInput.value.length) {
504
+ for (var i = 0; i < this._internalVars.sequenceArray.length; i++) {
505
+ if (caretPos - difference < this._internalVars.sequenceArray[i] + (i + 1) && caretPos > this._internalVars.sequenceArray[i] + (i + 1)) {
506
+ cursorPosition = caretPos + 1;
507
+ }
508
+ }
509
+ }
510
+ }
511
+
512
+ //combine value arrays with a space
513
+ var newValue = newValueArray.join(' ');
514
+ this._internalVars.creditCardInput.value = newValue;
515
+
516
+ //update cursor position and/or add a space if a number is pressed
517
+ if (key !== 8) {
518
+ for (var s = 0; s < this._internalVars.sequenceArray.length; s++) {
519
+ if (caretPos + (difference - 1) > this._internalVars.sequenceArray[s] + (s + 1) && caretPos <= this._internalVars.sequenceArray[s] + (s + 1)) {
520
+ cursorPosition = caretPos + 1;
521
+ }
522
+ if (s + 1 !== this._internalVars.cardFormatArray.length && caretPos === this._internalVars.sequenceArray[s] + s && this._internalVars.creditCardInputPreviousValue.length !== this._internalVars.creditCardInput.value.length) {
523
+ cursorPosition = caretPos + 1;
524
+ if (caretPos === this._internalVars.creditCardInput.value.length) {
525
+ this._internalVars.creditCardInput.value = this._internalVars.creditCardInput.value + ' ';
526
+ }
527
+ }
528
+ }
529
+ }
530
+ this._internalVars.creditCardInputPreviousValue = this._internalVars.creditCardInput.value;
531
+ }
532
+ this._internalVars.creditCardInput.setSelectionRange(cursorPosition, cursorPosition);
533
+ }
534
+ function maskEntry() {
535
+ var unmaskedCharacterLength = 4,
536
+ hasSpace = 0,
537
+ cardNumber = this.getCardNumber();
538
+
539
+ //check if value has 5 or more letters
540
+ if (cardNumber !== null && cardNumber.length > unmaskedCharacterLength) {
541
+ // create mask format
542
+ var maskArray = [];
543
+
544
+ // loop through field value
545
+ for (var i = 0; i < this._internalVars.creditCardInput.value.length; i++) {
546
+ var num = this._internalVars.creditCardInput.value.charAt(i);
547
+ if (num === ' ' && i === this._internalVars.creditCardInput.value.length - 1) {} else if (num === ' ') {
548
+ maskArray.push(' ');
549
+ if (this._internalVars.creditCardInput.value.length - (i + 1) < unmaskedCharacterLength + 1) {
550
+ hasSpace = 1;
551
+ }
552
+ } else {
553
+ maskArray.push('9');
554
+ }
555
+ }
556
+
557
+ // create single string mask
558
+ var mask = maskArray.join('');
559
+
560
+ //set mask character length and apply mask
561
+ var maskedCharsLength = cardNumber.length - unmaskedCharacterLength - hasSpace;
562
+ $(this._internalVars.creditCardInput).maskSSN(mask, {
563
+ maskedChar: '•',
564
+ maskedCharsLength: maskedCharsLength
565
+ });
566
+ this._internalVars.maskSet = true;
567
+ }
568
+ }
569
+
570
+ /**
571
+ * setLocalVars()
572
+ * set all the local vars to passed in options
573
+ */
574
+ function setLocalVars() {
575
+ //determine the type of content passed in
576
+ if (this._internalVars.contentType === 'string') {
577
+ this._internalVars.node = document.querySelector(this._options.content);
578
+ } else if (this._internalVars.contentType === 'domNode') {
579
+ this._internalVars.node = this._options.content;
580
+ }
581
+ this._internalVars.creditCardField = this._internalVars.node;
582
+ this._internalVars.creditCardClass = 'credit-card';
583
+ this._internalVars.creditCardInput = this._internalVars.creditCardField.querySelector('.' + this._internalVars.creditCardClass);
584
+ this._internalVars.creditCardInputHidden = this._internalVars.creditCardField.querySelector('.secureInput');
585
+ this._internalVars.creditCardImageClass = 'credit-card-image';
586
+ this._internalVars.creditCardImageField = this._internalVars.creditCardField.querySelector('.' + this._internalVars.creditCardImageClass);
587
+ this._internalVars.creditCardInputPreviousValue = this._internalVars.creditCardInput.value;
588
+ this._internalVars.creditCardInputValue = null;
589
+ this._internalVars.maskSet = false;
590
+ }
591
+ var _default = exports["default"] = CreditCard;