geico-design-kit 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

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,604 @@
1
+ import baseComponent from '../../src/baseComponent';
2
+ import UserAgentService from '../../src/services/UserAgentService';
3
+
4
+ const validateSettings = [
5
+ {
6
+ setting: "content",
7
+ isRequired: true,
8
+ validate: "type",
9
+ possibleValues: ["string", "object"],
10
+ errorMessage: ["GDK Payment Plans : Content must be defined and set to a DOM selector or Node"]
11
+ },
12
+ {
13
+ setting: "initialActivePayPlan",
14
+ isRequired: false,
15
+ validate: "type",
16
+ possibleValues: ["number"],
17
+ errorMessage: ["GDK Payment Plans : Content must be defined and set to a number"]
18
+ },
19
+ {
20
+ setting: "onPayPlanSelection",
21
+ isRequired: false,
22
+ validate: "type",
23
+ possibleValues: ["function"],
24
+ errorMessage: ["GDK Payment Plans : Content must be defined and set to a function"]
25
+ }
26
+ ];
27
+
28
+ class PayPlans {
29
+ /**
30
+ * PayPlans Constructor
31
+ * @param {Object} options sets _internalVars, _defaults, creates options, validates settings, sets up the environment
32
+ */
33
+ constructor(options) {
34
+
35
+ console.log('Payment Plans initialized');
36
+
37
+ this._internalVars = {
38
+ node: null //used for current node
39
+ };
40
+
41
+ //options with defaults set
42
+ this._defaults = {
43
+
44
+ };
45
+
46
+ // Create options by extending defaults with the passed in arugments
47
+ if (options && typeof options === "object") {
48
+ this._options = baseComponent.extendDefaults(this._defaults, options);
49
+ }
50
+
51
+
52
+ //if the required options are valid set up the environment
53
+ if( baseComponent.validateSettings(this._options, validateSettings) ){
54
+ this._internalVars.contentType = baseComponent.getContentType(this);
55
+ setLocalVars.call(this);
56
+ setEvents.call(this);
57
+ checkPayPlans.call(this);
58
+
59
+ Array.prototype.forEach.call(this._internalVars.payPlanCardTopObject, (element)=> {
60
+ if(!element.getAttribute('tabindex'))
61
+ element.setAttribute('tabindex', '0');
62
+ element.setAttribute('role', 'radio');
63
+ if(!element.getElementsByTagName('input')[0].getAttribute('tabindex'))
64
+ element.getElementsByTagName('input')[0].setAttribute('tabindex', '-1');
65
+ if(!element.getAttribute('aria-checked'))
66
+ element.setAttribute('aria-checked', 'false');
67
+ });
68
+
69
+ Array.prototype.forEach.call(this._internalVars.payPlanInnerWrapperObjects, (el)=> {
70
+ el.querySelectorAll('.payment-plan-row')[0].setAttribute('role', 'radiogroup');
71
+ });
72
+
73
+ Array.prototype.forEach.call(this._internalVars.payPlanCardTopObject, (element)=> {
74
+ element.getElementsByTagName('input')[0].setAttribute('tabindex', '-1');
75
+ });
76
+
77
+ if (this._options.initialActivePayPlan && this._options.initialActivePayPlan <= this._internalVars.payPlanCardTopObject.length) {
78
+ this.setPayPlan.call(this, this._options.initialActivePayPlan);
79
+ }
80
+ }
81
+ }
82
+
83
+ /**
84
+ * setPayPlan(payPlanNumber)
85
+ * @param payPlanNumber
86
+ * Sets the selected pay plan.
87
+ */
88
+ setPayPlan(payPlanNumber) {
89
+ setPayPlan.call(this, payPlanNumber);
90
+ }
91
+
92
+ /**
93
+ * getPayPlan()
94
+ * @returns {NodeListOf<Element>}
95
+ * Returns a node list of the selected payment plan (top card & bottom card)
96
+ */
97
+ getPayPlan() {
98
+ let selectedPlan = document.querySelectorAll('.' + this._internalVars.payPlanSelectedClass);
99
+ return selectedPlan;
100
+ }
101
+
102
+ /**
103
+ * setCarouselArrows()
104
+ * Removes the carousel arrows if all pay plans can be viewed on the page.
105
+ */
106
+ setCarouselArrows() {
107
+ checkPayPlans.call(this);
108
+ }
109
+
110
+ /**
111
+ * removes the node from the dom and any events attached
112
+ */
113
+ destroy(){
114
+ removeEvents.call(this);
115
+ this._internalVars.node.parentNode.removeChild(this._internalVars.node);
116
+
117
+ //a little garbage collection
118
+ for (var variableKey in this){
119
+ if (this.hasOwnProperty(variableKey)){
120
+ delete this[variableKey];
121
+ }
122
+ }
123
+ }
124
+ }
125
+
126
+ // Private Methods
127
+
128
+ /**
129
+ * setEvents()
130
+ * Sets all the events needed for the component
131
+ */
132
+ function setEvents() {
133
+ let eventName = UserAgentService._clickEventName();
134
+
135
+ Array.prototype.forEach.call(this._internalVars.payPlanCards, (el)=> {
136
+ el.addEventListener(eventName, setPayPlan.bind(this));
137
+ el.addEventListener('keyup', setPayPlan.bind(this));
138
+ el.addEventListener('mouseover', setState.bind(this));
139
+ el.addEventListener('mouseout', resetState.bind(this));
140
+ el.addEventListener('focus', setState.bind(this));
141
+ el.addEventListener('blur', resetState.bind(this));
142
+ });
143
+
144
+ Array.prototype.forEach.call(this._internalVars.carouselBtnObjects, (el)=> {
145
+ el.addEventListener(eventName, carouselMovement.bind(this));
146
+ el.addEventListener('keyup', carouselMovement.bind(this));
147
+ });
148
+
149
+ Array.prototype.forEach.call(this._internalVars.expandLink, (el)=> {
150
+ el.addEventListener(eventName, expand.bind(this));
151
+ });
152
+
153
+ window.addEventListener('resize', resetCarouselDefaults.bind(this));
154
+ }
155
+
156
+ /**
157
+ * Assigns a class to an internal variable based on the event type
158
+ * @param {Event} event Event type
159
+ */
160
+ function setEventType(event) {
161
+ if (event === 'mouseover' || event === 'mouseout') {
162
+ this._internalVars.eventType = 'hover';
163
+ } else {
164
+ this._internalVars.eventType = 'focus';
165
+ }
166
+ }
167
+
168
+ /**
169
+ * Evaluates which row (top or bottom of cards) and card in that row that should be targeted when setting states
170
+ * @param {Event} e Event type
171
+ */
172
+ function setRowIndex(e) {
173
+ let currentNode = e.currentTarget,
174
+ payPlanWrapper = currentNode.parentNode.parentNode,
175
+ rowWrapper = currentNode.parentNode,
176
+ payPlanCard = rowWrapper.querySelectorAll(this._internalVars.payPlanCardClass),
177
+ index = [].indexOf.call(payPlanCard, currentNode),
178
+ rowIndex = [].indexOf.call(payPlanWrapper.querySelectorAll('.payment-plan-row'), rowWrapper);
179
+
180
+ if (currentNode.classList.contains(this._internalVars.payPlanCardTopClass)) {
181
+ rowIndex = rowIndex + 1;
182
+ } else {
183
+ rowIndex = rowIndex - 1;
184
+ }
185
+
186
+ this._internalVars.rowIndex = rowIndex;
187
+ this._internalVars.cardIndex = index;
188
+ }
189
+
190
+ /**
191
+ * Sets state of card classes (hover, focus) based on the interaction with the card counterpart (top/bottom)
192
+ * @param {Event} e Event type
193
+ */
194
+ function setOtherCardState(e) {
195
+ setRowIndex.call(this, e);
196
+
197
+ e.currentTarget.parentNode.parentNode.children[this._internalVars.rowIndex].children[this._internalVars.cardIndex].classList.add(this._internalVars.eventType);
198
+ }
199
+
200
+ /**
201
+ * Sets the state of card classes (hover, focus) of the card interacted with (top/bottom)
202
+ * @param {Event} e Event type
203
+ */
204
+ function setState(e) {
205
+ let event = e.type;
206
+ setEventType.call(this, event);
207
+
208
+ e.currentTarget.classList.add(this._internalVars.eventType);
209
+
210
+ setOtherCardState.call(this, e);
211
+ }
212
+
213
+ /**
214
+ * Removes the state of card classes (hover, focus) of the card (top and bottom) containing the state
215
+ * @param {Event} e Event type
216
+ */
217
+ function resetState(e) {
218
+ let event = e.type;
219
+ setEventType.call(this, event);
220
+
221
+ Array.prototype.forEach.call(this._internalVars.node.querySelectorAll('.' + this._internalVars.eventType), (el)=> {
222
+ el.classList.remove(this._internalVars.eventType);
223
+ });
224
+ }
225
+
226
+ function setPayPlan(eventOrNumber) {
227
+ if (typeof eventOrNumber === 'number') {
228
+ let cardNumber = eventOrNumber;
229
+ let cardTop = this._internalVars.payPlanCardTopObject[cardNumber-1];
230
+
231
+ if(cardTop) {
232
+ resetSelected.call(this);
233
+ cardTop.classList.add(this._internalVars.payPlanSelectedClass);
234
+ cardTop.classList.add(this._internalVars.focusClass);
235
+ cardTop.children[0].checked = true;
236
+ cardTop.setAttribute('aria-checked', 'true');
237
+ cardTop.parentNode.parentNode.children[1].children[cardNumber-1].classList.add(this._internalVars.payPlanSelectedClass);
238
+ cardTop.parentNode.parentNode.children[1].children[cardNumber-1].classList.add(this._internalVars.focusClass);
239
+ payPlanInView.call(this);
240
+ }
241
+ } else {
242
+ let event = eventOrNumber;
243
+ if(event.type === 'keypress' || event.type === 'keyup' && ((event.keyCode || event.which) !== 13)){} else {
244
+ resetSelected.call(this);
245
+
246
+ event.currentTarget.classList.add(this._internalVars.payPlanSelectedClass);
247
+ event.currentTarget.classList.add(this._internalVars.focusClass);
248
+
249
+ setRowIndex.call(this, event);
250
+
251
+ if (event.currentTarget.classList.contains('card-top')) {
252
+ event.currentTarget.children[0].checked = true;
253
+ event.currentTarget.setAttribute('aria-checked', 'true');
254
+ } else {
255
+ event.currentTarget.parentNode.parentNode.children[this._internalVars.rowIndex].children[0].checked = true;
256
+ event.currentTarget.parentNode.parentNode.children[this._internalVars.rowIndex].setAttribute('aria-checked', 'true');
257
+ }
258
+
259
+ event.currentTarget.parentNode.parentNode.children[this._internalVars.rowIndex].children[this._internalVars.cardIndex].classList.add(this._internalVars.payPlanSelectedClass);
260
+ event.currentTarget.parentNode.parentNode.children[this._internalVars.rowIndex].children[this._internalVars.cardIndex].classList.add(this._internalVars.focusClass);
261
+
262
+ payPlanInView.call(this);
263
+ }
264
+ }
265
+
266
+ if (this._options.onPayPlanSelection) {
267
+ this._options.onPayPlanSelection(this.getPayPlan.call(this));
268
+ }
269
+ }
270
+
271
+ function resetSelected() {
272
+ let selected = this._internalVars.payPlanObject.querySelectorAll('.' + this._internalVars.payPlanSelectedClass);
273
+
274
+ selected[0].children[0].checked = false;
275
+ selected[0].setAttribute('aria-checked', 'false');
276
+
277
+ Array.prototype.forEach.call(selected, (el) => {
278
+ el.classList.remove(this._internalVars.payPlanSelectedClass);
279
+ el.classList.remove(this._internalVars.focusClass);
280
+ });
281
+ }
282
+
283
+ function carouselMovement(event) {
284
+ event.preventDefault();
285
+ if(event.type == 'keypress' || event.type == 'keyup' && ((event.keyCode || event.which) != 13)){} else {
286
+ if(!event.target.hasAttribute('disabled')) {
287
+ if(!this._internalVars.defaultsSet) {
288
+ setCarouselDefault.call(this);
289
+ }
290
+ if(this._internalVars.carouselInMotion === false) {
291
+ this._internalVars.carouselInMotion = true;
292
+ carouselSlide.call(this, event);
293
+ }
294
+ }
295
+ }
296
+ }
297
+
298
+ function setCarouselDefault() {
299
+ if(this._internalVars.payPlanWrapperObjects[1]) {
300
+ this._internalVars.carouselCardObejcts = this._internalVars.payPlanWrapperObjects[1].querySelectorAll(this._internalVars.payPlanCardClass);
301
+ } else {
302
+ this._internalVars.carouselCardObejcts = this._internalVars.payPlanWrapperObjects[0].querySelectorAll(this._internalVars.payPlanCardClass);
303
+ }
304
+ this._internalVars.corouselCardLength = this._internalVars.carouselCardObejcts.length / 2;
305
+ this._internalVars.carouselInitialWidth = this._internalVars.carouselMoveObject.clientWidth;
306
+ this._internalVars.carouselCardWidth = Math.ceil(this._internalVars.carouselCardObejcts[0].offsetWidth) + 10;
307
+ this._internalVars.carouselAcutalWidth = this._internalVars.carouselCardWidth * this._internalVars.corouselCardLength;
308
+ this._internalVars.cardsOnLeft = 0;
309
+ this._internalVars.cardsOnRight = this._internalVars.corouselCardLength - this._internalVars.cardsOnLeft - 3;
310
+
311
+ this._internalVars.defaultsSet = true;
312
+ }
313
+
314
+ function carouselSlide(event) {
315
+ let operand = null,
316
+ currentMarginValue = this._internalVars.carouselMoveObject.style.marginLeft,
317
+ currentMargin = currentMarginValue.slice(0, -2),
318
+ movementValue = this._internalVars.carouselCardWidth,
319
+ newMargin = null,
320
+ disableRightArrow = false,
321
+ disableLeftArrow = false;
322
+
323
+ let cardsRight = 0;
324
+ let cardsLeft = 0;
325
+
326
+ let currentNode = document.querySelectorAll('.' + this._internalVars.payPlanSelectedClass)[0],
327
+ payPlanWrapper = currentNode.parentNode.parentNode,
328
+ arrowWdith = document.querySelector('.carousel').offsetWidth,
329
+ payPlanWrapperLeft = payPlanWrapper.offsetLeft - arrowWdith,
330
+ outerWrapper = currentNode.parentNode.parentNode.parentNode;
331
+
332
+ Array.prototype.forEach.call(this._internalVars.payPlanCardTopObject, (card) => {
333
+ if (card.offsetLeft + (card.clientWidth + 5) + payPlanWrapperLeft > outerWrapper.clientWidth) {
334
+ cardsRight++;
335
+ }
336
+ if (card.offsetLeft + payPlanWrapper.offsetLeft < 0) {
337
+ cardsLeft--;
338
+ }
339
+ });
340
+
341
+ if (event.target.classList.contains('icon-chevron-right')) {
342
+ operand = '-';
343
+ cardsLeft = cardsLeft - 1;
344
+ cardsRight = cardsRight - 1;
345
+ } else {
346
+ operand = '+';
347
+ cardsLeft = cardsLeft + 1;
348
+ cardsRight = cardsRight + 1;
349
+ }
350
+
351
+ if (operand === '-') {
352
+ if (cardsRight === 0) {
353
+ newMargin = -(this._internalVars.corouselCardLength * this._internalVars.carouselCardWidth) + this._internalVars.carouselMoveObject.parentNode.clientWidth;
354
+ disableRightArrow = true;
355
+ } else {
356
+ newMargin = currentMargin - movementValue;
357
+ disableRightArrow = false;
358
+ }
359
+ } else {
360
+ if ( cardsLeft === 0 || cardsLeft === -0 ) {
361
+ newMargin = 0;
362
+ disableLeftArrow = true;
363
+ } else {
364
+ newMargin = Number(currentMargin) + movementValue;
365
+ disableLeftArrow = false;
366
+ }
367
+ }
368
+
369
+ this._internalVars.carouselMoveObject.style.marginLeft = newMargin + 'px';
370
+
371
+ this._internalVars.cardsOnLeft = cardsLeft;
372
+ this._internalVars.cardsOnRight = cardsRight;
373
+
374
+ setTimeout(enableArrows.bind(this), 360);
375
+
376
+ function enableArrows() {
377
+ this._internalVars.carouselInMotion = false;
378
+ }
379
+
380
+ setArrowState.call(this, disableRightArrow, disableLeftArrow);
381
+ }
382
+
383
+ function setArrowState(disableRightArrow, disableLeftArrow) {
384
+ let rightArrow = document.querySelector('.icon-chevron-right'),
385
+ leftArrow = document.querySelector('.icon-chevron-left');
386
+
387
+ if (disableRightArrow === true) {
388
+ rightArrow.setAttribute('disabled', 'disabled');
389
+ rightArrow.setAttribute('aria-label', 'Right button disabled');
390
+ rightArrow.parentNode.classList.add(this._internalVars.carouselDisabledClass);
391
+ } else {
392
+ rightArrow.removeAttribute('disabled');
393
+ rightArrow.parentNode.classList.remove(this._internalVars.carouselDisabledClass);
394
+ rightArrow.setAttribute('aria-label', 'Right button');
395
+ }
396
+
397
+ if (disableLeftArrow === true) {
398
+ leftArrow.setAttribute('disabled', 'disabled');
399
+ leftArrow.parentNode.classList.add(this._internalVars.carouselDisabledClass);
400
+ leftArrow.setAttribute('aria-label', 'Left button disabled');
401
+ } else {
402
+ leftArrow.removeAttribute('disabled');
403
+ leftArrow.parentNode.classList.remove(this._internalVars.carouselDisabledClass);
404
+ leftArrow.setAttribute('aria-label', 'Left button');
405
+ }
406
+ }
407
+
408
+ function resetCarouselDefaults() {
409
+ this._internalVars.defaultsSet = false;
410
+
411
+ if (window.innerWidth > 911) {
412
+
413
+ if(this._internalVars.viewPortCheck === true) {
414
+ let delay = setTimeout(resetCarouselPos.bind(this), 30);
415
+ this._internalVars.carouselMoveObject.style.position = 'absolute';
416
+ this._internalVars.carouselMoveObject.style.left = 0 + 'px';
417
+ this._internalVars.viewPortCheck = false;
418
+
419
+ let disableLeftArrow = true;
420
+ let disableRightArrow = false;
421
+ setArrowState.call(this, disableRightArrow, disableLeftArrow);
422
+ }
423
+
424
+ this._internalVars.cardsOnLeft = 0;
425
+ this._internalVars.cardsOnRight = this._internalVars.corouselCardLength - this._internalVars.cardsOnLeft - 2;
426
+
427
+ } else {
428
+ this._internalVars.carouselMoveObject.removeAttribute('style');
429
+ this._internalVars.viewPortCheck = true;
430
+ }
431
+ }
432
+
433
+ function resetCarouselPos() {
434
+ this._internalVars.carouselMoveObject.style.position = 'relative';
435
+ this._internalVars.carouselMoveObject.style.marginLeft = 0 + 'px';
436
+ this._internalVars.carouselMoveObject.style.removeProperty('left');
437
+ }
438
+
439
+ function payPlanInView() {
440
+ let currentNode = document.querySelectorAll('.' + this._internalVars.payPlanSelectedClass)[0],
441
+ payPlanWrapper = currentNode.parentNode.parentNode,
442
+ arrowWdith = document.querySelector('.carousel').offsetWidth,
443
+ payPlanWrapperLeft = payPlanWrapper.offsetLeft - arrowWdith,
444
+ outerWrapper = currentNode.parentNode.parentNode.parentNode,
445
+ left = null,
446
+ disableRightArrow = false,
447
+ disableLeftArrow = false;
448
+
449
+ if (window.innerWidth > 911) {
450
+ if(!this._internalVars.defaultsSet) {
451
+ setCarouselDefault.call(this);
452
+ }
453
+
454
+ let cards = this._internalVars.payPlanCardTopObject.length;
455
+ let length = (this._internalVars.payPlanCardTopObject[0].offsetWidth + 5) * cards;
456
+
457
+ if (currentNode.offsetLeft + (currentNode.clientWidth + 5) + payPlanWrapperLeft > outerWrapper.clientWidth) {
458
+ left = currentNode.offsetLeft - (outerWrapper.clientWidth - currentNode.offsetWidth);
459
+ }
460
+
461
+ if (currentNode.offsetLeft + payPlanWrapper.offsetLeft < 0) {
462
+ left = currentNode.offsetLeft
463
+ }
464
+
465
+ this._internalVars.carouselMoveObject.style.marginLeft = '-' + left + 'px';
466
+
467
+ let cardsRight = 0;
468
+ let cardsLeft = 0;
469
+
470
+ Array.prototype.forEach.call(this._internalVars.payPlanCardTopObject, (card) => {
471
+ if (card.offsetLeft + (card.clientWidth + 5) + payPlanWrapperLeft > outerWrapper.clientWidth) {
472
+ cardsRight++;
473
+ }
474
+ if (card.offsetLeft + payPlanWrapper.offsetLeft < 0) {
475
+ cardsLeft--;
476
+ }
477
+ });
478
+
479
+ if (left !== null) {
480
+ if (left < 10) {
481
+ disableLeftArrow = true;
482
+ }
483
+
484
+ if (outerWrapper.clientWidth + left > length) {
485
+ disableRightArrow = true;
486
+ }
487
+
488
+ setArrowState.call(this, disableRightArrow, disableLeftArrow);
489
+ }
490
+
491
+ this._internalVars.cardsOnLeft = cardsLeft;
492
+ this._internalVars.cardsOnRight = cardsRight;
493
+ } else {
494
+
495
+ if (currentNode.offsetLeft + currentNode.clientWidth - outerWrapper.scrollLeft > outerWrapper.clientWidth) {
496
+ left = currentNode.offsetLeft - (outerWrapper.clientWidth - currentNode.clientWidth - 15);
497
+ $(outerWrapper).animate({
498
+ scrollLeft: left
499
+ }, 350);
500
+ }
501
+
502
+ if (outerWrapper.scrollLeft > currentNode.offsetLeft) {
503
+ left = currentNode.offsetLeft;
504
+ $(outerWrapper).animate({
505
+ scrollLeft: left
506
+ }, 350);
507
+ }
508
+ }
509
+ }
510
+
511
+ /**
512
+ * hides carousel arrows if 3 or less additional pay plans exist
513
+ */
514
+ function checkPayPlans() {
515
+ let viewMorePayPlans = this._internalVars.carouselMoveObject.querySelectorAll('.' + this._internalVars.payPlanCardTopClass);
516
+ if (viewMorePayPlans.length < 4) {
517
+ Array.prototype.forEach.call(this._internalVars.carouselObjects, (array)=> {
518
+ array.style.display = 'none';
519
+ });
520
+ } else {
521
+ this._internalVars.carouselMoveObject.parentElement.classList.add('pay-plan-carousel');
522
+ }
523
+ }
524
+
525
+ function expand(event) {
526
+ event.preventDefault();
527
+ let wrapper = event.currentTarget.parentElement;
528
+ let icon = wrapper.querySelectorAll('span')[1];
529
+ if (wrapper.classList.contains('collapsed')) {
530
+ wrapper.classList.remove('collapsed');
531
+ $(this._internalVars.premiumClass).slideDown();
532
+ wrapper.querySelector('a').innerHTML = "Hide Payment Schedule";
533
+ wrapper.setAttribute('aria-expanded', 'true');
534
+ icon.classList.remove('icon-chevron-down');
535
+ icon.classList.add('icon-chevron-up');
536
+
537
+ } else {
538
+ wrapper.classList.add('collapsed');
539
+ $(this._internalVars.premiumClass).slideUp();
540
+ wrapper.querySelector('a').innerHTML = "Show Payment Schedule";
541
+ wrapper.setAttribute('aria-expanded', 'false');
542
+ icon.classList.remove('icon-chevron-up');
543
+ icon.classList.add('icon-chevron-down');
544
+ }
545
+ }
546
+
547
+ /**
548
+ * setLocalVars()
549
+ * set local vars to the ones passed in options
550
+ */
551
+ function setLocalVars() {
552
+ if(this._internalVars.contentType === 'string') {
553
+ this._internalVars.node = document.querySelector(this._options.content);
554
+ } else if (this._internalVars.contentType === 'domNode') {
555
+ this._internalVars.node = this._options.content;
556
+ }
557
+
558
+ this._internalVars.payPlanObject = this._internalVars.node;
559
+
560
+ this._internalVars.payPlanCardClass = '.payment-plan-card';
561
+ this._internalVars.payPlanCards = this._internalVars.payPlanObject.querySelectorAll(this._internalVars.payPlanCardClass);
562
+
563
+ this._internalVars.payPlanCardTopClass = 'card-top';
564
+ this._internalVars.payPlanCardTopObject = this._internalVars.node.querySelectorAll('.' + this._internalVars.payPlanCardTopClass);
565
+
566
+ this._internalVars.hoverClass = 'hover';
567
+ this._internalVars.focusClass = 'focus';
568
+
569
+ this._internalVars.payPlanSelectedClass = 'payment-plan-selected';
570
+
571
+ this._internalVars.carouselClass = 'carousel';
572
+ this._internalVars.carouselObjects = this._internalVars.node.querySelectorAll('.' + this._internalVars.carouselClass);
573
+ this._internalVars.carouselInMotion = false;
574
+
575
+ this._internalVars.carouselBtnClass = 'carousel-icon';
576
+ this._internalVars.carouselBtnObjects = this._internalVars.node.querySelectorAll('.' + this._internalVars.carouselBtnClass);
577
+
578
+ this._internalVars.carouselDisabledClass = 'disabled';
579
+
580
+ this._internalVars.payPlanWrapperClass = 'payment-plan-wrapper';
581
+ this._internalVars.payPlanWrapperObjects = this._internalVars.payPlanObject.querySelectorAll('.' + this._internalVars.payPlanWrapperClass);
582
+
583
+ this._internalVars.defaultsSet = false;
584
+
585
+ this._internalVars.payPlanInnerWrapperClass = 'payment-plan-inner-wrapper';
586
+ this._internalVars.payPlanInnerWrapperObjects = this._internalVars.payPlanObject.querySelectorAll('.' + this._internalVars.payPlanInnerWrapperClass);
587
+ if (this._internalVars.payPlanWrapperObjects[1]) {
588
+ this._internalVars.carouselMoveObject = this._internalVars.payPlanWrapperObjects[1].querySelector('.' + this._internalVars.payPlanInnerWrapperClass);
589
+ } else {
590
+ this._internalVars.carouselMoveObject = this._internalVars.payPlanWrapperObjects[0].querySelector('.' + this._internalVars.payPlanInnerWrapperClass);
591
+ }
592
+
593
+ this._internalVars.viewPortCheck = false;
594
+ this._internalVars.rowIndex = null;
595
+ this._internalVars.cardIndex = null;
596
+ this._internalVars.eventType = null;
597
+
598
+ this._internalVars.expandLinkClass = 'payment-schedule-link';
599
+ this._internalVars.expandLinkWrapper = this._internalVars.payPlanObject.querySelector('.' + this._internalVars.expandLinkClass);
600
+ this._internalVars.expandLink = this._internalVars.expandLinkWrapper.querySelectorAll('span');
601
+ this._internalVars.premiumClass = '.payment-schedule';
602
+ }
603
+
604
+ export default PayPlans;